jeremyearle5 发表于 2022-7-6 08:34:43

需要帮助制定常规

我在工作中使用autocad 2000为CAM创建图形。每次加工路径的编号在521-850(这是块名)之间,编号在整个范围内使用,不按顺序排列。我想做的是,用一个命令在0,0处一次性插入这些编号的块。问题一:我能用autolisp得到一个只包含块名的列表吗?问题2:我可以用某种条件过滤块名吗?还是我必须换一种方式?

Tharwat 发表于 2022-7-6 08:51:05

看看这个。。。将在坐标0,0,0处插入所有块,并将插入块的名称打印到命令行。。
 

(defun c:TesT (/ Block Blockname lst)
(while
   (setq Block (tblnext "BLOCK" (null Block)))
    (entmake
      (list '(0 . "INSERT")
            (cons 10 '(0. 0. 0.))
            (cons 2 (setq Blockname (cdr (assoc 2 Block))))
            '(41 . 1.)
            '(42 . 1.)
            '(43 . 1.)
            '(50 . 0.)
      )
    )
    (setq lst (cons Blockname lst))
)
(print lst)
(princ)
)

jeremyearle5 发表于 2022-7-6 09:02:16

谢谢你,伙计!太糟糕了,我不得不等到今晚上班再试试。

Tharwat 发表于 2022-7-6 09:19:35

 
没问题,
 
忘了说,欢迎来到论坛。
 
塔瓦特

marko_ribar 发表于 2022-7-6 09:28:59

也许是这样:
 
(defun BlocksFound(/a b)(while(setq a(tblnext“BLOCK”(null a))(if(and(/=4(logand 4(cdr(assoc 70 a))))(if(assoc 1 a)(not(findfile(cdr(assoc 1 a)))T))(setq b(cons(cdr(assoc 2 a))b)))b)(defun sortblocklist()(vl sort(BlocksFound)“(lambda b)(<a b))(defun filterblocklist(/pref stno enno no blname filtbllst)(setq pref(getstring T“\n块的输入前缀:”)(setq stno(getint“\n过滤块列表的输入开始编号:”)(setq enno(getint“\n过滤块列表的输入结束编号:”)(setq no(-stno 1))(而(

jeremyearle5 发表于 2022-7-6 09:39:15

效果很好,马尔科!我只是用我需要的起始和结束数字切换了用户输入。我很感激。
页: [1]
查看完整版本: 需要帮助制定常规