wudechao 发表于 前天 13:05

天正建筑用命令方式控制天正对象是否保存为代理模式

本帖最后由 wudechao 于 2025-4-17 13:18 编辑

感谢baitang36大师提供用纯lisp实现打印任意尺寸pdfhttp://bbs.mjtd.com/thread-189458-1-1.html和受高飞鸟的powershell用法的启示http://bbs.mjtd.com/forum.php?mod=viewthread&tid=192194&highlight=powershell,在打印的同时如何实现带天正对象的图纸拆分为单个dwg图(我们这边审图需要提供单文件pdf+对应的dwg)转为T3低版本,而且转t3图纸尺寸标注不完美,转换后标注尺寸可能满天飞,同时天正转低版本命令带对话框,无法实现打印同时自动拆分。解决办法就是拆图时候把天正设置参数里天正对象改为代理模式(没有变量控制这个参数,手工在对话框修改),代理模式下文件变的巨大,我测试一个4MB的图纸,改为代理模式后变成18MB,文件巨大带来电脑读写变慢,解决思路:平时画图为非代理模式,打印拆图时候改为代理模式,打印拆图后恢复原来的非代理模式。矛盾出现了:天正参数设置没有变量控制,参数用二进制文件保存至天正目录下sys\config.ini,如何修改?用二进制编辑器搜索config.ini 发现十六进制数值618CFE56625F01为代理,618CFE56625F00为非代理,lisp无法修改二进制文件,受高飞鸟文章启发,那就用powershell,我不懂powershell,在ai帮助下,反复修改3天,居然成功了!给大家分享。三个函数,函数path-tangent-config为天正目录下config.ini,函数xgpz就是修改是否为代理,函数proxy-isno判断原来的设置是否设置为代理模式。天正建筑T20v3`天正建筑T30V1.0测试通过,其它版本没有找到安装文件无法测试。天正建筑2014不知道是不是破解原因,网上的破解无法保存为代理对象。
(defun path-tangent-config (/ path-tangent path-config)
(if (member (strcase "tch_initstart.arx") (mapcar
                        'strcase
                        (arx)
                        )
      );是否是天正建筑
    (progn
      (setq path-tangent (strcat (substr (findfile "tch_initstart.arx") 1 (1+ (vl-string-position 92
                                                (vl-string-right-trim "\\tch_initstart.arx"
                                                            (findfile "tch_initstart.arx")
                                                ) nil t
                                          )
                                    )
               ) "SYS"
             )
      );天正下目录下的sys路径
      (if (wcmatch path-tangent "*2014*")
      (alert "你在使用的天正2014系列,该版本有缺陷,天正对象无法保存为代理对象,拆分的dwg图无法在未安装天正软件的机器上显示,请升级高版本的天正软件。")
      )
      (setq path-config (strcat path-tangent "\\" "config.ini"))
      (if (findfile path-config)
    (setq path path-config)
    (setq path nil)
      )
    )
    (setq path nil)
)
path
)
(defun xgpz (path-config tst / path-tangent path-config wsh mycommand mycommand1 mycommand2-1 mycommand2-2 mycommand3);修改天正建筑代理图像是否保存,config.ini文件,若tst为真,00改01
(vl-load-com)
(setq wsh (vlax-create-object "WScript.Shell"))
(setq mycommand1 (strcat "powershell.exe " "$p=\'" path-config "\'\;$b=::ReadAllBytes($p)\;0..($b.Count-7)|%{if(-join($b[$_..($_+6)]|%{\"$($_.ToString(\'X2\'))\"}) -eq\'618CFE56625F"))
(setq mycommand2-1 (strcat "01\'){$b[$_+6]=0"))
(setq mycommand2-2 (strcat "00\'){$b[$_+6]=1"))
(setq mycommand3 (strcat "}}\;::WriteAllBytes($p,$b)"))
(if tst
    (setq mycommand (strcat mycommand1 mycommand2-2 mycommand3))
    (setq mycommand (strcat mycommand1 mycommand2-1 mycommand3))
)
(vlax-invoke wsh 'run mycommand 0 1)
(while (> (getvar "CMDACTIVE") 0)
    (command pause)
)
(command "TLoadConfig");这句很关键,修改后要加载才生效
(vlax-release-object wsh)
)
(defun proxy-isno (path-config / pscmd resultfile result wsh f)
(vl-load-com)
(setq pscmd (strcat "powershell -command" "(-join(::ReadAllBytes('" path-config
            "')|%{'{0:X2}'-f$_}) -match '618CFE56625F01')| Out-File $env:TEMP\\proxy_result.txt -Encoding Default"
          )
)
(setq wsh (vlax-create-object "wscript.shell"))
(vlax-invoke wsh "run" pscmd 0 1)
(setq resultfile (strcat (getenv "TEMP") "\\proxy_result.txt"))
(while (not (findfile resultfile))
    (while (not (findfile resultfile))
      (command "_.delay" 100)
    )
)
(setq f (open resultfile "r"))
(setq result (read-line f))
(close f)
(vl-file-delete resultfile)
(cond
    ((= result "True")
      (setq tst t)
    )
    ((= result "False")
      (setq tst nil)
    )
    (t
      (princ "\n文件不存在,无法判断是否是代理模式")
    )
)
tst
)

你有种再说一遍 发表于 前天 20:24

用powershell本质上就是.net的函数,
相当于费尽心思去玩C# \(x ω x)/

tranque 发表于 前天 14:57

天正T20v9.0 转的t3格式真的是一言难尽
1.转了t3绘图次序全乱套,原本放在最底层的参照,绑定后,转个t3结果跑最上层了
2.水暖专业给提的t3条件图,全是碎线,一个风机标注,就成了6个独立的小部分
3.带翻转和旋转参数的动态块,再转t3格式后,动态块乱转方向,转 t3前的图纸方向已经不一样了

wudechao 发表于 前天 13:12

本帖最后由 wudechao 于 2025-4-17 17:57 编辑

powershell能修改二进制文件,用powershell做其它修改,比如去教育版,破解文件,应该是可以的。依样画葫芦,天正设置对话框里面的很多参数都可以根据修改前后config.ini文件二进制数值差别进行修改,开发者需要自己修改或提取就可以。

cghdy 发表于 前天 15:34

天正能不用就不用吧,给自己和上下游专业带来不少麻烦。

wudechao 发表于 前天 15:37

cghdy 发表于 2025-4-17 15:34
天正能不用就不用吧,给自己和上下游专业带来不少麻烦。

在中国,建筑图就是天正,天正=建筑图。除非不在建筑行业混,否则避不开天正建筑格式的图。

cghdy 发表于 前天 16:24

wudechao 发表于 2025-4-17 15:37
在中国,建筑图就是天正,天正=建筑图。除非不在建筑行业混,否则避不开天正建筑格式的图。

我看未必吧

wudechao 发表于 前天 17:03

cghdy 发表于 2025-4-17 16:24
我看未必吧

浩辰和中望也是兼容天正格式,也要打开天正格式的图,没有听说天正要兼容浩辰或中望。天正:从来被兼容,还未被超越。
页: [1]
查看完整版本: 天正建筑用命令方式控制天正对象是否保存为代理模式