明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2441|回复: 7

[经验] 对【Gu_xl】自动切换图层工具 修改一下

[复制链接]
发表于 2019-4-1 16:36 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2019-4-1 16:44 编辑

如题:源码资源如下:

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=89742&highlight=%CD%BC%B2%E3

修改程序如下:

1:修改  (vl-load-com) 为
(if (null vlax-dump-object) (vl-load-com) );;;将 Visual LISP 扩展功能加载到 AutoLISP



2:修改图层表,颜色

(list (list "*dim*" "PUB_DIM" 3 "Continuous")
     (list "QLEADER" "PUB_DIM" 3 "Continuous")
     (list "TOLERANCE" "PUB_DIM" 3 "Continuous")
     (list "*hatch" "PUB_HATCH" 6 "Continuous")
     (list "EXECUTETOOL" "PUB_HATCH" 6 "Continuous")
     (list "DONUT" "钢筋" 4 "Continuous")
     (list "breakline" "折断线" 4 "Continuous")
     (list "*vports" "PUB_WINDW" 4 "Continuous")
     (list "*text" "PUB_TEXT" 7 "Continuous")
     (list "revcloud" "修订" 2"Continuous")
     (list "table" "表格" 7 "Continuous")
     (list "XREF" "引用" 7 "continuous")
     (list "imageattach" "引用" 7 "continuous")     
    )


3:  (c:AutoLayer)  

    本命令启动源码对话框方式,

4:(c:AutoLayerw)
    本命令,自动加载自动执行,
    在本段代码中,设置删除旧的   AutoLayer.INI,重新新建一个,防止旧文件存在且有缺憾的问题。

对自动图层的期待:

对假如系统中已存在 AutoLayer.INI  文件,为判断其和新目标生成的 AutoLayer.INI  不同,相同则不删,不同则删除重建,希望这段代码有人写出。我没有找到判断2个文件内容相同不相同的代码。


代码如下:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-4-1 23:35 | 显示全部楼层
vl-load-com 函数,执行很快,我这测试了下,repeat 1000000次也就2、3秒,不用判断也可以。
第4点和期待,个人的理解是,强制按照第2点里的配置进行图层设置,不允许自定义配置。如果这样的话,
可以考虑直接使用第2点的list,将配置存储到AutoLayer.INI已经没有意义,干脆取消好了。
按楼主的这样修改,程序的推广性就很差,别说不同单位,就算同一个单位,各人的习惯都不一样总不至于手动修改源码吧。
个人建议,第4点,改为,在加载ini配置时,先检测配置有没有问题,如有问题,就用内置配置覆盖,否则就加载配置,然后如果考虑复用内置配置,可以加个配置重置为内置的功能。

点评

这个INI机制很不好,它文件是放在CAD安装支持路径里,对原CAD是有改动的,且隐藏很深,建议取消,用内建代码即可,对于使用者来说,不用叫他们知道内部发生什么,只管用即可了。  发表于 2019-4-2 07:35
发表于 2019-4-6 22:22 | 显示全部楼层
INI机制适合存储自定义配置。对于使用者来说,确实不用叫他们知道内部发生了什么,但我上面提到了,每个人的习惯不同,就比如我的科室要求的图层名称就是1~6,图元所在图层也有不同的要求,这样的话,如果要用你这个配置,就需要调整配置了,没有INI的话,就需要调整代码了,或者每次程序启动的时候都进行配置。
你提到的INI文件位置问题,有好几个解决办法:
1. 如果有添加自定义支持路径的话(比如你的这个三领外挂,应该也有自定义路径的吧?,没有的话就加一个),可以现在这个自定义支持路径中添加一个默认配置的autolayer.ini,只要不是有特殊指定或者其他路径中也有同名文件,一般情况下,都会使用这个INI文件。
2. 如果不喜欢手动加INI文件,可以考虑在代码中实现特定支持路径中INI文件的创建和使用,比如自定义路径是FolderA,INI文件放在FolderA下的FolderB文件夹中,先在支持路径中找到FolderA的完整路径,然后用(strcat FolderA "//FolderB//a.ini")指定完整的INI文件路径。
3. 再省事点,直接指定某个路径下的INI文件,比如把所有的INI文件都放在E://lsp文件夹下,就可以直接用"E://lsp//a.ini"这样的完整路径了。

INI文件的好处挺多的。比如个别项目有图面的特殊要求,用INI就可以很方便的切换到新配置,重装AutoCAD的时候,只要INI文件在,就可以保证继承配置。另外,在推广给别人用的时候,如果程序有升级,那么对方升级后就需要重新修改配置,用INI的话,除非INI格式有变更,否则就不受升级影响。

 楼主| 发表于 2019-4-14 17:52 | 显示全部楼层
lostbalance 发表于 2019-4-6 22:22
INI机制适合存储自定义配置。对于使用者来说,确实不用叫他们知道内部发生了什么,但我上面提到了,每个人 ...

这其实是没有找到一段代码:那就是【取得加载文件的绝对路径代码】,本坛不少人问了,但是没有解决的办法,如果有,就好办了许多了。比如:文坛问了许多,如何取得加载一段LSP文件的地址?这个问题没有答案。
发表于 2019-4-19 10:12 | 显示全部楼层
尘缘一生 发表于 2019-4-14 17:52
这其实是没有找到一段代码:那就是【取得加载文件的绝对路径代码】,本坛不少人问了,但是没有解决的办法 ...

如果是文件结构比较固定的工具箱的话,可以迂回获取路径信息。
比如工具箱目录如下:
  +xxTools_folder
    +lsp_folder(假设此文件夹在搜素路径中)
    +dwg_folder
    +ini_folder(ini存放路径,不在搜索路径中)
    +...
获取路径方式如下:
1. 获取lsp_folder路径 (wyb-findSupportFolder在我的函数库中有)
    (setq folder1 (wyb-findSupportFolder "lst_folder"))
2. 获取ini_folder路径
    (setq folder2 (strcat (vl-string-right-trim "lst_folder" folder2)) "ini_folder")
3. 获取ini的路径
    (setq ini_path (strcat folder2 "\\" "ini_name.ini"))
如果ini_folder也在搜索路径中就更方便了,第2步都不用。

但如果目录结构不固定的话,文件夹改名或者移动后,就不适用了。
发表于 2019-12-3 15:40 | 显示全部楼层
我的2010加载了,也点自动图层了,怎么没反应呢?
发表于 2024-2-12 14:42 | 显示全部楼层
http://bbs.mjtd.com/thread-70009-1-1.html,大佬,有空研究下这个,进化一下,好久没更新啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 14:17 , Processed in 0.515309 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表