找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 780|回复: 0

[每日一码] C#取得多段线中圆弧中点坐标

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-6-2 11:15:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×


  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.GraphicsInterface;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using Autodesk.AutoCAD.ApplicationServices;
  8. [assembly: ExtensionApplication(typeof(ClassLibrary.Lab8Class))]
  9. [assembly: CommandClass(typeof(ClassLibrary.Lab8Class))]
  10. namespace ClassLibrary
  11. {
  12. public class Lab8Class:IExtensionApplication
  13. {
  14.   public void Initialize()
  15.   {
  16.    Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n调试程序命令LV");//初始化操作
  17.   }
  18.   public void Terminate()
  19.   {
  20.    //清除操作
  21.   }

  22.   public Lab8Class()
  23.   {
  24.    //
  25.    // TODO: Add constructor logic here
  26.    //
  27.   }
  28.   Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  29.   Database db = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
  30.   Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase.TransactionManager;
  31.   // Define Command "AsdkCmd1"
  32.   [CommandMethod("LV")]
  33.   public void getPlPoint() // This method can have any name
  34.   {
  35.    try
  36.    {
  37.     Transaction trans=tm.StartTransaction();
  38. //    BlockTableRecord btr;
  39. //    BlockTable bt;
  40.     using(trans)
  41.     {
  42.                      PromptEntityResult per = ed.GetEntity("请选择多段线");
  43.      if(per.Status == PromptStatus.OK)
  44.      {
  45.       DBObject obj = trans.GetObject(per.ObjectId, OpenMode.ForRead);
  46.       {
  47.        Polyline PL = obj as Polyline;
  48.        int vn = PL.NumberOfVertices;
  49.        for(int i = 0; i<= vn; i++)
  50.        {
  51.         Point3d pt3d = PL.GetPoint3dAt(i-1);
  52.         double vBulge = PL.GetBulgeAt(i);
  53.         if(vBulge != 0)
  54.         {
  55.                   //方法一,比较笨的方法。
  56.              double len0 = PL.GetDistAtPoint(PL.GetPoint3dAt(i));
  57.              double len1 = PL.GetDistAtPoint(PL.GetPoint3dAt(i+1));
  58.              double midlen = (len0 + len1)/2;
  59.              ed.WriteMessage("\n第二种方法计算的圆弧中点是:" + midP3d.ToString());
  60.                    //方法二,但是速度比较慢好像,因为如果加上下面的代码,运行速度明显慢,前面是感觉不出来的,后面的要停顿一下,可能有异常
  61.              Point3d midL = PL.GetPointAtParameter(i+0.5);
  62.              ed.WriteMessage("\n第二种方法计算的圆弧中点是:" + midL.ToString());   
  63.         }
  64.        }
  65.       }
  66.      }
  67.      trans.Commit();
  68.      trans.Dispose();
  69.     }
  70.    }
  71.    catch{}
  72.    finally
  73.    {
  74.    }
  75.   }
  76. }
  77. }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:47 , Processed in 0.299538 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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