挑战口齿不清
嗨,朋友们,我有一个程序ezysurf这个程序可以通过在表面上绘制一条线来绘制横截面或轮廓这个表面由每三个点的3d面组成,3d面位于特定的层上。问题是,除了这条线的起点和终点外,任何人都可以帮助我们如何获得这条线和每个3d面的边缘之间的交点列表(x y z)谢谢 可以做到的是,你需要创建新的线来代表另一层上的面,然后你画出你的线,并为它穿过的每一条线做一个“相交”,给出所需的点。
这只是一个开始,但方向是正确的,需要一个三维面到线来测试分解所有三维面。
relevant bits cut out of Auto dimensioning routine
(setq ss (ssget "F" (list pt1 pt2))) ;your line
(while (setq en (ssname ss 0)) ;loop trhough 3dface lines
(setq dimpt1 (cdr (assoc 10 (entget en))))
(setq dimpt2 (cdr (assoc 11 (entget en))))
(setq newpt2 (inters pt1 pt2 dimpt1 dimpt2 nil))
谢谢BIGAL的回复,但我认为很难将3d人脸分解成线条。我知道lisp非常复杂,但有专家可以做到 嗨,motee-z
这份工作不需要Lisp程序。“截面”命令在曲面上效果良好。为此,您必须将3dFaces转换为曲面。我不使用ribbon,但在经典Acad中,您可以通过修改->网格编辑->转换为镶嵌面曲面(或转换为平滑曲面,3DFace的结果相同);然后是并集(类似于实体),最后是节。。。就像普通固体一样。 谢谢stefan,我的目标是为轮廓和横截面构建一个lisp,所以我想从这里开始,我想一些专家可以帮助我 感谢Stefan为我尝试做的其他事情提供的答案,重新发布该部分,而它切片时不会返回x.y.z值,因为它们切片了原始请求的曲面。
下面是用于拉出3dfaces的xyz的代码,使用pt1 pt2 pt3作为三角形的三条边
(setq ss (ssget "X" '((0 . "3DFACE"))))
(setq y(sslength ss))
(If (=ss nil)
(progn
(Getstring"\nNo 3d faces . Press any key when ready ")
(exit)
)
)
(setq y(sslength ss))
(repeat y
(setq en (ssname ss x)
ed (entget en)
p1 (cdr (assoc 10 ed))
p2 (cdr (assoc 11 ed))
p3 (cdr (assoc 12 ed))
p4 (cdr (assoc 13 ed)); p4 not required
)
)
谢谢BIGAL,你认为可以用线条连接的3d人脸列表的目的是什么
另一方面,变量ed给出nill 没有测试代码只是从其他地方剪切和粘贴需要一个X值或使用Foreach未测试但应该可以工作
(setq x 0)
(setq x (+ x 1))
(setq ss (ssget "X" '((0 . "3DFACE"))))
(setq y(sslength ss))
(If (=ss nil)
(progn
(Getstring"\nNo 3d faces . Press any key when ready ")
(exit)
)
)
(setq y(sslength ss))
(repeat y
(setq en (ssname ss x)
ed (entget en)
p1 (cdr (assoc 10 ed))
p2 (cdr (assoc 11 ed))
p3 (cdr (assoc 12 ed))
p4 (cdr (assoc 13 ed)); p4 not required
)
(princ p1) ; for testing
(setq x (+ x 1))
)
可以得到两条线之间的明显交点的命令是什么?其中一条线的z不同
我们知道如果2行是2d代码是
(inters p1 p2 p3 p4)
谢谢 将inters与2D点一起使用?
页:
[1]
2