mrhvslisp 发表于 2011-10-22 02:06:10

CAD.NET API一日一练(1)简单模拟PL命令了解用户交互


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;

namespace Base
{
    public class Class1
    {
      //模拟CAD的PL命令
      # region mpolyline命令
         
      public static void MyPolyline()
      {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            
            using(Transaction trans=db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt,OpenMode.ForWrite);
                Polyline pl1 = new Polyline();
                btr.AppendEntity(pl1);
                trans.AddNewlyCreatedDBObject(pl1, true);
                Point2d ptvetex;
                List<Point2d> ptlist = new List<Point2d>();
                PromptPointOptions ptoptions = new PromptPointOptions("");
                ptoptions.Message = "\n请选择起点:";
                ptoptions.AllowNone = true;
                ptoptions.AllowArbitraryInput = false;
                PromptPointResult result = ed.GetPoint(ptoptions);
               
                int i=0;
                while (result.Status == PromptStatus.OK | result.Status == PromptStatus.Keyword)
                {
                  if (result.Status == PromptStatus.OK)
                  {
                        ptvetex = new Point2d(result.Value.X, result.Value.Y);
                        pl1.AddVertexAt(i, ptvetex, 0, 0, 0);
                        ptlist.Add(ptvetex);
                        pl1.Draw();
                        i = i + 1;
                        ptoptions.Message = "\n请选择下一点[(W)设置线宽/(C)设置颜色/回车退出:]";
                        ptoptions.UseBasePoint = true;
                        ptoptions.BasePoint = result.Value;
                        ptoptions.Keywords.Add("C");
                        ptoptions.Keywords.Add("W");
                        result = ed.GetPoint(ptoptions);
                     
                  }
                  if (result.Status == PromptStatus.Keyword)
                  {
                        if (result.StringResult == "W")
                        {
                            pl1.LineWeight = LineWeight.LineWeight040;
                        }
                        else
                        {
                            pl1.ColorIndex = 2;
                        }
                        pl1.Draw();
                        ptoptions.Message = "\n请选择下一点[(W)设置线宽/(C)设置颜色/回车退出:]";
                        ptoptions.AllowNone = true;
                        ptoptions.AllowArbitraryInput = false;
                        ptoptions.UseBasePoint = true;
                        ptoptions.BasePoint = new Point3d(ptlist.X, ptlist.Y, 0);
                        ptoptions.Keywords.Add("C");
                        ptoptions.Keywords.Add("W");
                        result = ed.GetPoint(ptoptions);
                        
                        
                  }
                }
                trans.Commit();
            }
      }// end MyPolyline
      # endregion
    }
}


页: [1]
查看完整版本: CAD.NET API一日一练(1)简单模拟PL命令了解用户交互