找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1492|回复: 0

[原创] 练习 Lisp定义GetSplitCurves

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-4-20 16:10:28 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 csharp 于 2014-4-20 16:18 编辑

  1.         [LispFunction("GetSplitCurves")]
  2.         public static ResultBuffer  GetSplitCurves(ResultBuffer rb)
  3.         {
  4.             ResultBuffer ret = new ResultBuffer();
  5.             Document document = Application.DocumentManager.MdiActiveDocument;
  6.             Editor editor= document.Editor;
  7.             Transaction transaction = document.TransactionManager.StartTransaction();
  8.             Database db = document.Database;
  9.             using (transaction )
  10.             
  11.                 try
  12.                 {
  13.                     if (rb != null)
  14.                     {
  15.                         TypedValue[] rbArr = rb.AsArray();
  16.                         DoubleCollection doubleCollection = new DoubleCollection( );
  17.                         TypedValue entId = rbArr[0];
  18.                         ObjectId id = (ObjectId)entId.Value;
  19.                         Curve curve = (Curve )transaction.GetObject(id, OpenMode.ForWrite);
  20.                         if (curve.Closed ) doubleCollection.Add(curve.StartParam);
  21.                         foreach (TypedValue  arg in rbArr)
  22.                         {
  23.                             switch (arg.TypeCode)
  24.                             {
  25.                                 case 5001:
  26.                                     double n = Convert.ToDouble(arg.Value);
  27.                                     doubleCollection.Add(n);
  28.                                     break;
  29.                                 case 5003:
  30.                                     //short ii = (short) arg.Value;
  31.                                     double nn = Convert.ToDouble(arg.Value);
  32.                                     doubleCollection.Add(nn);
  33.                                     break;
  34.                                 case 5004:
  35.                                     int iii = (int) arg.Value;
  36.                                     double nnn = iii;
  37.                                     doubleCollection.Add(nnn);
  38.                                     break;
  39.                                 default :
  40.                                     break;
  41.                             }
  42.                         }
  43.                         foreach (double i in doubleCollection)
  44.                         {
  45.                             editor.WriteMessage(i.ToString());
  46.                         }
  47.                         DBObjectCollection dbObjectCollection = curve.GetSplitCurves(doubleCollection  );
  48.                         BlockTableRecord Spase = (BlockTableRecord)transaction.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  49.                         foreach (DBObject cDbObject in dbObjectCollection )
  50.                         {
  51.                             Spase.AppendEntity((Entity)cDbObject);
  52.                             transaction .AddNewlyCreatedDBObject(cDbObject, true);
  53.                         }
  54.                         curve.Erase();
  55.                         // */
  56.                     }
  57.                     transaction.Commit();
  58.                     return null;
  59.                 }
  60.                 catch (Exception)
  61.                 {
  62.                     throw;
  63.                 }
  64.         }

在Lisp下断开曲线很麻烦,XdRxAPI 中有个 xdrx_curve_getsplitcurves ,模仿在写了一个,因为初学 C# ,很不完善,只能用 Pamram 而且要自己先行由小到大排好序,另外对封闭曲线处理的不好,在起始点处会多断开一段
使用方法
(getsplitcurves curve pam1 pam2 pam3 ...)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 22:24 , Processed in 0.290102 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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