daveacad 发表于 2022-7-5 18:19:35

按clic对实体排序和编号

大家好!
 
我在寻求帮助:我需要用激光切割有机玻璃。该表单由Autocad绘制,带有许多圆形和弧形。
 
知道有人能用例程或lisp单击实体来重新排序排序吗?其次,在实体中添加一个累进的数字,以直观地控制它们的排序,这将是非常棒的!
 
(我希望我提出的问题很清楚。我的英语很差)。
 
再见,
Daveacad公司

Lee Mac 发表于 2022-7-5 18:27:25

 
你说的“重新排序”是什么意思?
 
为了帮助我们理解,您能解释一下您是如何手动执行此操作的吗?

BIGAL 发表于 2022-7-5 18:28:00

听起来像是筑巢以减少浪费

daveacad 发表于 2022-7-5 18:32:40

嗨,李,
看图片!
 
https://www.cadtutor.net/forum/attachment.php?attachmentid=56234&cid=1&stc=1
 
如你所见,右边是我绘制的图,实体的顺序是通过绘制来实现的(这只是一个例子。我没有检查正确的顺序!!!)。
在左侧,相同的图形具有相同的实体,但为了让激光切割效果更好。
在下面,我画出了激光的路径。
 
我需要的是选择实体的可能性,并决定在另一个实体之前“绘制”哪个实体。这是因为激光切割的路径取决于图形中插入实体的顺序。
 
第二张图片是第一次剪切的结果:
 
https://www.cadtutor.net/forum/attachment.php?attachmentid=56235&cid=1&stc=1
 
P、 我想这些弧是在一条直线上连接起来的!
 
 
再见,
达维德

BIGAL 发表于 2022-7-5 18:37:31

不确定是否可以对dwg数据库中的图元重新排序,但可以复制到另一个dwg,因此顺序正确,可能需要使用复制粘贴。使用拾取对象和一些智能工具可以自动执行拾取顺序。ssget“F”将按正确顺序拾取所有圆。
 
需要一个测试代码来查看订单是否正常工作,比如说每个对象上的数字可能使用assoc 10。
 
(setq ss(ssget))(命令“copyclip”ss“”)有效,因此需要使用SSADD创建智能选择集。
 
现在就可以了,但是在岳母生日那天出去吃午饭,让岳母的笑话开始吧。

Lee Mac 发表于 2022-7-5 18:42:03

请尝试以下操作:

;; OE (Order Entities)-Lee Mac
(defun c:oe ( / cnt ent enx new sbx sub )
   (setq cnt 1)
   (while
       (progn
         (setvar 'errno 0)
         (setq ent (car (entsel (strcat "\nSelect object " (itoa cnt) " <done>: "))))
         (cond
               (   (= 7 (getvar 'errno))
                   (princ "\nMissed, try again.")
               )
               (   (null ent)
                   nil
               )
               (   (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 (setq enx (entget ent)))))))))
                   (princ "\nSelected object is on a locked layer.")
               )
               (   (and
                     (setq new (entmakex enx))
                     (or (/= 1 (cdr (assoc 66 enx)))
                           (progn
                               (setq sub (entnext ent)
                                     sbx (entgetsub)
                               )
                               (while (/= "SEQEND" (cdr (assoc 0 sbx)))
                                 (entmake sbx)
                                 (setq sub (entnext sub)
                                       sbx (entgetsub)
                                 )
                               )
                               (entmake sbx)
                           )
                     )
                   )
                   (entdel ent)
                   (redraw new 3)
                   (setq   cnt (1+ cnt))
               )
               (   (princ "\nUnable to reorder selected object."))
         )
       )
   )
   (command "_.regen")
   (princ)
)

BIGAL 发表于 2022-7-5 18:46:51

李,那将是19选择我的想法4为圆圈最后1为外普林形状掉出来。5根镐。需要一个智能围栏或一次一个。

BIGAL 发表于 2022-7-5 18:51:38

第2部分测试我使用带数字的文本来检查对象的顺序。其硬编码以匹配测试模式,但方法存在。
 
(defun c:test ( / pt1 pt2 pt3 pt4 pt5 ss x)
(setq pt1 (getpoint))
(setq pt2 (getpoint))
(setq pt3 (getpoint))
(setq pt4 (getpoint))
(setq pt5 (getpoint))
(setq ss (ssget "F" (list pt1 pt2 pt3 pt4 pt5)))
(setq x (sslength ss))
(repeat (sslength ss)
(princ (vla-get-textstring (vlax-ename->vla-object(ssname ss (setq x ( - x 1))))))
(princ "\n")
)
)

daveacad 发表于 2022-7-5 18:54:00

大家好,
谢谢你的工作!!!
 
李编写的代码运行正常。它将非常有用的所有正常选择选项;有200多个实体,需要时间逐一挑选。
 
关于比格尔的代码,我什么都不能说。。。我Lisp程序!我试过用它,但我不明白它是怎么工作的。无论如何,再次感谢您的关注。
 
现在,李先生,您可以添加使用AutoCAD所有选择选项的功能吗?用数字标记项目也很好,只是用普通文本。
 
我希望你有一个美好的结局!!!
Grazie,
大卫

Least 发表于 2022-7-5 18:59:10

嗨,李,
 
我认为这可能对我有用。我会尽快给它做个测试。
 
我的测量仪器可以导入dxf,实体在dxf中的顺序对应于指定的顶点和块的点编号。我发现我可以通过两次反转线路来设置线路工作顺序。
 
P
页: [1] 2
查看完整版本: 按clic对实体排序和编号