cedwards 发表于 2022-7-6 08:45:05

转换CELTSCALE(&L)

大家好,
 
我有一个Lisp程序的要求,这将真正帮助我!
 
我需要将所有对象(当然是直线和样条线)的celtscale转换为celtscale/ltscale。
 
任何帮助都将不胜感激。

Lee Mac 发表于 2022-7-6 08:49:57

我不确定自己是否完全理解,但也许:
 

(defun c:ce/lt ( / ss )
;; © Lee Mac 2010

(if (setq ss (ssget "_X" '((-4 . "<") (48 . 0.0))))
   (
   (lambda ( i / e )
       (while (setq e (ssname ss (setq i (1+ i))))
         (LM:Update
         (LM:SubstDXF 48
             (/ (getvar 'CELTSCALE) (cdr (assoc 48 (entget e)))) (entget e)
         )
         )
       )
   )
   -1
   )
)

(princ)
)

(defun LM:SubstDXF ( code value elist )
(entmod
   (subst
   (cons code value) (assoc code elist) elist
   )
)
)

(defun LM:Update ( elist )
(entupd
   (cdr (assoc -1 elist))
)
)

cedwards 发表于 2022-7-6 08:54:39

我想我要问的是,如何获取(读取值)对象的线型比例(在“特性”选项板中列出的比例)?

Lee Mac 发表于 2022-7-6 08:57:07

也许下面的链接会有所帮助。我想做同样的事情,除了新的线型比例是当前的一个函数。
 
新线型比例=(当前线型比例)(/LTSCALE)
 
http://forums.autodesk.com/t5/AutoCAD-2006/globally-reset-Linetype-Scale-for-all-entities-in-a-drawing/m-p/1410799

cedwards 发表于 2022-7-6 08:58:21

我的最后一篇代码帖子将对象的线型比例设置为其旧线型比例除以图形的ltscale sys var。
 
此更改仅适用于线型比例不等于1的对象。

Lee Mac 发表于 2022-7-6 09:02:41

好的,谢谢,但代码似乎没有任何作用。我设置了所需的ltscale,然后运行lisp,它不会更改线型比例。代码运行时没有错误,但似乎没有改变值。

cedwards 发表于 2022-7-6 09:05:34

可能是没有抓到对象-请尝试上面更新的代码。

cedwards 发表于 2022-7-6 09:09:33

修订后的规范半起作用。它会更改一些对象/线,然后出错。
 
命令:CE/LT
; 错误:错误的参数类型:numberp:nil
 
有什么建议吗?

Lee Mac 发表于 2022-7-6 09:10:52

是的,我认为这可能会发生-因此在原始代码中使用过滤器。。。
 
好的,再试一次

cedwards 发表于 2022-7-6 09:15:37


(defun c:ce/lt ( / ss )
;; © Lee Mac 2010

(if (setq ss (ssget "_X"))
   (
   (lambda ( i / e )
       (while (setq e (ssname ss (setq i (1+ i))))
         (LM:Update
         (LM:SubstDXF 48
             (/ (cdr (assoc 48 (entget e))) (getvar 'ltscale)) (entget e)
         )
         )
       )
   )
   -1
   )
)

(princ)
)

(defun LM:SubstDXF ( code value elist )
(entmod
   (subst
   (cons code value) (assoc code elist) elist
   )
)
)

(defun LM:Update ( elist )
(entupd
   (cdr (assoc -1 elist))
)
)
页: [1] 2
查看完整版本: 转换CELTSCALE(&L)