明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2327|回复: 6

CAD.NET API一日一练(2)回顾用户交互,了解对实体的操作

[复制链接]
发表于 2011-10-23 20:37:53 | 显示全部楼层 |阅读模式
本帖最后由 mrhvslisp 于 2011-10-23 21:42 编辑

  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.           //沿指定方向按指定距离复制实体
  15.         #region supercopy
  16.         [CommandMethod("supercopy")]
  17.         public static void SuperCopy()
  18.         {
  19.             Document doc = Application.DocumentManager.MdiActiveDocument;
  20.             Database db = doc.Database;
  21.             Editor ed = doc.Editor;

  22.             using (Transaction trans = doc.TransactionManager.StartTransaction())
  23.             {
  24.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
  25.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
  26.                 PromptSelectionResult result = ed.GetSelection();
  27.                 ObjectIdCollection idcoll = new ObjectIdCollection();
  28.                 if (result.Status == PromptStatus.OK)
  29.                 {
  30.                     SelectionSet ss = result.Value;
  31.                     foreach (SelectedObject obj in ss)
  32.                     {
  33.                         idcoll.Add(obj.ObjectId);
  34.                         
  35.                     }
  36.                 }

  37.                 PromptPointOptions ptoptions = new PromptPointOptions("");
  38.                 ptoptions.AllowArbitraryInput = false;
  39.                 ptoptions.Message = "\n请选择起点";
  40.                 PromptPointResult ptresult = ed.GetPoint(ptoptions);
  41.                 Point3dCollection ptcoll = new Point3dCollection();
  42.                 if(ptresult.Status==PromptStatus .OK)
  43.                 {
  44.                     Point3d pt1 = new Point3d(ptresult .Value.X,ptresult.Value.Y,0);
  45.                     ptcoll.Add(pt1);
  46.                 }
  47.                 else if (ptresult.Status == PromptStatus.Cancel)
  48.                 {
  49.                     return;
  50.                 }

  51.                 ptoptions.Message = "\n请选择终点";
  52.                 PromptPointResult pt2result = ed.GetPoint (ptoptions);
  53.                 if (pt2result.Status == PromptStatus.OK)
  54.                 {
  55.                     Point3d pt2 = new Point3d(pt2result.Value.X, pt2result.Value.Y,0);
  56.                     ptcoll.Add(pt2);
  57.                 }
  58.                 else if (ptresult.Status == PromptStatus.Cancel)
  59.                 {
  60.                     return;
  61.                 }

  62.                 Vector3d vec = new Vector3d(ptcoll[1].X-ptcoll[0].X,ptcoll[1].Y-ptcoll[0].Y,0);
  63.                 PromptDistanceOptions distanceoptions = new PromptDistanceOptions("");
  64.                 distanceoptions.Message = "\n请输入复制间隔";
  65.                 distanceoptions.AllowNone = true;
  66.                 distanceoptions.DefaultValue = 8;
  67.                 distanceoptions.AllowArbitraryInput = false;
  68.                 PromptDoubleResult distresult = ed.GetDistance(distanceoptions);
  69.                 if (distresult.Status == PromptStatus.OK | distresult.Status == PromptStatus.None)
  70.                 {
  71.                     double length = distresult.Value;
  72.                     int i = Convert.ToInt32(Math.Floor(vec.Length / length));
  73.                     vec = vec / i;

  74.                     for (int m = 1; m <= i; m++)
  75.                     {
  76.                         foreach (ObjectId id in idcoll)
  77.                         {
  78.                             Entity entity = trans.GetObject(id, OpenMode.ForWrite) as Entity;
  79.                             Matrix3d mt = Matrix3d.Displacement(vec*m);
  80.                             Entity entcopy = entity.GetTransformedCopy(mt);
  81.                             btr.AppendEntity(entcopy);
  82.                             trans.AddNewlyCreatedDBObject(entcopy, true);            
  83.                         }
  84.                     }
  85.                 }
  86.                 ed.UpdateScreen();
  87.                 trans.Commit();
  88.             }
  89.             
  90.         }
  91.         #endregion
  92.     }
  93. }

 楼主| 发表于 2011-10-23 21:10:46 | 显示全部楼层
加精了?
哈哈
感谢版主
发表于 2012-6-25 14:50:48 | 显示全部楼层
嗯 不错,看过~
发表于 2012-6-26 08:47:04 | 显示全部楼层
学习中,希望能进步
发表于 2012-6-27 18:32:07 | 显示全部楼层
大多数都是C#的代码,VB.NET的怎么就那么少呢?看来还是C#有人气啊!
发表于 2012-6-29 07:24:50 来自手机 | 显示全部楼层
看来c #人气旺啊
发表于 2013-6-7 15:18:14 | 显示全部楼层
好贴,一定支持。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:22 , Processed in 0.151841 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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