52
380
11
中流砥柱
使用道具 举报
72
2726
9
社区元老
using System; using System.Collections.Generic; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; [assembly: CommandClass(typeof(TlsCad.MyLineJig))] namespace TlsCad { class MyLineJig : DrawJig { List m_Points = new List(); List m_Lines = new List(); Point3d m_EndPoint; LineJigStatus m_Status = LineJigStatus.Add; public enum LineJigStatus { Add, Undo, Close, Finish } public LineJigStatus JigStatus { get { return m_Status; } set { m_Status = value; } } public Point3d StartPoint { get { return m_Points[1]; } } public Point3d EndPoint { get { return m_Points[0]; } } protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw) { return true; } protected override SamplerStatus Sampler(JigPrompts prompts) { JigPromptPointOptions jigOpts = new JigPromptPointOptions(); jigOpts.UserInputControls = UserInputControls.Accept3dCoordinates | UserInputControls.NoZeroResponseAccepted | UserInputControls.NoNegativeResponseAccepted | UserInputControls.NullResponseAccepted; switch (m_Points.Count) { case 0: jigOpts.Message = "\n指定第一点:"; break; case 1: case 2: jigOpts.Cursor = CursorType.RubberBand; jigOpts.SetMessageAndKeywords("\n指定下一点或 [放弃(U)]:", "Undo"); jigOpts.UseBasePoint = true; jigOpts.BasePoint = m_Points[0]; break; default: jigOpts.Cursor = CursorType.RubberBand; jigOpts.SetMessageAndKeywords("\n指定下一点或 [闭合(C)/放弃(U)]:", "Close Undo"); jigOpts.UseBasePoint = true; jigOpts.BasePoint = m_Points[0]; break; } PromptPointResult res = prompts.AcquirePoint(jigOpts); m_Status = LineJigStatus.Add; switch (res.Status) { case PromptStatus.Cancel: case PromptStatus.None: m_Status = LineJigStatus.Finish; return SamplerStatus.Cancel; case PromptStatus.Keyword: switch (res.StringResult) { case "Undo": m_Status = LineJigStatus.Undo; break; case "Close": m_EndPoint = m_Points[m_Points.Count - 1]; m_Status = LineJigStatus.Close; break; } return SamplerStatus.OK; default: Point3d positionTemp = res.Value; if (positionTemp != m_EndPoint) { m_EndPoint = positionTemp; } else { return SamplerStatus.NoChange; } break; } return SamplerStatus.OK; } public int AddPoint() { m_Points.Insert(0, m_EndPoint); return m_Points.Count; } public void AddLine(Line line) { m_Lines.Insert(0, line.ObjectId); } public ObjectId CurrLine { get { return m_Lines.Count == 0 ? ObjectId.Null : m_Lines[0]; } } public int RemovePoint() {