找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1760|回复: 18

[求助] 求三维实体表面与空间直线的交点

[复制链接]

已领礼包: 6881个

财富等级: 富甲天下

发表于 2016-2-22 09:50:45 | 显示全部楼层 |阅读模式

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

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

×
求三维实体表面与空间直线的交点
求红色三维实体表面与空间白色直线的交点表
(底面的交点可不求)
或求交点的方法
求交点.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6881个

财富等级: 富甲天下

 楼主| 发表于 2016-2-22 09:57:53 | 显示全部楼层
请求大师指点一下
用什么函数才能求出
三维实体与直线的交点
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:求三维实体表面与直线的交点.rar 
下载次数:11  文件大小:53.17 KB 
下载权限: 不限 以上  [免费赚D豆]


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-2-22 18:37:40 来自手机 | 显示全部楼层
ynhh 发表于 2016-2-22 09:57
请求大师指点一下
用什么函数才能求出
三维实体与直线的交点

三维实体是什么类型?
3dface?polyfacemesh?

点评

三维实体就是图中提供的一个 圆锥体 具体在LISP中划归什么类型 就真不知道了 请大师指点  详情 回复 发表于 2016-2-22 22:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6881个

财富等级: 富甲天下

 楼主| 发表于 2016-2-22 22:08:16 | 显示全部楼层
st788796 发表于 2016-2-22 18:37
三维实体是什么类型?
3dface?polyfacemesh?

三维实体就是图中提供的一个
圆锥体
具体在LISP中划归什么类型
就真不知道了
请大师指点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-2-22 22:49:55 | 显示全部楼层
Autodesk 没有提供这种三维实体求交方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-2-23 09:03:15 | 显示全部楼层
几何实体由点->线->面构成,这个求交就反过来,先得到体的面,由面和线构造的任意面求交线,再由线和线求交

  1. [CommandMethod("test")]
  2.         public static void Testsolid()
  3.         {
  4.             var doc = Application.DocumentManager.MdiActiveDocument;
  5.             var ed = doc.Editor;
  6.             var peo = new PromptEntityOptions("\nPick Solid: ");
  7.             peo.SetRejectMessage("\n*Only Solid*");
  8.             peo.AddAllowedClass(typeof(Solid3d),true);
  9.             var per = ed.GetEntity(peo);
  10.             if (per.Status!=PromptStatus.OK)
  11.             {
  12.                 return;
  13.             }
  14.             var id1 = per.ObjectId;
  15.             peo.RemoveAllowedClass(typeof(Solid3d));
  16.             peo.Message = "\nPick Line: ";
  17.             peo.SetRejectMessage("\n*Only Line*");
  18.             peo.AddAllowedClass(typeof(Line),true);
  19.             per = ed.GetEntity(peo);
  20.             if (per.Status!=PromptStatus.OK)
  21.             {
  22.                 return;
  23.             }
  24.             var id2 = per.ObjectId;
  25.             using (var tr=doc.Database.TransactionManager.StartTransaction())
  26.             {
  27.                 try
  28.                 {
  29.                     var btr = (BlockTableRecord) tr.GetObject(doc.Database.CurrentSpaceId, OpenMode.ForWrite);
  30.                     var ent1 = (Entity) tr.GetObject(id1, OpenMode.ForRead);
  31.                     using (var brep =new Brep(ent1 ))
  32.                     {
  33.                         var faces = brep.Faces;
  34.                         var su**ces = faces.Select(face => face.Su**ce).ToList();
  35.                         var line = tr.GetObject(id2, OpenMode.ForRead) as Line;
  36.                         if (line == null) return;
  37.                         var u = line.Delta;
  38.                         var plane=new Plane(line.StartPoint,u,u.GetPerpendicularVector());
  39.                         var ssints = new Su**ceSu**ceIntersector();
  40.                         var geline = new LineSegment3d(line.StartPoint, line.EndPoint);
  41.                         foreach (var su**ce in su**ces)
  42.                         {
  43.                             ssints.Set(su**ce,plane);
  44.                             var num = ssints.NumResults;
  45.                             if (num <= 0) continue;
  46.                             for (var i = 0; i < num; i++)
  47.                             {
  48.                                 var crv= ssints.IntersectCurve(i, false);
  49.                                 using (var cc3d=new CurveCurveIntersector3d(crv,geline,plane.Normal))
  50.                                 {
  51.                                     if (cc3d.NumberOfIntersectionPoints <= 0) continue;
  52.                                     for (var j = 0; j < cc3d.NumberOfIntersectionPoints; j++)
  53.                                     {
  54.                                         var pt = cc3d.GetIntersectionPoint(j);
  55.                                         if (!geline.IsOn(pt)) continue;
  56.                                         var dbpt = new DBPoint(pt) {ColorIndex = 1};
  57.                                         btr.AppendEntity(dbpt);
  58.                                         tr.AddNewlyCreatedDBObject(dbpt,true);
  59.                                         tr.Commit();
  60.                                         return;
  61.                                     }
  62.                                 }
  63.                             }
  64.                         }
  65.                     }
  66.                     tr.Commit();
  67.                 }
  68.                 catch (Exception ex)
  69.                 {
  70.                     //throw;
  71.                     ed.WriteMessage(ex.ToString());
  72.                 }
  73.             }
  74.         }

点评

感谢大师的指点 你介绍的这些我也看不懂 你都说没法用LISP方法求出此类交点 我也就不去钻这个牛角尖了 谢谢你大师  详情 回复 发表于 2016-2-23 09:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6881个

财富等级: 富甲天下

 楼主| 发表于 2016-2-23 09:06:20 | 显示全部楼层
csharp 发表于 2016-2-23 09:03
几何实体由点->线->面构成,这个求交就反过来,先得到体的面,由面和线构造的任意面求交线,再由线和线求交

感谢大师的指点
你介绍的这些我也看不懂
你都说没法用LISP方法求出此类交点
我也就不去钻这个牛角尖了
谢谢你大师

点评

A/Vlisp 就不要想了, 三维实体没有实现Intersectwith 方法,即使 ARX 中 Entity 的 Intersectwith 对三维实体也无效  详情 回复 发表于 2016-2-23 09:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-2-23 09:12:40 | 显示全部楼层
ynhh 发表于 2016-2-23 09:06
感谢大师的指点
你介绍的这些我也看不懂
你都说没法用LISP方法求出此类交点

A/Vlisp 就不要想了, 三维实体没有实现Intersectwith 方法,即使 ARX 中 Entity 的 Intersectwith 对三维实体也无效

点评

你的话语 就是明师指路 真心谢谢大师  详情 回复 发表于 2016-2-23 09:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6881个

财富等级: 富甲天下

 楼主| 发表于 2016-2-23 09:14:55 | 显示全部楼层
csharp 发表于 2016-2-23 09:12
A/Vlisp 就不要想了, 三维实体没有实现Intersectwith 方法,即使 ARX 中 Entity 的 Intersectwith 对三 ...

你的话语
就是明师指路
真心谢谢大师

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-2-23 09:26:17 | 显示全部楼层
在 AutoCAD 的 Geomtry 模型中有两个求交方法,CurveCurveIntersector3d/2d 线线相交交模型,Su**ceSu**ceIntersector 面面相交模型,线和面(非Plane)没有直接方法,至少我没有找到,也许看手册还不够全面

点评

试试AcBr类  详情 回复 发表于 2016-2-23 10:02
谢谢你的指点 如能用LISP方法求出 那感情是好 如不能 那也没办法了 谢谢大师  详情 回复 发表于 2016-2-23 09:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6881个

财富等级: 富甲天下

 楼主| 发表于 2016-2-23 09:30:15 | 显示全部楼层
csharp 发表于 2016-2-23 09:26
在 AutoCAD 的 Geomtry 模型中有两个求交方法,CurveCurveIntersector3d/2d 线线相交交模型,Su**ceSu**ceI ...

谢谢你的指点
如能用LISP方法求出
那感情是好
如不能
那也没办法了
谢谢大师
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2016-2-23 09:34:36 | 显示全部楼层
自己做一个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-2-23 09:36:05 | 显示全部楼层
用 ARX 或者 C# 写个 Autolisp 函数也是 LISP 方法

点评

请大师出手 试试看能不能 编写一个LISP程序 解决这个在大家都认为是不可能的困难 谢谢大师  详情 回复 发表于 2016-2-23 09:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6881个

财富等级: 富甲天下

 楼主| 发表于 2016-2-23 09:51:14 | 显示全部楼层
st788796 发表于 2016-2-23 09:36
用 ARX 或者 C# 写个 Autolisp 函数也是 LISP 方法

请大师出手
试试看能不能
编写一个LISP程序
解决这个在大家都认为是不可能的困难
谢谢大师
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-2-23 10:02:33 | 显示全部楼层
csharp 发表于 2016-2-23 09:26
在 AutoCAD 的 Geomtry 模型中有两个求交方法,CurveCurveIntersector3d/2d 线线相交交模型,Su**ceSu**ceI ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 01:59 , Processed in 0.486914 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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