乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 14|回复: 9

[编程交流] “重新加载”线型

[复制链接]
pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 22:47:26 | 显示全部楼层 |阅读模式
你好
 
随着注释性比例的出现。(Autocad 2009对我来说是新的,这就是为什么…)我遇到了线型比例的问题。我提出了一个lisp来重新加载线型。我不知道为什么,但我的一些同事每次触摸图纸时都会弄乱线型。是因为注释性缩放吗?
 
如果查看此代码,它将通过(vl cmdf….)重新加载线型是否可以使用(vl add…)重新加载线型然后“重新加载”线型?试过了,似乎对我不起作用,你可能会注意到我检测“X-ref/Binded/Custom线型”的粗糙方式,有没有更好的建议?还有一个问题。。。如果有外部参照,并且图形是以不同的单位创建的。。不知怎的,图层特性上的线型显示“外部参照文件的名称|虚线”,我尝试过更改它,但总是返回到原始名称?
 
因此,作为一种快速修复方法,我编写了以下代码
感谢您的帮助。。。。非常感谢。
 
  1. (defun c:llt () (vl-load-com)
  2. (setq ddwg (vla-get-activedocument (vlax-get-acad-object))
  3.         ltyps (vla-get-linetypes ddwg) lt_cnt 3 ndflt_cnt1 0 ndflt_cnt2 0)
  4. (setq lts_var  '("MSLTSCALE" "PSLTSCALE" "CELTSCALE" "PLINEGEN")) ; you can change this depending
  5. (foreach var_lt lts_var      ; on your prefrences......
  6.      (setvar var_lt 1))
  7. (repeat (- (vla-get-count ltyps) 3)
  8.    (setq actv_lt (vla-item ltyps lt_cnt)
  9.        ltname (vla-get-name actv_lt))
  10. (if  (OR ( = (type (vl-string-search "|" ltname  1)) 'INT) ;Xref Linetype
  11.    ( = (type (vl-string-search "$" ltname  1)) 'INT) ;Binded or CustomLinetype
  12.    ( = (type (vl-string-search " " ltname  1)) 'INT) ;Xref or Custom Linetype
  13.     )(setq ndflt_cnt1 (1+ ndflt_cnt1))
  14.      (chk_wdflt))
  15.    (setq lt_cnt (1+ lt_cnt))
  16.   );repeat
  17. ;;;;;;;;;;;;;;;;;;;;;;;;;;; convert to bylayer and ltscale 1
  18. (setq evthng (ssget "x" '((0 . "*LINE,CIRCLE,ARC")))   ;;; idea Lee Mac
  19.       cntr_lt 0)
  20. (while (setq tada (ssname evthng cntr_lt))
  21.    (vla-put-linetype (vlax-ename->vla-object tada) "Bylayer")
  22.    (vla-put-linetypescale (vlax-ename->vla-object tada) 1)
  23.      (setq cntr_lt (1+ cntr_lt)))
  24. (princ (strcat "\n" (itoa ndflt_cnt2)  " Autocad Linetypes Re-loaded"))(princ)
  25. (princ (strcat "\n" (itoa (if
  26.        (minusp (setq dsvl   
  27.        (- (- (vla-get-count ltyps) 3) ndflt_cnt2))) 0 dsvl)
  28.        )" Xref/Bind/Custom Linetype Name Found"))(princ)
  29. )
  30. (defun chk_wdflt (/ dfss chk_lt yesness)
  31. (setq dfss (findfile "acad.lin") yesness 'T)
  32. (setq chk_lt (open dfss "R"))
  33. (while yesness  
  34.   (setq dstxt (read-line chk_lt))
  35.    (if (= dstxt nil)(setq yesness nil)
  36.     (progn
  37.      (setq tstr_lt (vl-string-search (vla-get-description actv_lt) dstxt))
  38.       (if tstr_lt (progn (vl-cmdf "linetype" "load" ltname "acad.lin" "y" "")
  39.        (setq yesness nil ndflt_cnt2 (1+ ndflt_cnt2))))   ;prog/if
  40.     );progn
  41.    );if
  42.   );while
  43. (close chk_lt)
  44. )
  45. (prompt
  46. "\n>>>...Re-load Linetpye Loaded. Type LLT to run...<<<"
  47. )
  48. (princ)
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-5 22:57:26 | 显示全部楼层
 
谢谢Allan。。。但我的问题是,你会如何使用VL add或VL load。。。。。。而不是通过命令/vl cmdf
  1. (command "_.-linetype" "_load" "*" "acad.lin")
  2. (while (eq 1 (logand 1 (getvar 'cmdactive))) (command ""))

见帖子#1
 
原油真正地但它有效。。那么,有没有办法不使用command\vl cmdf来实现这一点?
 
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 23:04:54 | 显示全部楼层
简单地说,你不能。
使用VLA,您可以加载线型定义,但前提是该定义尚不存在。唯一可行的方法是更改现有线型的名称,加载所需的线型,然后将所有具有旧名称线型的内容更改为新线型。虽然这样做可行,但需要付出太多的努力(挖掘块定义等),因此不值得这么做。除非您想脱离LISP,否则命令是您唯一的选择。
 
出于好奇,为什么对这种用法如此反感?
234729j7xgjvmfhfalnt97.jpg
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 23:17:22 | 显示全部楼层
Look函数_kpblc-linetype-load in post#3
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 23:26:48 | 显示全部楼层
 
谢谢你VVA。。。。
虽然它确实加载线型,但它不会“重新加载”现有加载的线型。。。。就像alanjit的代码一样,(也许我只是做得不对)
 
这个话题给了我另一个新的常规的想法。。。
再次感谢VVA
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 23:30:54 | 显示全部楼层
 
嗨,艾伦,
 
非常感谢这段代码,它帮助我解决了通过LISP加载线型时遇到的一个棘手的小问题。只是想知道,您之所以使用此代码,是否是因为ACAD将循环_-如果试图加载已加载的线型,则使用LINETYPE命令?这就是我发现的。
 
再次感谢。
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 23:40:26 | 显示全部楼层
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 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
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
394
发表于 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.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 03:24 , Processed in 0.576954 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表