“重新加载”线型
你好随着注释性比例的出现。(Autocad 2009对我来说是新的,这就是为什么…)我遇到了线型比例的问题。我提出了一个lisp来重新加载线型。我不知道为什么,但我的一些同事每次触摸图纸时都会弄乱线型。是因为注释性缩放吗?
如果查看此代码,它将通过(vl cmdf….)重新加载线型是否可以使用(vl add…)重新加载线型然后“重新加载”线型?试过了,似乎对我不起作用,你可能会注意到我检测“X-ref/Binded/Custom线型”的粗糙方式,有没有更好的建议?还有一个问题。。。如果有外部参照,并且图形是以不同的单位创建的。。不知怎的,图层特性上的线型显示“外部参照文件的名称|虚线”,我尝试过更改它,但总是返回到原始名称?
因此,作为一种快速修复方法,我编写了以下代码
感谢您的帮助。。。。非常感谢。
(defun c:llt () (vl-load-com)
(setq ddwg (vla-get-activedocument (vlax-get-acad-object))
ltyps (vla-get-linetypes ddwg) lt_cnt 3 ndflt_cnt1 0 ndflt_cnt2 0)
(setq lts_var'("MSLTSCALE" "PSLTSCALE" "CELTSCALE" "PLINEGEN")) ; you can change this depending
(foreach var_lt lts_var ; on your prefrences......
(setvar var_lt 1))
(repeat (- (vla-get-count ltyps) 3)
(setq actv_lt (vla-item ltyps lt_cnt)
ltname (vla-get-name actv_lt))
(if(OR ( = (type (vl-string-search "|" ltname1)) 'INT) ;Xref Linetype
( = (type (vl-string-search "$" ltname1)) 'INT) ;Binded or CustomLinetype
( = (type (vl-string-search " " ltname1)) 'INT) ;Xref or Custom Linetype
)(setq ndflt_cnt1 (1+ ndflt_cnt1))
(chk_wdflt))
(setq lt_cnt (1+ lt_cnt))
);repeat
;;;;;;;;;;;;;;;;;;;;;;;;;;; convert to bylayer and ltscale 1
(setq evthng (ssget "x" '((0 . "*LINE,CIRCLE,ARC"))) ;;; idea Lee Mac
cntr_lt 0)
(while (setq tada (ssname evthng cntr_lt))
(vla-put-linetype (vlax-ename->vla-object tada) "Bylayer")
(vla-put-linetypescale (vlax-ename->vla-object tada) 1)
(setq cntr_lt (1+ cntr_lt)))
(princ (strcat "\n" (itoa ndflt_cnt2)" Autocad Linetypes Re-loaded"))(princ)
(princ (strcat "\n" (itoa (if
(minusp (setq dsvl
(- (- (vla-get-count ltyps) 3) ndflt_cnt2))) 0 dsvl)
)" Xref/Bind/Custom Linetype Name Found"))(princ)
)
(defun chk_wdflt (/ dfss chk_lt yesness)
(setq dfss (findfile "acad.lin") yesness 'T)
(setq chk_lt (open dfss "R"))
(while yesness
(setq dstxt (read-line chk_lt))
(if (= dstxt nil)(setq yesness nil)
(progn
(setq tstr_lt (vl-string-search (vla-get-description actv_lt) dstxt))
(if tstr_lt (progn (vl-cmdf "linetype" "load" ltname "acad.lin" "y" "")
(setq yesness nil ndflt_cnt2 (1+ ndflt_cnt2)))) ;prog/if
);progn
);if
);while
(close chk_lt)
)
(prompt
"\n>>>...Re-load Linetpye Loaded. Type LLT to run...<<<"
)
(princ)
谢谢Allan。。。但我的问题是,你会如何使用VL add或VL load。。。。。。而不是通过命令/vl cmdf
(command "_.-linetype" "_load" "*" "acad.lin")
(while (eq 1 (logand 1 (getvar 'cmdactive))) (command ""))
见帖子#1
原油真正地但它有效。。那么,有没有办法不使用command\vl cmdf来实现这一点?
简单地说,你不能。
使用VLA,您可以加载线型定义,但前提是该定义尚不存在。唯一可行的方法是更改现有线型的名称,加载所需的线型,然后将所有具有旧名称线型的内容更改为新线型。虽然这样做可行,但需要付出太多的努力(挖掘块定义等),因此不值得这么做。除非您想脱离LISP,否则命令是您唯一的选择。
出于好奇,为什么对这种用法如此反感?
到目前为止,我从这个论坛学到了什么(顺便说一句,这是一个很好的知识来源,感谢像你这样的人。)在某些情况下,Vlisp函数比良好的Autlisp更容易使用。我不是说它“更好”,我找到了VLISP
直截了当的方法,尤其是当你需要做很多挖掘的时候,真的很吸引人。作为VLISP的新手,我只是想看看它是否可以用更少的内存使用和更少的挖掘来做与Lisp相同的事情。
我想重温我的一些旧代码,并将其转换为VLISP codss,也就是说,如果这样的过程更快,但你们再次向我展示了Lsip真正有多强大(lambda,list manipulation…)
谢谢yopu提供的信息Allan。。
真的从你们身上学到了很多 Look函数_kpblc-linetype-load in post#3
谢谢你VVA。。。。
虽然它确实加载线型,但它不会“重新加载”现有加载的线型。。。。就像alanjit的代码一样,(也许我只是做得不对)
这个话题给了我另一个新的常规的想法。。。
再次感谢VVA
嗨,艾伦,
非常感谢这段代码,它帮助我解决了通过LISP加载线型时遇到的一个棘手的小问题。只是想知道,您之所以使用此代码,是否是因为ACAD将循环_-如果试图加载已加载的线型,则使用LINETYPE命令?这就是我发现的。
再次感谢。
Thank you VVA....
While it does load Linetypes, it doesnt "re-load" the exisitng loaded linetype.... like what alanjit's code does, (maybe i just didint do it right)
Well the topic gave me another idea for a a new routine though...
thanks again VVA
Hi Alan,
Thanks a lot for this code, it has helped me solve a sticky little issue I have been having with loading linetypes via LISP.Just wondering if the reason you have this code is due to the way ACAD will loop the _.-LINETYPE command if it attempts to load a linetype which is already loaded?That is what I was finding.
Thanks again.
页:
[1]