尘缘一生 发表于 2019-4-1 16:36:19

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

本帖最后由 尘缘一生 于 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个文件内容相同不相同的代码。


代码如下:




lostbalance 发表于 2019-4-1 23:35:54

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

lostbalance 发表于 2019-4-6 22:22:00

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:56

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

这其实是没有找到一段代码:那就是【取得加载文件的绝对路径代码】,本坛不少人问了,但是没有解决的办法,如果有,就好办了许多了。比如:文坛问了许多,如何取得加载一段LSP文件的地址?这个问题没有答案。

lostbalance 发表于 2019-4-19 10:12:51

尘缘一生 发表于 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步都不用。

但如果目录结构不固定的话,文件夹改名或者移动后,就不适用了。

guankuiwu 发表于 2019-12-3 15:40:01

我的2010加载了,也点自动图层了,怎么没反应呢?

atone 发表于 2024-2-12 14:42:43

http://bbs.mjtd.com/thread-70009-1-1.html,大佬,有空研究下这个,进化一下,好久没更新啦
页: [1]
查看完整版本: 对【Gu_xl】自动切换图层工具 修改一下