明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2335|回复: 0

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

[复制链接]
发表于 2011-10-22 02:06:10 | 显示全部楼层 |阅读模式

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.DatabaseServices;
  8. using Autodesk.AutoCAD.Geometry;
  9. using Autodesk.AutoCAD.EditorInput;

  10. namespace Base
  11. {
  12.     public class Class1
  13.     {
  14.         //模拟CAD的PL命令
  15.         # region mpolyline命令  
  16.         [CommandMethod("mpolyline")]   
  17.         public static void MyPolyline()
  18.         {
  19.             Document doc = Application.DocumentManager.MdiActiveDocument;
  20.             Database db = doc.Database;
  21.             Editor ed = doc.Editor;
  22.             
  23.             using(Transaction trans=db.TransactionManager.StartTransaction())
  24.             {
  25.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  26.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
  27.                 Polyline pl1 = new Polyline();
  28.                 btr.AppendEntity(pl1);
  29.                 trans.AddNewlyCreatedDBObject(pl1, true);
  30.                 Point2d ptvetex;
  31.                 List<Point2d> ptlist = new List<Point2d>();
  32.                 PromptPointOptions ptoptions = new PromptPointOptions("");
  33.                 ptoptions.Message = "\n请选择起点:";
  34.                 ptoptions.AllowNone = true;
  35.                 ptoptions.AllowArbitraryInput = false;
  36.                 PromptPointResult result = ed.GetPoint(ptoptions);
  37.                
  38.                 int i=0;
  39.                 while (result.Status == PromptStatus.OK | result.Status == PromptStatus.Keyword)
  40.                 {
  41.                     if (result.Status == PromptStatus.OK)
  42.                     {
  43.                         ptvetex = new Point2d(result.Value.X, result.Value.Y);
  44.                         pl1.AddVertexAt(i, ptvetex, 0, 0, 0);
  45.                         ptlist.Add(ptvetex);
  46.                         pl1.Draw();
  47.                         i = i + 1;
  48.                         ptoptions.Message = "\n请选择下一点[(W)设置线宽/(C)设置颜色/回车退出:]";
  49.                         ptoptions.UseBasePoint = true;
  50.                         ptoptions.BasePoint = result.Value;
  51.                         ptoptions.Keywords.Add("C");
  52.                         ptoptions.Keywords.Add("W");
  53.                         result = ed.GetPoint(ptoptions);
  54.                        
  55.                     }
  56.                     if (result.Status == PromptStatus.Keyword)
  57.                     {
  58.                         if (result.StringResult == "W")
  59.                         {
  60.                             pl1.LineWeight = LineWeight.LineWeight040;
  61.                         }
  62.                         else
  63.                         {
  64.                             pl1.ColorIndex = 2;
  65.                         }
  66.                         pl1.Draw();
  67.                         ptoptions.Message = "\n请选择下一点[(W)设置线宽/(C)设置颜色/回车退出:]";
  68.                         ptoptions.AllowNone = true;
  69.                         ptoptions.AllowArbitraryInput = false;
  70.                         ptoptions.UseBasePoint = true;
  71.                         ptoptions.BasePoint = new Point3d(ptlist[i-1].X, ptlist[i-1].Y, 0);
  72.                         ptoptions.Keywords.Add("C");
  73.                         ptoptions.Keywords.Add("W");
  74.                         result = ed.GetPoint(ptoptions);
  75.                         
  76.                         
  77.                     }
  78.                 }
  79.                 trans.Commit();
  80.             }
  81.         }// end MyPolyline
  82.         # endregion
  83.     }
  84. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 19:42 , Processed in 0.160983 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表