改不能选择 ByLayer 线型的修改线型比例的程序(已解决多谢zhynt大师帮助)
本帖最后由 669423907 于 2011-6-26 18:29 编辑小生愚笨,不会改,请大师们帮帮忙,先谢了。
求改不能选择 ByLayer 线型的修改线型比例的程序
动态修改线型比例
(defun c:bbl(/ ss alts pt gr s1 lt zq newscale)
(prompt "\n 请选择物体: ")
(setq ss (ssget)
alts (getvar "LTSCALE")
pt (getpoint "\n请选择一个点: ")
)
(while (= (car (setq gr (grread nil 5 0))) 5)
(redraw)
(grdraw (cadr gr) pt 1 1)
(setq i -1)
(while (setq s1 (ssname ss (setq i (1+ i))))
(if (setq lt (cdr (assoc 6 (entget s1))))
(progn
(setq zq(cdr (assoc 40 (tblsearch "ltype" lt)))
newscale (/ (distance (cadr gr) pt) zq alts 1.)
)
(vla-put-LinetypeScale (vlax-ename->vla-object s1) newscale)
)
)
)
)
(redraw)
(princ)
)
能否将这个点去除,pt (getpoint "\n请选择一个点: ")
只用选择自动调整。如图所示 本帖最后由 zhynt 于 2011-6-23 02:07 编辑
(defun c:bbl (/ ss alts pt gr s1 lt newscale)
(prompt "\n 请选择物体: ")
(setq ss (ssget)
alts (getvar "LTSCALE")
pt (getpoint "\n请选择一个点: ")
)
(while (= (car (setq gr (grread nil 5 0))) 5)
(redraw)
(grdraw (cadr gr) pt 1 1)
(setq i -1)
(while (setq s1 (ssname ss (setq i (1+ i))))
(if (setq lt (cdr (assoc 6 (entget s1))))
(progn
(setq zq (cdr (assoc 40 (tblsearch "ltype" lt))))
(if (/= zq 0)
(setq newscale (/ (distance (cadr gr) pt) zq alts 1.))
(setq newscale 1)
)
)
(progn
(setq zq
(cdr
(assoc
40
(tblsearch
"ltype"
(cdr
(assoc
6
(tblsearch "layer" (cdr (assoc 8 (entget s1))))
)
)
)
)
)
)
(if (/= zq 0)
(setq newscale (/ (distance (cadr gr) pt) zq alts 1.))
(setq newscale 1)
)
)
)
(vla-put-LinetypeScale (vlax-ename->vla-object s1) newscale)
)
)
(redraw)
(princ)
)
因随层的线型没有组码6,所以原程序将其跳过去了。现在我新加了判断,当随层时,找其所在的图层,通过图层来确定线型。又实线的组码40的值为0,程序将出错(除数为零)所以再加以判断如果为0,将newscale的值置为1 本帖最后由 669423907 于 2011-6-23 11:32 编辑
非常感谢你的热情帮助!
大师,要注意休息吖。 终于完美解决了线型比例问题 很好!解决问题了!感谢
页:
[1]