乐筑天下

帖子
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 11|回复: 0

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

[复制链接]

24

主题

42

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
138
发表于 2011-10-22 02:06:00 | 显示全部楼层 |阅读模式
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk..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 ptlist = new List();
  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. }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁體中文

GMT+8, 2025-3-16 14:52 , Processed in 1.305432 second(s), 55 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表