gtwatson 发表于 2022-7-6 09:11:29

需要LISP例程来选择

我有ACAD 2006,但我们刚刚买了2012。我做输电塔,需要为截面切割3D平面。我的结构化程序输出一个三维DXF文件,该文件由三维空间中的线组成。2006年,我能够使用UCS中的3个点手动执行此操作,以基于3个选定点生成UCS,然后我对属性进行了过滤,并选择了驻留在新平面上的线,但我无法使用过滤器手动获取线的起点和终点。在2012年,我似乎找不到如何进行过滤,所以我认为LISP例程可以做到这一点。
 
我需要的是能够在我的3D模型上选择3个点(所有线都没有实体,也没有文本),过滤这些线,并只选择那些起点Z坐标和终点Z坐标等于零的点(以便只选择驻留在我的新平面上的线),然后我想将选择集复制到一个新层,用它制作一个块,保存块,以便我可以将其粘贴到新图形。我不想从原始3D模型中删除线条,但可以将它们放在新的命名层上,以便我可以在以后关闭或隐藏它们。
 
运行lisp例程后,我将对这些线进行注释,并手动在其上放置一些尺寸标注。这将作为示意图发送给输电塔详图设计人员,告诉他角度尺寸、螺栓数量和角度中的孔数量。
 
任何帮助都将不胜感激。我附加了一个DXF的拉链,因为它太大了,所以你们可以看到我在用什么。
 
几年前我写了一个LISP例程,用来把数字圈起来,我在这里得到了一些帮助,但自20世纪80年代中期以来,我的自动LISP技能有所下降。
 
 
 
谢谢
 
乔治
穿越9x13 ng。拉链

BIGAL 发表于 2022-7-6 09:52:48

可以通过设置ucs,然后选择所有实体来实现,但只能复制z值为0.0的实体
类似于需要使用ssget拾取多行(ssget“W”)窗口选项,然后使用sslength获取多少个对象
 
(setq ss (ssget "W" ) ;window option
(setq n (sslength ss)) ; for how many objects
(repeat n
(setq objname (ssname n))
(setq tpp1 (entget objname)))
(setq endpt1 (cdr (assoc 10 tpp1)))
(setq zval (caddr endpt1))
(if (= zval 0.0) do something here

)

   

gtwatson 发表于 2022-7-6 10:37:52

我试图使用QSELECT和过滤器,但在使用3个点选择平面方面没有任何进展。我可以使用UCS并选择3个点,图标会指向我想要的点。当我尝试选择位于这个新平面上的线时,我没有得到预期的结果。选择新UCS时,ACAD是否将起点和终点坐标转换为新平面?当我为Z=0的线选择QSELECT时,我似乎没有选择平面上的线。
 
在BIGAL发布的代码中,我不知道足够的lisp来让它做任何事情。我确实在顶部添加了一个defun,但后来我被我的飞机和UCS卡住了。
页: [1]
查看完整版本: 需要LISP例程来选择