乐筑天下

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

CAD获取一个图形上所有直线的交点

[复制链接]

1

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-7-20 11:04:00 | 显示全部楼层 |阅读模式
[code]
#region 相交判断
        [CommandMethod("crossCAD")]
        public void CrossCAD()
        {
            TypedValue[] pTypeValue = new TypedValue[1];
            pTypeValue[0] = new TypedValue((int)DxfCode.LayerName, “测试”);
            SelectionFilter pSelectionFilter=new SelectionFilter(pTypeValue);
            PromptSelectionResult selectResult = pDocument.Editor.SelectAll(pSelectionFilter);
            SelectionSet pSelectionSet = selectResult.Value;
            using (Transaction tran = pDatabase.TransactionManager.StartTransaction())
            {
                List crossPoint = new List();//存放相交点
                Autodesk..ApplicationServices.Application.ShowAlertDialog(pSelectionSet.Count.ToString());
                for(int i=0;i= minX && y >= minY && x = minX && y >= minY && x

jhwsmiigqcb.jpg

jhwsmiigqcb.jpg


图层名称我用的是“测试”,大家根据自己需要改下。
通过以上代码可以将一个图层上所有直线相交点用圆的形式标出,希望大家有用
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-20 12:17:00 | 显示全部楼层

纯数学的方法? 不过好像差点代码。。。
试下这段代码
  1.         [CommandMethod("tx1")]
  2.         public static void CrossCAD()
  3.         {
  4.             var doc = Application.DocumentManager.MdiActiveDocument;
  5.             var db = doc.Database;
  6.             var ed = doc.Editor;
  7.             var sf =
  8.                 new SelectionFilter
  9.                 (
  10.                     new TypedValue[]{ new TypedValue(0, "line")}
  11.                 );
  12.             var res = ed.SelectAll(sf);
  13.             if (res.Status != PromptStatus.OK) return;
  14.             using (var tr = doc.TransactionManager.StartTransaction())
  15.             {
  16.                 var lines = new List();
  17.                 foreach(ObjectId id in res.Value.GetObjectIds())
  18.                 {
  19.                     lines.Add((Line)tr.GetObject(id, OpenMode.ForRead));
  20.                 }
  21.                 List pts = new List();
  22.                 for (int m = 0; m < lines.Count; m++)
  23.                 {
  24.                     LineSegment3d ls1 = new LineSegment3d(lines[m].StartPoint, lines[m].EndPoint);
  25.                     for (int n = m + 1; n < lines.Count; n++)
  26.                     {
  27.                         LineSegment3d ls2 = new LineSegment3d(lines[n].StartPoint, lines[n].EndPoint);
  28.                         CurveCurveIntersector3d cc3d = new CurveCurveIntersector3d(ls1, ls2, Vector3d.ZAxis);
  29.                         if (cc3d.NumberOfIntersectionPoints == 1)
  30.                         {
  31.                             pts.Add(cc3d.GetIntersectionPoint(0));
  32.                         }
  33.                     }
  34.                 }
  35.                 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  36.                 BlockTableRecord btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  37.                 foreach (var pt in pts)
  38.                 {
  39.                     Circle c = new Circle(pt, Vector3d.ZAxis, 1);
  40.                     btr.AppendEntity(c);
  41.                     tr.AddNewlyCreatedDBObject(c, true);
  42.                 }
  43.                 tr.Commit();
  44.             }
  45.         }

回复

使用道具 举报

1

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-7-20 14:00:00 | 显示全部楼层

缺代码吗 亲?纯数学运算的方法做的 通过构建二元一次方程 然后 判断相交点是否在线上...代码完全可行哈 当然你的代码要简洁点 哈哈
回复

使用道具 举报

12

主题

48

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
96
发表于 2019-3-26 18:39:00 | 显示全部楼层
不是AUTOLISP?看不懂,能否做成一个插件LSP
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2019-5-16 18:42:00 | 显示全部楼层
学习了 感谢楼主
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 02:24 , Processed in 0.379086 second(s), 65 queries .

© 2020-2025 乐筑天下

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