AutoCADã®ãã©ã°ã€ã³ã®éçºã«ç¹åãã
ã·ãªãŒãºã®ç¬¬4éšãžããããã 以åã®èšäºã§ã¯ããã©ã°ã€ã³äœæã®äžè¬çãªåé¡ã«ã€ããŠè§ŠããŸãããããã®ç¥èã身ã«ä»ããŠãæçµçã«AutoCADãŠãŒã¶ãŒãçŽé¢ããŠããã¡ã€ã³ã¿ã¹ã¯ã§ããå³é¢ã®ç·šéã«é²ãããšãã§ããŸãã
ãã®èšäºã§ã¯ãéçºè
ãå¿
èŠãšããå¯èœæ§ã®ããæãåçŽãªæäœãåæããŸããã°ã©ãã£ãã¯ããªããã£ããå³é¢ã«äœæããŠé
眮ããïŒç·ãããªã©ã€ã³ãåãæ¥åãåïŒã
public static string disclaimer = "          AutoCAD.   â      ."; 
ä»äºã®åã«
å°æ¬ãããŠããèªè
ãèªåã®ã³ã³ãã¥ãŒã¿ãŒã§äžèšã®äŸãç¹°ãè¿ãããå Žåã¯ã人çã簡玠åããããã«ããã©ã°ã€ã³ã®èªåããŒããæ€èšããå¿
èŠããããŸãã ããšãã°ã 
ãã¢ã¬ã ã®
æçš¿ãèªãããšãã§ããŸã-ããã«ã€ããŠã®èšåããããŸãã
åé¡ã®æ¬è³ªãç°¡åã«èª¬æããŸãããã©ã°ã€ã³ãèªã¿èŸŒãã åŸã«ãã¢ã³ããŒããããããšã¯äžå¯èœã§ãããããã³ãŒãã倿Žããããã©ã°ã€ã³ãèµ·åããå¯äžã®æ¹æ³ã¯ãAutoCADãéããŠåèµ·åãããã©ã°ã€ã³ãåèªã¿èŸŒã¿ããããšã§ãã ãã®äºçްãªäœæ¥ã«ã¯æ°åããããŸããã50ã100åç¹°ãè¿ããåŸãéåžžã«ã€ã©ã€ã©ãå§ããŸãã
ãã©ã°ã€ã³ã®èµ·åã«ããããã®æé ã®ããããã®æ®µéãé€å€ã§ããŸããããã«ããã 
æ°åã®ç¥çµçްèãç¯çŽã§ããŸãã
è¡
å³é¢ã«ç·ã远å ããã®ã¯é£ãããããŸããã 
ããã¥ã¡ã³ã ïŒ 
translation ïŒã«
èšèŒãããŠããäŸãåºç€ãšããŠäœ¿çšããŠããããå®è¡ããŸãããã
ãã©ã°ã€ã³ã³ãŒãïŒ using System; using System.IO; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.ApplicationServices; using acad = Autodesk.AutoCAD.ApplicationServices.Application; namespace HabrPlug_Primitives { public class ClassMyAutoCADDLL { public class Commands : IExtensionApplication { //        AutoCAD  "HabrCommand" [CommandMethod("HabrCommand")] public void HabrCommand() { //       Document acDoc = acad.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //   using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { //     BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; //    (Model Space) -          BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //        Line acLine = new Line(new Point3d(25, 25, 0), new Point3d(33, 33, 0)); //         acLine.SetDatabaseDefaults(); //       acBlkTblRec.AppendEntity(acLine); //       acTrans.AddNewlyCreatedDBObject(acLine, true); //   acTrans.Commit(); } } //  Initialize()  Terminate() ,    IExtensionApplication public void Initialize() { } public void Terminate() { } } } } 
 ãããžã§ã¯ããäœæãããšãããã¡ãããããããçš®é¡ã®ããããªããšãå¿ããªãã§ãã ãã...ïŒæåã«ãå¿
èŠãª.NET Frameworkã®ããŒãžã§ã³ãæå®ããå¿
èŠããããŸãïŒç§ã®å Žåã.NET Framework 3.5ã§ãïŒã
次ã«ã AcDbMgd.dllããã³AcMgd.dllã©ã€ãã©ãªã«ãªã³ã¯ã远å ãããããã®ãªã³ã¯ã®ããããã£ã§ã¿ãŒã²ãããããžã§ã¯ããã©ã«ããŒã«ã©ã€ãã©ãªãã³ããŒããããšãçŠæ¢ããå¿
èŠããããŸãïŒ CopyLocalãã©ã¡ãŒã¿ãŒãFalseèšå®ããŸãïŒã
 ã³ãŒãèªäœã¯éåžžã«ã·ã³ãã«ã§ãããã§ã¯è©³çްã«ç¹å¥ãªããšã¯ãããŸããã
æåã« ããã©ã³ã¶ã¯ã·ã§ã³ãéå§ããŸãïŒãããäœã§ããããªãå¿
èŠãªã®ãã«ã€ããŠã¯ãåã®èšäºã§èª¬æããŸããïŒã
第äºã« ã 
Model SpaceãéããŸã-ããã¯å®éãå³é¢ã§ãã ã¢ãã«ã¹ããŒã¹ã®ããæç¢ºãªå®çŸ©ã¯
ãã¡ãã¡ã§èŠã€ããããšãã§ããŸãã å³é¢ã«æ°ãããªããžã§ã¯ãã远å ããããããèªã¿åãããã³æžã蟌ã¿ãã¢ã¯ã»ã¹ïŒ 
OpenMode.ForWrite ïŒãèŠæ±ããå¿
èŠããããŸãã
第äžã«ãã³ã³ã¹ãã©ã¯ã¿ãŒã§å¿
èŠãªãã©ã¡ãŒã¿ãŒïŒãã®å Žåã¯éå§ç¹ãšçµäºç¹ïŒãæå®ããŠãã°ã©ãã£ãã¯ãªããžã§ã¯ãïŒãã®å Žåã¯è¡ïŒãäœæããŸãã
4çªç®ã« ããªããžã§ã¯ãã®ãã¹ãŠã®ããããã£ãèšå®ããå¿
èŠããããŸãã ãã®äŸã§ã¯ã 
SetDatabaseDefaults()颿°ãåŒã³åºããŠããã¹ãŠã®ããããã£ãããã©ã«ãå€ã«èšå®ããŸãã ãã®é¢æ°ã®å¹³åçãªç·æ§ã®èª¬æã¯ã 
ObjectARX Referenceã«ãããŸãã
泚æïŒå®éã«ã¯ãåçŽãªå Žåããã®é¢æ°ã®åŒã³åºãã¯ç¡èŠã§ããŸãããããããªãæ¹ãè¯ã
ãšããæèŠããããŸãã
 5çªç®ã« ãäœæãããªããžã§ã¯ããã¢ãã«ç©ºéïŒã€ãŸããå³é¢ïŒã«è¿œå ããå¿
èŠããããŸãã ããã¯ã 
AppendEntity()颿°ã䜿çšããŠè¡ãããŸãã
6çªç®ã« ãäœæãããªããžã§ã¯ãããäœæ¥ãããã©ã³ã¶ã¯ã·ã§ã³ã«è¿œå ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã 
AddNewlyCreatedDBObject()颿°ã䜿çšããŸããããã¯ãåã®èšäºã§æ¢ã«èª¬æããŸããã
æåŸã« ãå¿
èŠãªãã¹ãŠã®æäœãå®è¡ããåŸã 
Commit()ã¡ãœãããåŒã³åºããŠãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããå¿
èŠããããŸãã
ãããžã§ã¯ããã³ã³ãã€ã«ããåŸãAutoCADãå®è¡ãããã©ã°ã€ã³ãããŒãããŠ
HabrCommandã³ãã³ããå®è¡ããŸãã çµæã¯ç°¡åã§ã-ããããç§ã¯ãçè§£å¯èœã§äºæž¬å¯èœã§ããããšãæã¿ãŸãã

ã³ãã³ããéå§ããåŸãç»é¢ã«è¡ã衚瀺ãããªãã£ãå Žåã¯ãæ¥ãã§åæºããªãã§ãã ããã 代ããã«ã座æšã®äžå¿ïŒãã€ã³ãïŒ0; 0ïŒïŒãå¯èŠã®äœæ¥é åå
ã«ããããšã確èªããŠãã ããã ããã«ãããŠã¹ãã€ãŒã«ãåããŠã¹ã±ãŒã«ã倿Žããã®ãçã«ããªã£ãŠããŸãã
åå¿è
ãŠãŒã¶ãŒã«ãšã£ãŠãAutoCADã¯ãå³é¢ã®ã¹ã±ãŒãªã³ã°ãç¹å®ã®å¶éå
ã§çºçããããšã«é©ããæãããããããŸããã ç°¡åã«èšãã°ã1000ïŒ
ã®ã¹ã±ãŒã«ãã1ïŒ
ã®ã¹ã±ãŒã«ã«åãæ¿ããããšã¯äžå¯èœã§ããããŠã¹ãã€ãŒã«ãæ°åã¹ã¯ããŒã«ãããšãã¹ã±ãŒã«ã¯ç®ã«èŠããªããªããã¿ãŒã«ãæ®ãããŸãã å³é¢ã®ã¹ã±ãŒãªã³ã°ãç¶è¡ããã«ã¯ãAutoCADã³ãã³ãã©ã€ã³ã§
REGENã³ãã³ããå®è¡ããå¿
èŠããããŸãã
泚æïŒå人çãªçµéšããïŒ 
ããã°ã©ããŒãå®å
šã«ééã£ãŠãããäœæããããªããžã§ã¯ããšäœæããããªããžã§ã¯ããæç¢º
ã§ãªãå Žåãã¯ãªãŒã³ãªå³é¢ãéããç®çã®ã³ãŒããå®è¡ããããŒã®çµã¿åãããCtrl + AããæŒããŠå³é¢å
ã®ãã¹ãŠã®ãªããžã§ã¯ããéžæã§ããŸã ãã®åŸãååãšããŠãäœæããããªããžã§ã¯ããèŠã€ããããšã¯é£ãããããŸããã
äŸã§å·ãããŸãããã
å¡è£
åïŒ
ããŠãããã®è¡ã¯ã©ãã§ããïŒïŒ
 å¡è£
åŸïŒ
ã¢ãã¿ãŒäžã®ã»ããã®ãããªãµããããé ã®ããç·ã¯ãéãåè§ãšè¡šç€ºããããªããžã§ã¯ãããããã£ãŠã£ã³ããŠã§ç€ºãããŸãã
  ããªã©ã€ã³
ç¹°ãè¿ããŸãããäŸã¯
ããã¥ã¡ã³ãã«ãã
ãŸã ïŒ 
translation ïŒã
ããŒã ã³ãŒãïŒ [CommandMethod("HabrCommand")] public void HabrCommand() { //       Document acDoc = acad.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //   using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { //     BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; //    (Model Space) -          BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //   Polyline acPolyline = new Polyline(); //         acPolyline.SetDatabaseDefaults(); //     acPolyline.AddVertexAt(0, new Point2d(2, 4), 0, 0, 0); acPolyline.AddVertexAt(1, new Point2d(4, 8), 0, 0, 0); acPolyline.AddVertexAt(2, new Point2d(6, 6), 0, 0, 0); acPolyline.AddVertexAt(3, new Point2d(8, 11), 0, 0, 0); //       acBlkTblRec.AppendEntity(acPolyline); //       acTrans.AddNewlyCreatedDBObject(acPolyline, true); //   acTrans.Commit(); } } 
 çµæïŒ

ããã§ç¹ã«èª¬æããããšã¯ãããŸããã å¿
èŠã«å¿ããŠãæ°ãããã€ã³ãã远å ããããšã§ãããªã©ã€ã³ã
ãããªãŒãã¹ã§ã¯ãªãè€éãªå¹ŸäœåŠå³åœ¢ã«å€ããããšãã§ããŸã-ããšãã°ãã¢ã¹ã¿ãªã¹ã¯...
...ãŸãã¯ããã¯ãããªãŒãã¹ã§ããïŒ [CommandMethod("HabrCommand")] public void HabrCommand() {  

ã¯ãããããªãŒã«ã¯è»èŒªããããŸããã ããããç§ãã¡ã¯ãŸã åãæãæ¹æ³ãç¥ããŸããããåè§ãè»èŒª...ãããããã®ããã«ä¹ãããšããå§ãããŸãã
 ååš
ããã¥ã¡ã³ãããç±å¿ã«è»¢èŒãããå³é¢ã«åã远å ããäŸãèããŠã¿ãŸãããïŒãªã³ã¯ã¯äžã«ãããŸããïŒã
ããŒã ã³ãŒãïŒ [CommandMethod("HabrCommand")] public void HabrCommand() { //       Document acDoc = acad.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //   using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { //     BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; //    (Model Space) -          BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //   Circle acCircle = new Circle(); //     acCircle.SetDatabaseDefaults(); acCircle.Center = new Point3d(2.5, 3.14, 0); acCircle.Radius = 4.25; //       acBlkTblRec.AppendEntity(acCircle); //       acTrans.AddNewlyCreatedDBObject(acCircle, true); //   acTrans.Commit(); } } 
 å³é¢ã«åã远å ããŠãåé¡ã¯ãããŸãããäžå¿ãšååŸãèšå®ããã ãã§ãã
çµæïŒ

泚æïŒéæ¥åç·ã䜿çšããå Žåãç»é¢ã«æ£ãã衚瀺ãããªãå Žåãããããšã«æ³šæããŠãã ããã
ç¹ã«ããã®äŸã§
HabrCommandã³ãã³ããé è·é¢ã§å®è¡ããŠããã倧å¹
ã«ãºãŒã ã€ã³ïŒæç»èŠçŽ ããºãŒã ã€ã³ïŒãããšãäžã®å³ã«ç€ºã广ã芳å¯ãããŸãã ããAutoCADã§äœæ¥ãã人ã¯ããããæ
£ããŠããã§ãããããç§ã®ãµãŒã¯ã«ãäœã«å€ãã£ãããæåã«èŠããšããç§ã¯éåžžã«é·ãéã³ãŒãã®ééããæ¢ãããã¬ã³ããªã³ã°ç²ŸåºŠãäžãããããã«æ°æéãæ®ºããŸãããïŒ

åã®å
ã®åœ¢ç¶ã埩å
ããã«ã¯ãAutoCADã³ãã³ãã©ã€ã³ã§
REGENã³ãã³ããå®è¡ããŸãã

ç¹°ãè¿ããŸããããã®ãããªå¹æã¯
衚瀺ããããšãã«ã®ã¿çºçããããšã匷調ã
ãŸã ã ææžå
ã§ã¯ãã ããå€ã«ããããã«èŠããŠããåã¯åžžã«åã®ãŸãŸã§ãã
 æ¥å
æ¥åãäœæããããšã¯ãåãäœæããããšãšã¯å€å°ç°ãªããŸãããã®ãã©ã¡ãŒã¿ãŒã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã§æç€ºçã«æå®ããå¿
èŠããããŸãïŒè©³çްã¯ã 
ããã§èª¬æããŸã ïŒã
ããŒã ã³ãŒãïŒ [CommandMethod("HabrCommand")] public void HabrCommand() { //       Document acDoc = acad.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //   using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { //     BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; //    (Model Space) -          BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //    Point3d center = Point3d.Origin; Vector3d normal = Vector3d.ZAxis; Vector3d majorAxis = 100 * Vector3d.XAxis; double radiusRatio = 0.5; double startAng = 0.0; double endAng = Math.PI * 2; //  ,     Ellipse acEllipse = new Ellipse(center, normal, majorAxis, radiusRatio, startAng, endAng); //       acBlkTblRec.AppendEntity(acEllipse); //       acTrans.AddNewlyCreatedDBObject(acEllipse, true); //   acTrans.Commit(); } } 
 çµæïŒæç¢ºåã®ããã«éãç·ã远å ãããŸããïŒïŒ

æ¥åãäœæãããšããæ¬¡ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã
- æ¥åã®äžå¿-ããã§ãã¹ãŠãæç¢ºã«ãªããŸãã
 - æ³ç·ã¯ãæ¥åã®å¹³é¢ã«åçŽãªãã¯ãã«ã§ãã ãªããžã§ã¯ããXYå¹³é¢ã«è¿œå ãããšãæ³ç·ã¯Z軞ã«ãªããŸãã
 - 䞻軞ïŒmajorAxisïŒ-AutoCADã®çšèªã§ã¯ãããã¯é·ããæ¥åã®ãå¹
ãã®ååã«çãããã¯ãã«ã§ãïŒå³ã®éãç·ã®ããã«ïŒã éåžžã®æ°åŠã§ã¯ãããã¯ãåé·è»žããšåŒã°ããŸãã ãã®äŸã§ã¯ã暪軞ãšäžèŽããæ¹åã«é·ã100ã®ãã¯ãã«ãèšå®ããŸãã
 - RadiusïŒradiusRatioïŒ-æ¥åã®é·ããæ±ºå®ããŸãã ãã®äŸã§ã¯ãYè»žã«æ²¿ã£ãæ¥åã®æå€§åº§æšã¯100 * 0.5 = 50ã§ãã
 - éå§è§åºŠãšçµäºè§åºŠ-æ²ç·ãæãããã®éå§è§åºŠãšçµäºè§åºŠãå®çŸ©ããŸãã ãã®åçã¯ãããããåãããäžã®åçã§ãã説æãããŠããŸã ã

 
å³å
šäœãæãã«ã¯ã360床ãŸãã¯2piïŒæ¥µåº§æšç³»ã®å ŽåïŒã®å®å
šãªåããå®è¡ãããå¿
èŠããããŸãã å°ãªãæå®ãããšãå³ã®äžéšã®ã¿ã衚瀺ãããŸãã
æ¥åã®å¥ã®äŸãæ¥åã®æ°ãããã©ã¡ãŒã¿ãŒãèšå®ããŠã¿ãŸãããã
 Point3d center = Point3d.Origin; Vector3d normal = Vector3d.ZAxis; Vector3d majorAxis = 100 * Vector3d.XAxis + 100 * Vector3d.YAxis; double radiusRatio = 0.5; double startAng = Math.PI * 0.1; double endAng = Math.PI * 1.3; Ellipse acEllipse = new Ellipse(center, normal, majorAxis, radiusRatio, startAng, endAng); 
次ã®ããã«ãªããŸãïŒåããç°¡åã«ããããã«ç·ãåŒãããŠããŸãïŒã

startAngãŒããã倧ãããããæ¥åã®äžéšã¯è»žããã¯éå§ãããŸããããå°ãå
ã«ãªããŸãã 
endAngã¯
endAngããŸãå°éããªããããæ¥åã®äžéšã¯
endAngãããã¯ããã«æ©ãçµäºããŸãã
åŸæã¯ã軞ãã¯ãã«ïŒ 
majorAxis = 100 * Vector3d.XAxis + 100 * Vector3d.YAxis ïŒãèšå®ããããšã«ããä¿èšŒãããŸãã ãã®ãã¯ãã«ã®Xæåã®å€§ããã¯Yæåãšçããããã45床ã®åŸé
ãåŸãããŸãã
å軞ã®é·ãã¯ãã¿ãŽã©ã¹ã®å®çã«ãã£ãŠèšç®ã§ããŸãïŒããã¯ã座æšXãšYã®å¹³æ¹åã®å¹³æ¹æ ¹ã§ãã1002 + 100 
2 ïŒåèš20,000ïŒã®å¹³æ¹æ ¹ãèšç®ãããšãçŽ141ã«ãªããŸããæ¥åã®é·ãã¯ããããçŽ282ã«ãªããŸãã
 ãµãŒã¯ã«
åãäœæããã«ã¯ããããã³ã°- 
Hatch ïŒ 
documentation ã 
translation ïŒã䜿çšã§ããŸãã
æé ã¯æ¬¡ã®ãšããã§ãã
- ãããå¢çç·ãäœæããŸãã éããæ²ç·ã¯å¢çãšããŠæ©èœã§ããŸãããã®å Žåãåã«ãªããŸãã
 - ãããã³ã°å¢çç·ã«å¿
èŠãªããããã£ãèšå®ããŸãã
 - å³é¢ã«ãããã³ã°å¢çç·ã远å ããŸãã
 - ãããã®å¢çãšãªããªããžã§ã¯ãã®é
åãäœæããããã«å¢çã远å ããŸãã
 - ããããäœæããŸãã
 - å³é¢ã«ãããã远å ããŸãã
 - ãããã³ã°ã«å¿
èŠãªããããã£ãèšå®ããŸãã
 
æé ã远å ãããŸãããããã¹ãŠç°¡åã§ãã
ããŒã ã³ãŒãïŒ [CommandMethod("HabrCommand")] public void HabrCommand() { //       Document acDoc = acad.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //   using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { //     BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; //    (Model Space) -          BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // 1)   -   Circle acCircle = new Circle(); // 2)     acCircle.SetDatabaseDefaults(); acCircle.Center = new Point3d(2.5, 3.14, 0); acCircle.Radius = 4.25; // 3)           acBlkTblRec.AppendEntity(acCircle); acTrans.AddNewlyCreatedDBObject(acCircle, true); // 4)       -  ObjectIdCollection acObjIdColl = new ObjectIdCollection(); acObjIdColl.Add(acCircle.ObjectId); // 5)   Hatch acHatch = new Hatch(); // 6)          acBlkTblRec.AppendEntity(acHatch); acTrans.AddNewlyCreatedDBObject(acHatch, true); // 7)    acHatch.SetDatabaseDefaults(); acHatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID"); acHatch.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(0, 200, 0); acHatch.Associative = true; acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl); acHatch.EvaluateHatch(true); //   acTrans.Commit(); } } 
 çµæïŒ

ãããã®å¢çç·ãäœæããéšåã¯åé¡ãåŒãèµ·ãããªãã¯ãã§ã-ããã¯ãç§ãã¡ãäœæããŠå³é¢ã«é
眮ããåãªãåã§ãã ãããã³ã°ãäœæãããå³é¢ã«è¿œå ãããéšåã説æã®å¿
èŠã¯ãããŸããã ãããã³ã°ãã©ã¡ãŒã¿ãŒãèšå®ããéšåãæ®ã£ãŠããŸãã ããã«è©³ããèŠãŠãããŸãããã
æåã«ã 
setDatabaseDefaults()颿°ãåŒã³åºããŸãããã®é¢æ°ã¯ããããã³ã°ãªãã·ã§ã³ãããã©ã«ããªãã·ã§ã³ã«èšå®ããŸãã ãã®æ©èœã®ç®çã«ã€ããŠã¯ãæåã®ã»ã¯ã·ã§ã³ã§èª¬æããŸããã
次ã«ã 
SetHatchPattern()颿°ã䜿çšããŠãããã³ã°ã®ã¿ã€ããæå®ããŸãã ãã®å ŽåãèŠåçãªåãæãããã®ã§ã 
SOLIDã¿ã€ã-ãsolidããéžæããŸãã
泚æïŒãœãªããã«å ããŠãå¥ã®ã¿ã€ãã®ãããã³ã°ãæå®ã§ããŸãã AutoCADã«ã¯ãããã«äœ¿çšã§ãã倿°ã®ããããçšæãããŠããŸããããããèŠã€ããã«ã¯ãHatchãªããžã§ã¯ãã®ããããã£ãåŒã³åºãã ãã§ãã

SOLID代ããã«
SOLIDä»ã®äœããæå®ã§ããŸãã ããšãã°ã 
HOUNDãæå®ãããšã次ã®çµæãåŸãããŸãã

æšæºã®
HatchPatternType.PreDefined ïŒ 
HatchPatternType.PreDefined ïŒã«å ããŠã以åã«AutoCADã«æ¥ç¶ãããŠãããµãŒãããŒãã£ã®
HatchPatternType.PreDefinedã䜿çšã§ããŸãã ããã«äŸãžã®
ãªã³ã¯ããããŸãã
 ãããã³ã°ã®ã¿ã€ããèšå®ããåŸã 
FromRgb(byte ref, byte blue, byte green)颿°
FromRgb(byte ref, byte blue, byte green)ã䜿çšããŠè²ïŒ 
Colorããããã£ïŒãæå®ããŸããã
次ã«ã 
Associativeããããã£ãç¶ããŸã-å¢çç·ã®ãµã€ãºã倿Žãããšãã«ãããã³ã°ã®ãµã€ãºã倿Žãããã©ãããæ±ºå®ããŸãã
ã€ã©ã¹ããããã®å¢çç·ã倿ŽãããšãäŸïŒ 
Associative = true ïŒã§äœãèµ·ãããã瀺ããŸãã

åã®æ°ããååŸã¯5ã§ããããã³ã°ã¯æ°ããååŸã®äžã«åŒã䌞ã°ãããŸãã
ãããŠãããã¯
Associative = falseäŸã§ãïŒ

 ããã¥ã¡ã³ã ïŒ 
翻蚳 ïŒã®ãDefine the Hatch BoundariesïŒ.NETïŒãã»ã¯ã·ã§ã³ã§ã¯ããããã¯ããŒãã«ïŒã€ãŸãã¢ãã«ç©ºéïŒã«ã·ã§ãŒãã£ã³ã°ã远å ããåŸã 
AppendLoopã¡ãœãããåŒã³åºãåã«ã 
Associativeããããã£ãèšå®ããå¿
èŠããããšè¿°ã¹ãŠããŸãã
AppendLoopã¡ãœããã䜿çš
AppendLoopãšããããã®å€åŽã®å¢çç·ãæå®ã§ããå
¥åãšããŠ2ã€ã®ãã©ã¡ãŒã¿ãŒïŒå¢çç·ã®çš®é¡ãšãããå¢çç·ãªããžã§ã¯ãã®é
åïŒãåãå
¥ããŸãã
æåã®ãã©ã¡ãŒã¿ãŒãšããŠç€ºããããHatchLoopTypes.Outermostããããã³ã°ã®å€åŽã®å¢çç·ãèšå®ããããšã瀺ããŠããŸãã2çªç®ãšããŠã以åã«äœæããããããã³ã°å¢çç·ãªããžã§ã¯ãã®é
åã瀺ããŸãããæ³šæïŒå¿
èŠã«å¿ããŠãå€éšã«å ããŠããã€ãã®å
éšå¢çç·ãæå®ãããããã亀差ãããšãã®ãããã³ã°ã®åäœã決å®ã§ããŸãã詳现ã¯ãã¡ãããã®ãããªå³ã®ç°¡åãªäŸã«éå®ããŸãã
ããŒã ã³ãŒãïŒ [CommandMethod("HabrCommand")] public void HabrCommand() { //       Document acDoc = acad.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //   using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { //     BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; //    (Model Space) -          BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //    Polyline acPolyline = new Polyline(); acPolyline.SetDatabaseDefaults(); acPolyline.AddVertexAt(0, new Point2d(50, 50), 0, 0, 0); acPolyline.AddVertexAt(1, new Point2d(150, 285), 0, 0, 0); acPolyline.AddVertexAt(2, new Point2d(250, 50), 0, 0, 0); acPolyline.AddVertexAt(3, new Point2d(25, 200), 0, 0, 0); acPolyline.AddVertexAt(4, new Point2d(275, 200), 0, 0, 0); acPolyline.AddVertexAt(5, new Point2d(50, 50), 0, 0, 0); acBlkTblRec.AppendEntity(acPolyline); acTrans.AddNewlyCreatedDBObject(acPolyline, true); //   -  ObjectIdCollection acObjIdColl_OUTER = new ObjectIdCollection(); acObjIdColl_OUTER.Add(acPolyline.ObjectId); //    Circle acCircleOut = new Circle(); acCircleOut.SetDatabaseDefaults(); acCircleOut.Center = new Point3d(150, 165, 0); acCircleOut.Radius = 25; acBlkTblRec.AppendEntity(acCircleOut); acTrans.AddNewlyCreatedDBObject(acCircleOut, true); //   -  ObjectIdCollection acObjIdColl_INNER = new ObjectIdCollection(); acObjIdColl_INNER.Add(acCircleOut.ObjectId); //   Hatch acHatch = new Hatch(); acBlkTblRec.AppendEntity(acHatch); acTrans.AddNewlyCreatedDBObject(acHatch, true); //    acHatch.SetDatabaseDefaults(); acHatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID"); acHatch.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(200, 0, 0); acHatch.Associative = false; acHatch.HatchStyle = HatchStyle.Normal; //     acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl_OUTER); //     acHatch.AppendLoop(HatchLoopTypes.Default, acObjIdColl_INNER); acHatch.EvaluateHatch(true); //   acTrans.Commit(); } } 
   ããã§ãäœæããããããã³ã°ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãå®çŸ©ãããŸãããç»é¢ã«ãããã³ã°ã衚瀺ããã«ã¯ãAutoCADãå¿
èŠãªèšç®ãå®è¡ããå¿
èŠããããŸãããããã®èšç®ãå®è¡ããã«ã¯ã颿°ãåŒã³åºãå¿
èŠããããŸãEvaluateHatch()ããããã³ã°ã®äœæã«å¿
èŠãªãã¹ãŠã®ã¢ã¯ã·ã§ã³ãå®äºããŸãããæé 6ã§æ¢ã«å³é¢ãšãã©ã³ã¶ã¯ã·ã§ã³ã«è¿œå ããŸãããããã§ãAutoCADã倿Žãä¿åã§ããããã«ãã©ã³ã¶ã¯ã·ã§ã³ãä¿®æ£ããŸããæåŸã«-åã«é¢ããå¥ã®ã¡ã¢ãããã°ã©ããŒã§ããããAutoCADã§çŽæ¥å³é¢ãæäœããå¿
èŠãããå ŽåããããŸãïŒä»¥äžã®èšäºã®1ã€ã§ããã€ãããã¯ãããã¯ã«ã€ããŠã話ããããã£ãã®ã§ãããããã¯ç¹ã«åœãŠã¯ãŸããŸãïŒããã®å Žåãåãäœæããæãç°¡åãªæ¹æ³ã¯ãAutoCADã³ã³ãœãŒã«ã§DONUTã³ãã³ãã䜿çšããããšã§ããæ§æã¯æ¬¡ã®ãšããã§ãã DONUT < > < > <> 
DONUT :
 DONUT 0 25 50,50 DONUT 25 75 200,50 

, â ?)
  PS
ãã®èšäºã¯éåžžã«ã·ã³ãã«ã§ããããšã倿ããŸãããããã¹ãŠãæç¢ºã§ã¢ã¯ã»ã¹ãããããã®ã§ããããšãé¡ã£ãŠããŸããAutoCAD .NET APIã䜿çšãããšãå匧ãã¹ãã©ã€ã³ãªã©ã®ããè€éãªåœ¢ç¶ãæç»ã§ããŸããããããã䜿çšããããšã¯ã§ããŸããã§ãããããã«é¢ããæ
å ±ã¯ãå¿
èŠã«å¿ããŠãããã¥ã¡ã³ãïŒç¿»èš³ïŒã§èŠã€ããããšãã§ããŸããäžè¬ã«ãç§ã¯ããã§ããã¹ãã®è¿œå ãšç°¡åãªãããã¯ã®äœæã«ã€ããŠè©±ãã€ããã§ãããããã§ã«ããªããŸãšããªãã®ããããŸããããããã£ãŠããããã®åé¡ã¯æ¬¡ã®èšäºã§åãäžããŸãããæž
èŽããããšãããããŸããïŒ
ã³ã¡ã³ãã§ã¯ããã£ãŒãããã¯ãã³ã¡ã³ããææ¡ãæè¿ããŸãã