guitarguy1685 发表于 2022-7-6 11:40:04

不按命令缩放

如何使用(命令“scale”等)缩放不带的块?提前感谢

guitarguy1685 发表于 2022-7-6 11:59:41

我目前正在尝试选择多个块,并尝试按当前的DIMSCALE缩放每个块。为了使它们保持在原来的位置,我希望每一个都以它们的插入点为基点进行缩放。我看到了李的Lisp程序,并试图修改它来完成我的任务。这就是我所拥有的,但我犯了一个错误。
 
(defun c:wscale (/ i ss ent eLst)
(setq wgScale (getvar "DIMSCALE"))

(if (setq i -1            ;if this = T
         ss (ssget "_:L"))
   (while            ;Then do this
       (setq ent               
          (ssname ss
            (setq i (1+ i))))
   
   (setq eLst (entget ent))      
   
   (setq ePT (assoc 10 eLst))
   (vl-cmdf "_.scale" ent "" ePT wgScale)
   )

);end if

(princ))
 
我得到这个错误

guitarguy1685 发表于 2022-7-6 12:10:22

看起来我所缺少的只是一个“cdr”
 
(defun c:wscale (/ i ss ent eLst)
(setq wgScale (getvar "DIMSCALE"))

(if (setq i -1            ;if this = T
         ss (ssget "_:L"))
   (while            ;Then do this
       (setq ent               
          (ssname ss
            (setq i (1+ i))))
   
   (setq eLst (entget ent))      
   
   (setq ePT (cdr (assoc 10 eLst)))
   (vl-cmdf "_.scale" ent "" ePT wgScale)
   )

);end if

(princ))
 
我想(assoc…)将返回x,y,z,但它返回(10 x,y,z),这使命令行失败。
 
我将为这个问题添加第二部分。我想键入命令,让LISP选择图形中的所有块,其块名包含单词“PART”。
 
与此同时,我正在四处寻找答案。我想我必须过滤(0。“INSERT”)和(2。”*part“)不要认为我可以在那里使用星号,但你可以看到我的逻辑。

guitarguy1685 发表于 2022-7-6 12:24:37

我知道这是我自己和我之间的对话,但我想可能有人在读这篇文章
 
无论如何,我注意到在块的DXF代码中有x、y和z比例因子。我想我会尝试更改这些值,而不是使用命令行。

Glen Smith 发表于 2022-7-6 12:28:33

我不确定您到底想做什么,但您可以使用快速选择来选择所有块类型,然后修改属性x、y、z比例吗?
 
格伦

Lee Mac 发表于 2022-7-6 12:43:01

例子:
 

(defun c:wscale(/ i ss ent eLst scl)

(and (zerop (setq scl (getvar "DIMSCALE")))
      (setq scl 1.0))

(if (setq i-1 ss (ssget "_:L" '((0 . "INSERT"))))
   (while (setq ent (ssname ss (setq i (1+ i))))
   (setq eLst (entget ent))

   (mapcar
       (function
         (lambda (x)
         (setq eLst (subst (cons x scl)
                           (assoc x eLst) eLst)))) '(41 42 43))

   (entmod eLst)))

(princ))
页: [1]
查看完整版本: 不按命令缩放