pBe 发表于 2022-7-5 22:47:26

“重新加载”线型

你好
 
随着注释性比例的出现。(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)


asos2000 发表于 2022-7-5 22:57:26

 
谢谢Allan。。。但我的问题是,你会如何使用VL add或VL load。。。。。。而不是通过命令/vl cmdf
(command "_.-linetype" "_load" "*" "acad.lin")
(while (eq 1 (logand 1 (getvar 'cmdactive))) (command ""))
见帖子#1
 
原油真正地但它有效。。那么,有没有办法不使用command\vl cmdf来实现这一点?
 

pBe 发表于 2022-7-5 23:04:54

简单地说,你不能。
使用VLA,您可以加载线型定义,但前提是该定义尚不存在。唯一可行的方法是更改现有线型的名称,加载所需的线型,然后将所有具有旧名称线型的内容更改为新线型。虽然这样做可行,但需要付出太多的努力(挖掘块定义等),因此不值得这么做。除非您想脱离LISP,否则命令是您唯一的选择。
 
出于好奇,为什么对这种用法如此反感?

alanjt 发表于 2022-7-5 23:11:35

 
到目前为止,我从这个论坛学到了什么(顺便说一句,这是一个很好的知识来源,感谢像你这样的人。)在某些情况下,Vlisp函数比良好的Autlisp更容易使用。我不是说它“更好”,我找到了VLISP
直截了当的方法,尤其是当你需要做很多挖掘的时候,真的很吸引人。作为VLISP的新手,我只是想看看它是否可以用更少的内存使用和更少的挖掘来做与Lisp相同的事情。
 
我想重温我的一些旧代码,并将其转换为VLISP codss,也就是说,如果这样的过程更快,但你们再次向我展示了Lsip真正有多强大(lambda,list manipulation…)
 
谢谢yopu提供的信息Allan。。
真的从你们身上学到了很多

pBe 发表于 2022-7-5 23:17:22

Look函数_kpblc-linetype-load in post#3

alanjt 发表于 2022-7-5 23:26:48

 
谢谢你VVA。。。。
虽然它确实加载线型,但它不会“重新加载”现有加载的线型。。。。就像alanjit的代码一样,(也许我只是做得不对)
 
这个话题给了我另一个新的常规的想法。。。
再次感谢VVA

pBe 发表于 2022-7-5 23:30:54

 
嗨,艾伦,
 
非常感谢这段代码,它帮助我解决了通过LISP加载线型时遇到的一个棘手的小问题。只是想知道,您之所以使用此代码,是否是因为ACAD将循环_-如果试图加载已加载的线型,则使用LINETYPE命令?这就是我发现的。
 
再次感谢。

VVA 发表于 2022-7-5 23:40:26

pBe 发表于 2022-7-5 23:46:10

 
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

lamensterms 发表于 2022-7-5 23:52:45

 
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]
查看完整版本: “重新加载”线型