-
[C#/AutoCAD] Polyline Jig 사용법C#/AutoCAD API 2023. 9. 8. 06:06
일반 Command인 'poyline'을 입력하면 Picking 지점에 선이 생기면서 각 지점을 확인하며 작업을 이어갈 수 있다.
.Net API에서도 동일하게 하려면 EntityJig를 사용해야 하며, Polyline은 아래와 같이 작성한다.
public class Commands { [CommandMethod("TEST")] public static void Test() { var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; var ppr = ed.GetPoint("\nFirst point: "); if (ppr.Status != PromptStatus.OK) return; using (var tr = db.TransactionManager.StartTransaction()) { using (var pline = new Polyline()) { pline.AddVertexAt(0, ppr.Value.Convert2d(new Plane()), 0.0, 0.0, 0.0); pline.AddVertexAt(1, Point2d.Origin, 0.0, 0.0, 0.0); pline.TransformBy(ed.CurrentUserCoordinateSystem); var jig = new PlineJig(pline); var cSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); while (true) { var pr = ed.Drag(jig); if (pr.Status == PromptStatus.Cancel) return; if (pr.Status == PromptStatus.OK) { pline.AddVertexAt(pline.NumberOfVertices, Point2d.Origin, 0.0, 0.0, 0.0); db.TransactionManager.QueueForGraphicsFlush(); } else { pline.RemoveVertexAt(pline.NumberOfVertices - 1); if (pr.Status == PromptStatus.Keyword) { pline.Closed = true; } else if ( pline.NumberOfVertices < 2) { return; } cSpace.AppendEntity(pline); tr.AddNewlyCreatedDBObject(pline, true); break; } } } tr.Commit(); } } } class PlineJig : EntityJig { Polyline pline; Point3d dragPt; Plane plane; public PlineJig(Polyline pline) : base(pline) { this.pline = pline; plane = new Plane(Point3d.Origin, pline.Normal); } protected override SamplerStatus Sampler(JigPrompts prompts) { var options = new JigPromptPointOptions("\nNext point: "); options.BasePoint = pline.GetPoint3dAt(pline.NumberOfVertices - 2); options.UseBasePoint = true; if (3 < pline.NumberOfVertices) { options.Keywords.Add("Close"); options.AppendKeywordsToMessage = true; } options.UserInputControls = UserInputControls.Accept3dCoordinates | UserInputControls.GovernedByOrthoMode | UserInputControls.GovernedByUCSDetect | UserInputControls.NullResponseAccepted; var result = prompts.AcquirePoint(options); if (result.Value.IsEqualTo(dragPt)) return SamplerStatus.NoChange; dragPt = result.Value; return SamplerStatus.OK; } protected override bool Update() { pline.SetPointAt(pline.NumberOfVertices - 1, dragPt.Convert2d(plane)); return true; } }
출처 : https://forums.autodesk.com/t5/net/polyline-jig-displaying-drawn-segments-of-polyline/m-p/9950238
'C# > AutoCAD API' 카테고리의 다른 글
[C#/AutoCAD] AutoCAD .NET 호환성 (0) 2023.09.10 [C#/AutoCAD] Rectangle Jig (0) 2023.09.08 [C#/AutoCAD] Ribbon Tab/Menu/Button 설정 (0) 2023.09.08 [C#/AutoCAD] Form 숨기고 띄우기 (0) 2023.09.08 [C#/AutoCAD] Color 입력 방법 (0) 2023.09.08