ããã¯ãAutoCADçšã®
äžé£ã®ãã©ã°ã€ã³ã®å¥ã®èšäºã§ãã ããã¥ã¡ã³ãå
ã®ã¬ã€ã€ãŒã䜿çšããåºæ¬æäœã«ã€ããŠèª¬æããŸãã
public static string disclaimer = " AutoCAD. â .";
1.äžè¬çãªæ
å ±
ãã®èšäºã®ãã¹ãŠã®èªè
ã¯ãã¬ã€ã€ãŒãšã¯äœããããç¥ã£ãŠããã§ãããã ããªããã£ãã¬ãã«ã§ã¯ãéçºè
ã«ãšã£ãŠéèŠãªå
±éæ©èœãæã€èŠçŽ ãæç»ããããã®ã³ã³ãããšèããããšãã§ããŸãã
ã¬ã€ã€ãŒã¯ãå³é¢ãäœæãããšã³ãžãã¢ã ãã§ãªããããã°ã©ããŒã®ç掻ã倧å¹
ã«ç°¡çŽ åã§ããŸãã ããšãã°ãåãã¬ã€ã€ãŒã«ãããã¹ãŠã®èŠçŽ ãå¿
èŠã«å¿ããŠéåžžã«ãã°ããé衚瀺ã«ããŠãããäœæ¥é åã«å衚瀺ã§ããŸãã
ãã®èšäºã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãåºæ¬çãªæ
å ±ãå¿
èŠã«ãªããŸããããã¯äž»ã«
ããããåéã§ã
ãŸã ïŒ
mirror ïŒ
1.1ã ã¬ã€ã€ãŒçªå·ãŒã
AutoCADããã¥ã¡ã³ãã«ã¯ãåžžã«å°ãªããšã1ã€ã®ã¬ã€ã€ãŒãå«ãŸããŠããŸã-ãŒãïŒååã0ãïŒã¯åé€ã§ããŸããã å€ãã®å Žåããã®ã¬ã€ã€ãŒã¯éåžžã«äŸ¿å©ã§ããããšãã°ãä»ã®ã¬ã€ã€ãŒãåé€ããå Žåã§ãã
1.2ã çŸåšã®ã¬ã€ã€ãŒ
ããã¥ã¡ã³ãã®ã¬ã€ã€ãŒã®1ã€ã¯ææ°ã§ãªããã°ãªããŸããã å³é¢ã«è¿œå ããããã¹ãŠã®ãªããžã§ã¯ãã¯ããã®äžã«é
眮ãããŸãïŒå°ãªããšãããªããã£ã-ç©äºã¯ãããã¯ã§ã¯å€å°è€éã§ãïŒã
1.3ã ã¬ã€ã€ãŒã®ããããã£
AutoCADã®ïŒãŒããå«ãïŒã¬ã€ã€ãŒã«ã¯3ã€ã®ããããã£ããããŸãã
- onïŒ " on "ïŒ;
- åçµïŒ " freeze "ïŒ;
- ããã¯ïŒã ãã㯠ãïŒã
ãããã®ããããã£ã¯ãã¹ãŠãã€ããªã§ãïŒåããããã£ã¯yes / noãã©ã°ãšèŠãªãããšãã§ããŸãïŒã
ã
on ããã©ã°
㯠ãã¬ã€ã€ãŒã®å¯èŠæ§ãæ
åœããŸãã ãã®ãã©ã°ããªãã«ãããšãã¬ã€ã€ãŒã«ãããã¹ãŠã®èŠçŽ ãå³é¢ã«è¡šç€ºãããªããªããŸãã
åçµãã©ã°ã¯ãã¬ã€ã€ãŒã®å¯èŠæ§ã«ãé¢äžããŸãã ãã®å¹æã¯ãããªã³ããã©ã°ã«äŒŒãŠããŸãã ããã¥ã¡ã³ãã«ç€ºãããŠããããã«ããã®ããããã£ã«ãããéåžžã«å€§ããªå³é¢ã®ããã©ãŒãã³ã¹ãåäžããŸãã
泚æïŒå人çã«ãç§ã¯å€§ããªå³é¢ã§äœæ¥ããããšãããã®ããããã£ã䜿çšããããšããããŸããã
ã
ãã㯠ããã©ã°ã¯ãã¬ã€ã€ãŒã®ç·šéãæ
åœããŸãã ãã®ãã©ã°ãèšå®ãããŠããå Žåãã¬ã€ã€ãŒäžã«ãããã¹ãŠã®èŠçŽ ã¯ãå€æŽïŒç§»åãåé€ãªã©ïŒãã§ããªããªããŸãã ããã«ãããã¯ãããã¬ã€ã€ãŒã«æ°ããèŠçŽ ãè¿œå ããããšã¯ã§ããŸããã
ã¬ã€ã€ãŒã®ããããã£ã¯ãAutoCADããå¶åŸ¡ã§ããŸãã 次ã®å³ã§ã¯ããã¬ã€ã€ãŒãããã«ã¯ç·ã®æ¿ãè²ã§åŒ·èª¿è¡šç€ºãããã¬ã€ã€ãŒã®ããããããŠã³ãªã¹ãã¯çŽ«è²ã§åŒ·èª¿è¡šç€ºãããŸãã ïŒ
泚æïŒãããã®ã¹ã€ããã¯æ¬åœã«æ³šæãæã䟡å€ããããŸãããã©ã°ã€ã³ãäœæãããšãããã¹ãŠãæåã«ååŸããããšã¯éããããæåå¶åŸ¡ãã䜿çšããå¿
èŠãããå ŽåããããŸãã
泚æïŒäžéšã®ãµã€ãã§ã¯ããã®ç»åã¯ç·ãšçŽ«ã§ã¯ãªããã©ã€ã ãšããªãªãããŒãã§ãããšäž»åŒµããŠã
ãŸã ã
...
ç§ã¯
ç¬ã ãšæããŸãã
1.4ã ã¬ã€ã€ãŒç®¡ç
ã¬ã€ã€ãŒã䜿çšããæãåçŽãªã¢ã¯ã·ã§ã³ã«ã€ããŠã¯ãåã®æ®µèœã§èª¬æããŸããã ããè€éãªæäœïŒããšãã°ãã¬ã€ã€ãŒã®äœæãŸãã¯åé€ïŒãè¡ãã«ã¯ãã¬ã€ã€ãŒããããã£ããã«ã䜿çšããå¿
èŠããããŸããããã¯ã
LAYERã³ãã³ãã«ãã£ãŠåŒã³åºãããããã¬ã€ã€ãŒããã«ã®å¯Ÿå¿ããã¢ã€ã³ã³ãã¯ãªãã¯ããŸãïŒåã®ã»ã¯ã·ã§ã³ã®å³ã§ãªã¬ã³ãžè²ã§ç€ºãããŠããŸãïŒã ãã®ããã«ã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
ç¹ã«èå³æ·±ãã®ã¯ããã¬ãŒã å
ã§åŒ·èª¿è¡šç€ºããããã¿ã³ã®ã»ã¯ã·ã§ã³ã§ãã æåã®ãã¿ã³ã¯æ°ããã¬ã€ã€ãŒãäœæãã3çªç®ã®ãã¿ã³ã¯å¯èœã§ããã°æ¢åã®ã¬ã€ã€ãŒãåé€ããŸãã
åé€ã§ããŸããïŒ
- ãŒãå±€;
- çŸåšã®ã¬ã€ã€ãŒã
- å°ãªããšã1ã€ã®ãªããžã§ã¯ããå«ãã¬ã€ã€ãŒã
- ãããã¯å®çŸ©ã§åç
§ãããã¬ã€ã€ãŒã
ã¬ã€ã€ãŒãåé€ããåã«ããããã®æ¡ä»¶ãæºããããŠããããšã確èªããå¿
èŠããããŸãã
泚æïŒå®éãåé€ãçŠæ¢ãããŠããã¬ã€ã€ãŒã®ãªã¹ãã¯ããé·ããªã£ãŠããŸãã
æ®å¿µãªããããã®æçš¿
ã®èè
ã¯
DefpointsãŸãã¯
Xrefã«äŸåããã¬ã€ã€ãŒãæ±ãå¿
èŠããªãã£ãã®ã§
ããããã®åºæ¬çãªè³ªåã®ç 究ã¯ç°¡åãªå®¿é¡ãšããŠèªè
ã«ä»»ããŸãã ^ __ ^
ããã¯ãã¹ãŠçè«ã§ããç·Žç¿ãéå§ã§ããŸãã
2.ãã©ã°ã€ã³ãæžã
2.1ã æ°ãããã©ã°ã€ã³ãããžã§ã¯ããäœæãã
ãµã€ã¯ã«ã®
æåã®èšäºã¯ããã«æ§ããããŸããã
.NET Framework 3.5ã¯ã次ã®äŸã§.NET Frameworkã®å¿
é ããŒãžã§ã³ãšããŠãªã¹ããããŠããŸãã
ã³ãŒããã¬ãŒã ã¯ãŒã¯ãããã«è¿œå ã§ããŸãã using System; using Autodesk.AutoCAD.Runtime; using Autodesk.Windows; namespace MyAutoCADDll { public class Commands : IExtensionApplication { // AutoCAD "TestCommand" [CommandMethod("TestCommand")] public void MyCommand() { } // Initialize() Terminate() , IExtensionApplication public void Initialize() { } public void Terminate() { } } }
2.2ã å¿
èŠãªã©ã€ãã©ãªãžã®ãªã³ã¯ãè¿œå ãã
ãã®äŸã§ã¯ã
AcMgd.dllãš
AcDbMgd.dllã® 2ã€ã®AutoCAD .NET APIã©ã€ãã©ãªãå¿
èŠ
ã§ã ïŒãã€ãã®ããã«ã
CopyLocal
ãç¡å¹ã«ããããšãå¿ããªãã§ãã ããïŒã
2.3ã æ°ããã¬ã€ã€ãŒãè¿œå ãã
ããã¥ã¡ã³ãã«ååšãããã¹ãŠã®ã¬ã€ã€ãŒã¯ãã¬ã€ã€ãŒãªã¹ãã«ä¿åãããŸãã å³é¢ã«æ°ããã¬ã€ã€ãŒãè¿œå ããã«ã¯ããã®ãªã¹ãã«æ°ããèŠçŽ ãè¿œå ããã ãã§ãã
ãã ããæäœã¯åçŽã§ãããå€ãã®ã³ãŒããååŸãããŸãã
ã³ãŒãïŒ using System; using System.IO; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; namespace HabrPlug_Layers { public class Commands : IExtensionApplication { // AutoCAD "TestCommand" [CommandMethod("TestCommand")] public void MyCommand() { // Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // using (DocumentLock docloc = acDoc.LockDocument()) { // using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) { // LayerTable acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable; // LayerTableRecord acLyrTblRec = new LayerTableRecord(); acLyrTblRec.Name = "HabrLayer"; // acLyrTbl.Add(acLyrTblRec); // tr.AddNewlyCreatedDBObject(acLyrTblRec, true); // tr.Commit(); } } } // Initialize() Terminate() , IExtensionApplication public void Initialize() { } public void Terminate() { } } }
ãã©ã°ã€ã³ãããŒãããŠãTestCommandãã³ãã³ããå®è¡ãããšãæ°ããã¬ã€ã€ãŒãå³é¢ã«è¡šç€ºãããŸãã
äžèšã®ã³ãŒãã§ã¯ãæç»ãªããžã§ã¯ããæäœãããšãã«ããèŠããã2ã€ã®éèŠãªæ§é ã䜿çšããŸããã
aïŒããã¥ã¡ã³ãã®ãããã¯; using (DocumentLock docloc = acDoc.LockDocument())
Autocadã®ããã¥ã¡ã³ãã«ãããšããªããžã§ã¯ãã®å€æŽãAutoCADãžã®ã¢ã¯ã»ã¹ã®ãªã¯ãšã¹ãã¯ãããããã³ã³ããã¹ãã§ãããããã¢ããªã±ãŒã·ã§ã³ããå®è¡ã§ããŸãã ä»ã®èŠæ±ãšã®ç«¶åãé²ãããã«ãããã°ã©ãã¯ããã¥ã¡ã³ããå€æŽããåã«ããã¯ãããŠããããšã確èªããå¿
èŠããããŸãã å Žåã«ãã£ãŠã¯ãããã¥ã¡ã³ãããŒã¿ããŒã¹ãå€æŽãããšãã«ãšã©ãŒãçºçããŸãã
ããŒã¿ããŒã¹ã«å¿
èŠãªãã¹ãŠã®å€æŽãå®äºãããã
DocumentLock
ãªããžã§ã¯ãã®
Dispose()
ã¡ãœããã䜿çšããŠããã¯ã解é€ããå¿
èŠããããŸãã
DocumentLock
ãªããžã§ã¯ãã®å®£èš
using
ãããã¯ã䜿çšããããšãã§ããŸãããã®å Žåããããã¯ãçµäºãããšãããŒã¿ããŒã¹ã¯èªåçã«ããã¯è§£é€ãããŸãã ïŒ
ãœãŒã¹ ã
ãã©ãŒ ïŒ
泚æïŒç§ã®çµéšã§ã¯ãusingæ§æã䜿çšãããšã Dispose()
ã¡ãœããã®åŒã³åºããå¿ããå¯èœæ§ããªããªããããã¯ããã«äŸ¿å©ã§ãã
bïŒãã©ã³ã¶ã¯ã·ã§ã³åŒã³åºãã using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) ⊠tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable; ⊠tr.AddNewlyCreatedDBObject(acLyrTblRec, true); ⊠tr.Commit();
ããã¥ã¡ã³ã ïŒ
mirror ïŒã¯ãã»ã°ã¡ã³ããåãããªã©ã€ã³ãªã©ã®ãªããžã§ã¯ããæäœãããšãããŸãã¯èå¥åããŒãã«ãšãã®ã¬ã³ãŒããæäœãããšãã¯ãèªã¿åããŸãã¯æžã蟌ã¿ã®ããã«ãªããžã§ã¯ããéãå¿
èŠãããããšã瀺ããŠããŸãã
ãã®èŠä»¶ãç¡èŠããããšããŠããè¯ãçµæã¯åŸãããŸãã-éåžžã«äžå¿«ãªãšã©ãŒïŒãããã°ã®èŠ³ç¹ãå«ãïŒãçºçããå¯èœæ§ããããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã®æäœã«ã¯ããã€ãã®äž»èŠãªæ®µéããããŸãã
- æ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãã
- èªã¿åããŸãã¯æžã蟌ã¿ã®ããã«ãªããžã§ã¯ããéãã
- ãªããžã§ã¯ããåããŠäœæãããå ŽåïŒããã¥ã¡ã³ãã«ãŸã ãªãå ŽåïŒ-ããã¥ã¡ã³ãããŒã¿ããŒã¹ã«è¿œå ããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³åºå®;
- ãã©ã³ã¶ã¯ã·ã§ã³ã®å®äºã
ãããã®é
ç®ã¯ãã¹ãŠãäžèšã®ãªã³ã¯ã®ããã¥ã¡ã³ãã§è©³çŽ°ã«èª¬æãããŠããŸãã
DocumentLock
å Žåãšåæ§ã«ããã©ã³ã¶ã¯ã·ã§ã³ã®æäœãçµäºããåŸã«
Dispose()
ã¡ãœãããåŒã³åºãããusingã³ã³ã¹ãã©ã¯ãã䜿çšããå¿
èŠããããŸãã
ããã¥ã¡ã³ãã®ããã¯ãšãã©ã³ã¶ã¯ã·ã§ã³ãç解ããã®ã§ãæ®ãã®ã³ãŒãã®è§£æã«é²ãããšãã§ããŸãã
ãŸã ãå¿
èŠãªåå空éãæ¥ç¶ããŸãã
Autodesk.AutoCAD.Runtime
-
IExtensionApplication
ã¿ã€ããš
CommandMethod
ã³ã³ã¹ãã©ã¯ãã䜿çšããŸãã
Autodesk.AutoCAD.DatabaseServices
-
Document
ããã³
DocumentLock
ã¿ã€ãã䜿çšããŸãã
Autodesk.AutoCAD.Runtime
-
Database
ã
Transaction
ã
LayerTable
ã
OpenMode
ãããã³
LayerTableRecord
ã¿ã€ãã䜿çšããŸãã
次㫠ãããã¥ã¡ã³ããããã¯ããŠãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããŸãã
// Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // using (DocumentLock docloc = acDoc.LockDocument()) { // using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) {
第äžã«ãããã¥ã¡ã³ãã¬ã€ã€ãŒããŒãã«ãžã®ãªã³ã¯ãååŸããŸãã
LayerTable acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable;
GetObject()
ã¡ãœããã¯ãå
¥åãšããŠãéããªããžã§ã¯ãã®IDãšã¢ã¯ã»ã¹ã¬ãã«ã®2ã€ã®ãã©ã¡ãŒã¿ãŒãåãå
¥ããŸãã ãã®ããã¥ã¡ã³ãã®ããŒã¿ããŒã¹ã®
LayerTableId
ããããã£ã䜿çšããŠãããã¥ã¡ã³ãã¬ã€ã€ãŒããŒãã«ã®IDãèŠã€ããããšãã§ããŸãã ã¬ã€ã€ãŒããŒãã«ãå€æŽããïŒæ°ããã¬ã€ã€ãŒãè¿œå ããïŒå¿
èŠãããããããæžã蟌ã¿ãã¢ã¯ã»ã¹ã¬ãã«ïŒ
OpenMode.ForWrite
ïŒã䜿çšããŸãã æåŸã«ã
GetObject()
ã¡ãœããã¯ãã¿ã€ã "object"ïŒ
object
ïŒã®å€ãè¿ããŸãããã®å€ã¯ãå¿
èŠãªã¿ã€ãïŒ
LayerTable
ïŒã«æ瀺çã«ãã£ã¹ãããå¿
èŠããããŸãã
4çªç®ã« ãæ°ããã¬ã€ã€ãŒãäœæããŸãã
LayerTableRecord acLyrTblRec = new LayerTableRecord(); acLyrTblRec.Name = "HabrLayer";
ã¬ã€ã€ãŒïŒãŸãã¯ãã¬ã€ã€ãŒã®ããã¥ã¡ã³ãããŒãã«å
ã®å¯Ÿå¿ãããšã³ããªïŒã¯ã
LayerTableRecord
å
LayerTableRecord
ã ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯å€ãåãå
¥ããªããããäœæåŸã«ãã¹ãŠã®åæåãè¡ãå¿
èŠããããŸãã
ãã®äŸã§ã¯ãæ°ããã¬ã€ã€ãŒã®ååã®ã¿ãå€æŽããŸããããå¿
èŠã«å¿ããŠãå¯èŠæ§ïŒ
IsOff
ããããã£ïŒãŸãã¯ç·šéå¯èœïŒ
IsLocked
ããããã£ïŒãªã©ã®ä»ã®ãã©ã¡ãŒã¿ãŒãèšå®ã§ããŸãã
5çªç®ã«ãããã¥ã¡ã³ãã¬ã€ã€ãŒããŒãã«ã«æ°ããã¬ã€ã€ãŒãè¿œå ããŸãã
acLyrTbl.Add(acLyrTblRec);
ã¬ã€ã€ãŒããŒãã«ã¯ã
IEnumerable
ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ãããã¯ã©ã¹ã§ãã æ°ããèŠçŽ ãè¿œå ããã«ã¯ã
Add()
ã¡ãœããã䜿çšããŸãã
6çªç®ã«ãããã¥ã¡ã³ãããŒã¿ããŒã¹ã«æ°ããã¬ã€ã€ãŒãè¿œå ããŸãã
tr.AddNewlyCreatedDBObject(acLyrTblRec, true);
ãã®ã¬ã€ã€ãŒã¯ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããåã«ååšããªãã£ããããããã¥ã¡ã³ãããŒã¿ããŒã¹ã«è¿œå ããå¿
èŠãããããšãæ瀺çã«ç€ºãå¿
èŠããããŸãã ãããè¡ãããªãå Žåããšã³ããªã¯è¿œå ãããŸããã
éèŠãªè©³çŽ°ïŒ
AddNewlyCreatedDBObject
é¢æ°ã¯ãããã¥ã¡ã³ãã¬ã€ã€ãŒããŒãã«ã«ã¬ã€ã€ãŒãè¿œå ããåŸã§ã¯ãªããåã«åŒã³åºãå¿
èŠããããŸãã ãããã®æäœãå
¥ãæ¿ããããšããŠããã¬ã€ã€ãŒã¯è¿œå ãããŸããã ããã«ã€ããŠã¯ã調åã®åããè«ççãªèª¬æã¯ãããŸããã ç¥èã®ãã人ãã³ã¡ã³ãã®æããããå
±æããŠããããå¬ããã§ãã
7çªç®ã« ããã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããŸãã
tr.Commit();
GetObject()
ã¡ãœããã䜿çšããŠãã©ã³ã¶ã¯ã·ã§ã³äžã«éãããèŠçŽ ãå€æŽãããå Žåããããã®å€æŽãããã¥ã¡ã³ãããŒã¿ããŒã¹ã«ä¿åããã«ã¯ã
Commit()
ã¡ãœãããåŒã³åºããŠãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããå¿
èŠããããŸãã ããã§ãªãå Žåãå€æŽã¯ä¿åããããããã¥ã¡ã³ãã¯ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããæç¹ã§ååšããŠããç¶æ
ã®ãŸãŸã«ãªããŸãã
æåŸã« ããã©ã³ã¶ã¯ã·ã§ã³ãçµäºããããã¥ã¡ã³ãã®ããã¯ã解é€ããŸãã
} }
ããã«ããã®ã¯ãusingã䜿çšããããšã®éèŠãªãã©ã¹ã§ãïŒ ç¹ã«ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããŠããã¥ã¡ã³ããããã¯è§£é€ããããã«ãããã2åè¡ãå¿
èŠãããããã
Dispose()
ã¡ãœããã®åŒã³åºããå¿ããããšã¯éåžžã«ç°¡åã§ãã ãŸããusingã³ã³ã¹ãã©ã¯ãã䜿çšãããšã
Dispose()
ã¡ãœãããèªåçã«åŒã³åºãããŸãã
2.4ã çŸåšã®ã¬ã€ã€ãŒãèšå®
Clayer
ããŒã¿ããŒã¹ã®
Clayer
ããããã£ã䜿çšããŠãçŸåšã®ããã¥ã¡ã³ãã¬ã€ã€ãŒãååŸããæ°ããã¬ã€ã€ãŒãèšå®ã§ããŸãã
ã³ãŒãïŒ acCurDb .Clayer = acLyrTbl["HabrLayer"];
ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããçŽåã«ãåã®äŸã«ãã®è¡ãæ¿å
¥ããŠãã ããã
2.5ã ããããã£ãå€æŽããã¬ã€ã€ãŒã®ååãå€æŽãã
ã¬ã€ã€ãŒã®ããããã£ãå€æŽããã«ã¯ãã¬ã€ã€ãŒããŒãã«ã§å¯Ÿå¿ãããšã³ããªãéããŸãã
ã³ãŒãïŒ using System; using System.IO; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; namespace HabrPlug_Layers { public class Commands : IExtensionApplication { // AutoCAD "TestCommand" [CommandMethod("TestCommand")] public void MyCommand() { // Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // using (DocumentLock docloc = acDoc.LockDocument()) { // using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) { // LayerTable acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable; // LayerTableRecord acLyrTblRec = new LayerTableRecord(); acLyrTblRec.Name = "HabrLayer"; // acLyrTbl.Add(acLyrTblRec); // tr.AddNewlyCreatedDBObject(acLyrTblRec, true); // tr.Commit(); } } } // AutoCAD "NewCommand" [CommandMethod("NewCommand")] public void NewCommand() { // Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // using (DocumentLock docloc = acDoc.LockDocument()) { // using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) { // LayerTable acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable; // - if (acLyrTbl.Has("HabrLayer") == false) { return; } // LayerTableRecord acLyrTblRec = tr.GetObject(acLyrTbl["HabrLayer"], OpenMode.ForWrite) as LayerTableRecord; // acLyrTblRec.Name = "test"; acLyrTblRec.IsOff = true; acLyrTblRec.IsLocked = true; // tr.Commit(); } } } // Initialize() Terminate() , IExtensionApplication public void Initialize() { } public void Terminate() { } } }
ã¬ã€ã€ãŒã䜿çšããæäœã®åã«ãããã¥ã¡ã³ãã¬ã€ã€ãŒããŒãã«ã®
Has()
ã¡ãœããã䜿çšã
Has()
ãã¬ã€ã€ãŒ
Has()
ååšããããšã確èªããŠãããšåœ¹ç«ã¡ãŸãã
ãã©ã°ã€ã³ãããŠã³ããŒãããTestCommandã³ãã³ããå®è¡ããŠããNewCommandã³ãã³ããå®è¡ãããšãäœæããã¬ã€ã€ãŒãé衚瀺ã«ãªãããããã¯ãããååãå€æŽãããŠããããšãããããŸãã
ä»ã§ã¯èª°ã圌ãèŠã€ããããšãã§ããŸããã2.6ã ã¬ã€ã€ãŒé€å»
ã¬ã€ã€ãŒã®åé€ã¯ãå€æŽã®ãããªãã®ã§ãã ã¬ã€ã€ãŒããŒãã«ã®å¯Ÿå¿ãããšã³ããªã«å¯ŸããŠã
Erase()
ã¡ãœããã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
acLyrTblRec.Erase(true);
ãã ããæåã®ã»ã¯ã·ã§ã³ã§èª¬æããå¶éã«çæããããšãéèŠã§ãã åé€ã§ããŸããïŒ
- ãŒãå±€;
- çŸåšã®ã¬ã€ã€ãŒã
- å°ãªããšã1ã€ã®ãªããžã§ã¯ããå«ãã¬ã€ã€ãŒã
- ãããã¯å®çŸ©ã§åç
§ãããã¬ã€ã€ãŒã
çŸåšææ°ã®ã¬ã€ã€ãŒãåé€ããå Žåãåé€ããåã«ãä»ã®ã¬ã€ã€ãŒãçŸåšã®ãŒãã«ããå¿
èŠããããŸãã
ãªããžã§ã¯ããååšããã¬ã€ã€ãŒãåé€ããå¿
èŠãããå Žåã¯ãã¬ã€ã€ãŒãåé€ããåã«ããããã®ãªããžã§ã¯ãããã¹ãŠåé€ããããå¥ã®ã¬ã€ã€ãŒã«è»¢éããå¿
èŠããããŸãã
ã¬ã€ã€ãŒã®åé€ã®è©³çŽ°ã«ã€ããŠã¯ãããã¥ã¡ã³ããåç
§ããŠãã ããïŒã
AutoCADãšã³ãã£ãã£ã®äœæãšç·šé>ã¬ã€ã€ãŒãè²ãç·çš®ã®äœ¿çš>ã¬ã€ã€ãŒã®æäœ>ã¬ã€ã€ãŒã®æ¶å» ãã»ã¯ã·ã§ã³ïŒã
Kean Walmsleyããã°ã«ã¯ãã¬ã€ã€ãŒã«é
眮ããããã¹ãŠã®ãªããžã§ã¯ããæ€çŽ¢
ããããã®
ãã³ãã¬ãŒãããããŸãã ãã®äŸã«åºã¥ããŠãã¬ã€ã€ãŒãããã¹ãŠã®ãªããžã§ã¯ããåé€ããé¢æ°ãäœæã§ããŸãã
ãããã«ãããã¬ã€ã€ãŒãåé€ããåã«ãæäœã®æ£ç¢ºæ§ãæ€èšŒãã
try ... catch
æ§é ã§åé€èªäœããã¬ãŒã åããããšã¯
try ... catch
ã
ã³ãŒãïŒ using System; using System.IO; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; namespace HabrPlug_Layers { public class Commands : IExtensionApplication { // AutoCAD "TestCommand" [CommandMethod("TestCommand")] public void MyCommand() { // Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // using (DocumentLock docloc = acDoc.LockDocument()) { // using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) { // LayerTable acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable; // LayerTableRecord acLyrTblRec = new LayerTableRecord(); acLyrTblRec.Name = "HabrLayer"; // acLyrTbl.Add(acLyrTblRec); // tr.AddNewlyCreatedDBObject(acLyrTblRec, true); // tr.Commit(); } } } // AutoCAD "TestCommand" [CommandMethod("NewCommand")] public void NewCommand() { // Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // using (DocumentLock docloc = acDoc.LockDocument()) { // using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) { // LayerTable acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable; // - if (acLyrTbl.Has("HabrLayer") == false) { return; } // acCurDb.Clayer = acLyrTbl["0"]; // , ObjectIdCollection acObjIdColl = new ObjectIdCollection(); acObjIdColl.Add(acLyrTbl["HabrLayer"]); acCurDb.Purge(acObjIdColl); if (acObjIdColl.Count > 0) { // LayerTableRecord acLyrTblRec = tr.GetObject(acObjIdColl[0], OpenMode.ForWrite) as LayerTableRecord; try { // acLyrTblRec.Erase(true); // tr.Commit(); } catch (Autodesk.AutoCAD.Runtime.Exception Ex) { // - , Application.ShowAlertDialog(":\n" + Ex.Message); } } } } } // Initialize() Terminate() , IExtensionApplication public void Initialize() { } public void Terminate() { } } }
ãã®ã³ãŒãã§ã¯ã
Purge()
ã¡ãœãã以å€ã®ãã¹ãŠã«ãã§ã«ç²ŸéããŠããŸãã æäœã®åçã¯
ããã¥ã¡ã³ãã«èšèŒãããŠã
ãŸã ããªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ãåæããåºåã§èª°ãåç
§ããŠããªããªããžã§ã¯ãã®ã¿ãæ®ããŸãã
æ€èšããäŸã§ã¯ã
Purge()
ã¡ãœããã¯ã1ã€ã®ãªããžã§ã¯ãïŒåé€ãããã¬ã€ã€ãŒïŒã®ã¿ãååšããã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠåŒã³åºãããŸãã 誰ããã®ã¬ã€ã€ãŒãåç
§ããŠããªãå Žåã
Purge()
ã¡ãœãããåŒã³åºããåŸãã³ã¬ã¯ã·ã§ã³ã«æ®ããåé€ãç¶è¡ã§ããŸãã
Purge()
ã¡ãœããã®åŒã³åºãã空ã®ã³ã¬ã¯ã·ã§ã³ãè¿ãå Žåãåé€ãããã¬ã€ã€ãŒãžã®ãªã³ã¯ããããŸã-ãããã¯ãããããã®äžã«çœ®ããããªããžã§ã¯ãã§ãã
ãã©ã°ã€ã³ãããŠã³ããŒãããŠTestCommandã³ãã³ããå®è¡ãã次ã«NewCommandã³ãã³ããå®è¡ãããšãäœæããã¬ã€ã€ãŒãå³é¢ããåé€ãããŠããããšãããããŸãã
2.7ã ããã¯ãããã¬ã€ã€ãŒã®èª¿å
ãé²ã
çµè«ãšããŠãã¬ã€ã€ãŒã«é¢é£ããå¥ã®ãã©ã¡ãŒã¿ãŒã«ã€ããŠã話ããããšæããŸãã
ããã©ã«ãã§ã¯ãAutoCADã®ããã¯ãããã¬ã€ã€ãŒã¯æã衚瀺ãããŸãã å¯èœãªæ倧ã®èª¿å
ã¯90ïŒ
ã§ãïŒäžå³ã®é·æ¹åœ¢ã®ããã«ïŒã
調å
ã®åºŠåããå€æŽããã«ã¯ã
LAYLOCKFADECTLå€æ°ã䜿çšããŸãã ãã®å€ã¯ãã¬ã€ã€ãŒã³ã³ãããŒã«ããã«ã®å¯Ÿå¿ããã¹ã©ã€ããŒã§èšå®ãããŸãïŒå³ã®ç·è²ã®äžžã§å²ãŸããŠããŸãïŒã
ãã©ã°ã€ã³å
ã®
LAYLOCKFADECTLå€æ°ã®å€ãå€æŽããã«ã¯ã
SetSystemVariable
é¢æ°ã䜿çšã§ããŸãã
Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("LAYLOCKFADECTL", 0);
ãã®ã³ãŒãã®çµæãããã¯ãããã¬ã€ã€ãŒã®èª¿å
ã¯ç¡å¹ã«ãªããŸãã
LAYLOCKFADECTLå€æ°ãå€æŽããåã«ããã©ã°ã€ã³ã®åŠçãå®äºããåŸã«å€æ°ãå
ã®ç¶æ
ã«æ»ãããã«ãçŸåšã®å€ãä¿å
ããå¿
èŠããããŸãã
ã³ãŒãïŒ using System; using System.IO; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; namespace HabrPlug_Layers { public class Commands : IExtensionApplication { // int old_LAYLOCKFADECTL = 0; // public void Initialize() { // old_LAYLOCKFADECTL = System.Convert.ToInt32(Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("LAYLOCKFADECTL")); // 0 Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("LAYLOCKFADECTL", 0); } // AutoCAD public void Terminate() { // , Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("LAYLOCKFADECTL", old_LAYLOCKFADECTL); } } }
æ®å¿µãªããã
Terminate()
ã¡ãœããã¯åžžã«æ£ããæ©èœãããšã¯éãããå
ã®å€ã埩å
ãããªãå ŽåããããŸãã ããããå°ãªããšãç§ãã¡ã¯è©ŠããŸãããïŒ
ä»ã®ãšãããã¹ãŠã§ãã 次åã¯ãåçŽãªãªããžã§ã¯ããšãããã¯ã®äœæã«ã€ããŠæžããŸãã