找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3782|回复: 24

[求助] 关于理正“改层文件”命令对长文件名图层的支持问题@qun

[复制链接]
发表于 2014-9-14 20:15:11 | 显示全部楼层 |阅读模式
悬赏20D豆未解决
本帖最后由 gar798 于 2014-9-15 02:17 编辑

最近换了间设计院,入乡随俗需适应其协同设计系统。。。
这里的画图规定统一设定的图层名较长,折腾很久都未能搞定改层
恳请高手指教。

【问题描述】
例如:A_AXIS_MAIN(塔楼轴线).
希望用“改层文件”命令改成“轴线”属性,以便使用理正里的相关工具集命令。同理墙层,窗层等不修改无法编辑。

【版本】
Win7_64位
Autocad2006中文+理正3.5

【尝试方法一】
使用“改层文件”命令,弹出界面中点击"点取层名"-->显示"非法层名!"

【尝试方法二】
用记事本修改..\LiZheng\LART\Lar2006\SYS\Layerdef.dat,复制对应层名替换,并因应长层名和颜色间多加空格以对齐
-->无效,对应门窗轴线墙等命令无法正常使用

【尝试方法三】
建好的模板图das,用图层管理器输出las文件,改成lay文件,用“改层文件”命令中的“加载层文件”输入
-->无效,效果同方法二

【排除原因】
1.中文名支持没问题,短点的都能用方法一解决
2.试用版
3.版本冲突
4.系统及权限

【相关疑问】
1.Layerdef.dat文件的编辑格式
2.如何支持长文件名
3.有没有更方便的方式导入导出图层设置

-----------------------------------------------------------------------------------------------------------------------------------
好不容易记起个ID,发了两贴勉强有20币,敬请原谅,感谢。

该层文件

该层文件

【图片说明】
1.改Layerdef.dat,轴-1 A_AXI(裙房轴线)  251
成功识别使用正常
2.用"点取层名"点取原图里的层名:A_AXIS_MAIN(塔楼轴线)
失败,显示“非法层名!”

(2比1多了六个字符就不行了)

==================补充====================
LispLink提取“改层文件”命令的lsp部分如附件
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:gcwj.lsp 
下载次数:2  文件大小:6.49 KB 
下载权限: 不限 以上  [免费赚D豆]



修改可行的layerdef.dat如下图

layerdef.dat

layerdef.dat

再长的文件名(长度大于需要右移颜色定义的数字),就会导致部分理正命令失效

求解决。。。



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-9-14 20:45:19 | 显示全部楼层
同时换了件马甲?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-14 20:51:38 来自手机 | 显示全部楼层
你是改文件还是改图中层名

点评

图中层名没法改,设计院规定了的 改文件Layerdef.dat,如上所述出错  详情 回复 发表于 2014-9-14 22:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-14 21:10:35 | 显示全部楼层
用"点取层名"点取原图里的层名:A_AXIS_MAIN(塔楼轴线)
失败,显示“非法层名!”


如果你修改LAYERDEF.DAT文件,能识别,而你点理智工具里面的按钮提示非法,说明这个程序里面有什么限制,你需要找到这个工具的LISP,去看看里面的LISP代码。

点评

感谢回复~ 我猜测的原因也是程序限制 只是水平有限,对改lsp之法,愿闻其详 所用的命令是:理正\常用工具\改层文件 对应哪个lsp?  详情 回复 发表于 2014-9-14 22:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-14 22:27:44 | 显示全部楼层
st788796 发表于 2014-9-14 20:51
你是改文件还是改图中层名

图中层名没法改,设计院规定了的
改文件Layerdef.dat,如上所述出错


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-14 22:31:20 | 显示全部楼层
XDSoft 发表于 2014-9-14 21:10
如果你修改LAYERDEF.DAT文件,能识别,而你点理智工具里面的按钮提示非法,说明这个程序里面有什么限制 ...

感谢回复~

我猜测的原因也是程序限制
只是水平有限,对改lsp之法,愿闻其详

所用的命令是:理正\常用工具\改层文件
对应哪个lsp?

点评

打开理正的菜单文件 *.mnu , 搜索命令中文名,找到那行,然后看 后面 调用的 英文命令是什么,记下来, 用EditPlus 等支持全盘搜索的文本编辑器,搜索理正LISP目录下的所有文件,找到带那个英文命令或者函数的文件,  详情 回复 发表于 2014-9-14 23:03
改Layerdef.dat能识别的只是短文件名 长的文件名,改了Layerdef.dat也不能识别  详情 回复 发表于 2014-9-14 22:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-14 22:33:21 | 显示全部楼层
gar798 发表于 2014-9-14 22:31
感谢回复~

我猜测的原因也是程序限制

改Layerdef.dat能识别的只是短文件名
长的文件名,改了Layerdef.dat也不能识别
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-14 22:55:43 | 显示全部楼层
"改层文件"命令 在...\LiZheng\LART\Lar2006\Lisp\下

GONGJU1.lsp   打开乱码
gongju1.dcl     修改无效

头疼ing...继续求助

点评

装个 LISPLINK , 论坛有。 用LISPLINK打开这个LISP,就不是乱码了,可能是一行,你按 CTRL+A 全选,然后代码美化,就变成非常漂亮可读的LISP文件了。然后就然后了...  详情 回复 发表于 2014-9-14 23:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-14 23:03:51 | 显示全部楼层
gar798 发表于 2014-9-14 22:31
感谢回复~

我猜测的原因也是程序限制

打开理正的菜单文件 *.mnu , 搜索命令中文名,找到那行,然后看 后面 调用的 英文命令是什么,记下来, 用EditPlus 等支持全盘搜索的文本编辑器,搜索理正LISP目录下的所有文件,找到带那个英文命令或者函数的文件,就找到那个LISP了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-14 23:05:26 | 显示全部楼层
gar798 发表于 2014-9-14 22:55
"改层文件"命令 在...\LiZheng\LART\Lar2006\Lisp\下

GONGJU1.lsp   打开乱码

装个 LISPLINK , 论坛有。

用LISPLINK打开这个LISP,就不是乱码了,可能是一行,你按 CTRL+A 全选,然后代码美化,就变成非常漂亮可读的LISP文件了。然后就然后了...

点评

感谢指点迷津 相关的lsp见附件 修改试了几次,方法可能不对,还是不行  详情 回复 发表于 2014-9-14 23:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-14 23:55:48 | 显示全部楼层
XDSoft 发表于 2014-9-14 23:05
装个 LISPLINK , 论坛有。

用LISPLINK打开这个LISP,就不是乱码了,可能是一行,你按 CTRL+A 全选, ...

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:gcwj.lsp 
下载次数:1  文件大小:6.49 KB 
下载权限: 不限 以上  [免费赚D豆]



感谢指点迷津{:soso_e142:}
相关的lsp见附件

修改试了几次,方法可能不对,还是不行{:soso_e118:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-14 23:58:07 | 显示全部楼层
(defun c:gcwj (/ load_file saveas_file chg_file addln init_lay init_lay1
                 init_lay2 do_list input_eng col_tile1 do_color do_tfpfx l0l
                 aa bb cc what_next nl wx errmark path pfx nfx la la0 ly_n
                 p_ly_n
              )
  (defun load_file (/ tmp l a)
    (if (setq tmp (getfiled "请选择图层管理文件" path "lay" 0))
      (progn
        (setq l (strlen tmp)
              ly_n ""
              p_ly_n tmp
        )
        (while (and
                 (/= (setq a (substr tmp l 1))
                     "\\"
                 )
                 (/= a "/")
               )
          (setq ly_n (strcat a ly_n)
                l (1- l)
          )
        )
        (if (init_lay p_ly_n)
          (progn
            (#disp_list "lay_list" nl)
            (setq l0l 0)
            (init_lay1 l0l)
            (set_tile "prefix" pfx)
            (set_tile "name" ly_n)
          )
        )
      )
    )
  )
  (defun saveas_file (ld_f / ld_fi wx i a b c)
    (if (and
          ld_f
          (setq ld_fi (open ld_f "w"))
        )
      (progn
        (setq i 0)
        (if (/= "" pfx)
          (write-line (strcat "//// " pfx) ld_fi)
        )
        (if (= 0 nfx)
          (write-line "----" ld_fi)
        )
        (foreach l la
          (setq a (car l)
                b (cadr l)
                c (last l)
                wx (strcat a " " b)
                l (strlen b)
                l (- 16 l)
                i (1+ i)
          )
          (repeat l
            (setq wx (strcat wx " "))
          )
          (if (/= c 0)
            (setq wx (strcat wx (itoa c)))
          )
          (write-line wx ld_fi)
          (if (= i nfx)
            (write-line "----" ld_fi)
          )
        )
        (close ld_fi)
      )
    )
  )
  (defun chg_file (/ na)
    (setq na (strcat path "layerdef.dat"))
    (princ "\n layerdef.dat 已修改!")
    (if (= (strcase ly_n) "LAYERDEF.DAT")
      (saveas_file na)
      (_vk_down_ p_ly_n na)
    )
    (_utohz_)
  )
  (defun addln ()
    (if (= i nfx)
      (setq nl (cons "--------------" nl))
    )
  )
  (defun init_lay (name / i x x0 x1)
    (if (setq la (rd_ly name))
      (progn
        (if (='STR (type (car la)))
          (setq pfx (car la)
                nfx (cadr la)
                la (cddr la)
          )
          (setq pfx ""
                nfx (length la)
          )
        )
        (setq nl nil
              i (length la)
        )
        (addln)
        (foreach l la
          (setq i (1- i)
                x (car l)
                x1 (last l)
                x0 (cond
                     ((> x1 7)
                       (itoa x1)
                     )
                     ((= x1 0)
                       ""
                     )
                     ((nth x1 _color))
                   )
                x (strcat x "\t" (cadr l) "\t" x0)
                nl (cons x nl)
          )
          (addln)
        )
        (setq la (reverse la)
              la0 (cons pfx (cons nfx la))
        )
      )
    )
  )
  (defun init_lay1 (i / tfpfx)
    (set_tile "lay_list" (itoa i))
    (setq tfpfx (< i nfx))
    (mapcar'set' (aa bb cc) (if (= i nfx)
                              '("" ""
                               0
                              )
                              (nth (if tfpfx
                                     i
                                     (1- i)
                                   ) la
                              )
                            )
    )
    (set_tile "dis_chn" aa)
    (set_tile "dis_eng" bb)
    (set_tile "tfpfx" (if tfpfx
                        "1"
                        "0"
                      )
    )
    (col_tile1 cc)
  )
  (defun init_lay2 (/ l1 wx l)
    (setq cc (cond
               ((= "" bb)
                 0
               )
               ((= 0 cc)
                 7
               )
               (cc)
             )
          wx (cond
               ((= cc 0)
                 ""
               )
               ((> cc 7)
                 (itoa cc)
               )
               ((nth cc _color))
             )
          l1 (strcat aa "\t" bb "\t" wx)
          nl (subst
               l1
               (nth l0l nl)
               nl
             )
          l (nth l0l la)
          la (subst
               (list (car l) bb cc)
               l
               la
             )
    )
  )
  (defun do_list ()
    (rs_error)
    (setq l0l (atoi $value))
    (init_lay1 l0l)
  )
  (defun input_pfx (/ wx)
    (rs_error)
    (setq wx $value)
    (if (_is_ln_valid wx)
      (setq pfx (strcase wx))
      (set_tile "error" "  非法前缀!  ")
    )
    (set_tile "prefix" pfx)
  )
  (defun input_eng (/ wx)
    (rs_error)
    (setq wx $value)
    (if (and
          (< (strlen wx) 16)
          (_is_ln_valid wx)
        )
      (progn
        (setq bb (strcase wx))
        (if (setq wx (tblsearch "LAYER" bb))
          (setq cc (cdr (assoc 62 wx)))
        )
        (init_lay2)
        (#disp_list "lay_list" nl)
        (init_lay1 l0l)
      )
      (set_tile "error" "  非法层名!  ")
    )
  )
  (defun col_tile1 (clr)
    (set_tile "d_clr_txt" (cond
                            ((= 0 clr)
                              ""
                            )
                            ((< clr 8)
                              (strcat (itoa clr) " " (nth clr _color))
                            )
                            ((itoa clr))
                          )
    )
    (col_tile "dis_clr" clr)
  )
  (defun do_color (/ clr l1 wx)
    (if (/= "" bb)
      (progn
        (setq clr cc)
        (if (= (get_tile "error") "")
          (if (< 0 (setq temp_color (acad_colordlg clr T))
                 256
              )
            (progn
              (setq clr temp_color)
              (col_tile1 clr)
            )
          )
        )
        (setq cc clr)
        (init_lay2)
        (#disp_list "lay_list" nl)
        (init_lay1 l0l)
      )
    )
  )
  (defun do_tfpfx (/ tfpfx i1 i2 l1 l2)
    (setq tfpfx (= "1" $value))
    (cond
      ((= l0l nfx))
      ((equal tfpfx (> l0l nfx))
        (setq l2 (nth l0l nl)
              nl ($del_it nl l0l)
        )
        (if tfpfx
          (setq i1 (1- l0l)
                l0l nfx
                nfx (1+ nfx)
                i2 l0l
          )
          (setq i1 l0l
                l0l nfx
                nfx (1- nfx)
                i2 nfx
          )
        )
        (setq l1 (nth i1 la)
              la ($del_it la i1)
              la ($add_it la l1 i2)
              nl ($add_it nl l2 l0l)
        )
        (#disp_list "lay_list" nl)
        (set_tile "lay_list" (itoa l0l))
      )
    )
  )
  (setq ly_n "LAYERDEF.DAT"
        path (_getword1_ 2)
        p_ly_n (strcat path ly_n)
  )
  (init_lay p_ly_n)
  (setq what_next 7
        l0l 0
  )
  (while (< 2 what_next)
    (new_dialog "chg_lyf" (_@dcl "gongju1"))
    (#disp_list "lay_list" nl)
    (init_lay1 l0l)
    (if (= errmark 1)
      (set_tile "error" "   非法层名 !  ")
    )
    (set_tile "prefix" pfx)
    (set_tile "name" ly_n)
    (action_tile "lay_list" "(do_list)")
    (action_tile "prefix" "(input_pfx)")
    (action_tile "dis_eng" "(input_eng)")
    (action_tile "eng" "(done_dialog 3)")
    (action_tile "dis_clr" "(do_color)")
    (action_tile "tfpfx" "(do_tfpfx)")
    (action_tile "load" "(load_file)")
    (action_tile "saveas" "(saveas_file(getfiled\"请选择图层管理文件\"path\"lay\"1))")
    (action_tile "help" "(do_help)")
    (setq what_next (start_dialog))
    (cond
      ((= what_next 3)
        (if (setq wx (_hopendwg_ (strcat "\n请拾取与 '" aa
                                         "' 对应图层的图元 <退出>:"
                                 )
                     )
            )
          (progn
            (_calsun2_ (car wx))
            (setq wx (_midp_ 8))
            (if (> (strlen wx) 15)
              (setq errmark 1)
              (progn
                (setq bb wx
                      cc (cdr (assoc 62 (tblsearch "LAYER" bb)))
                )
                (init_lay2)
                (setq errmark 0)
              )
            )
          )
        )
      )
    )
  )
  (if (and
        (not (and
               (equal (cons pfx la) la0)
               (= (strcase ly_n) "LAYERDEF.DAT")
             )
        )
        (= what_next 1)
      )
    (progn
      (chg_file)
      (if (= "" (_soclw0_ (strcat "/墙-" (itoa (_gete_)))))
        (_gete_ 0)
      )
    )
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-15 00:00:19 | 显示全部楼层
恕愚钝{:soso_e149:}

未能找出长文件名图层的出错原因,盼指点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-15 00:07:18 | 显示全部楼层
gar798 发表于 2014-9-15 00:00
恕愚钝

未能找出长文件名图层的出错原因,盼指点。

layer.dat 是文本文件吧,随便用什么软件打开,手动修改一次,一劳永逸,没必要非要在 CAD 下用这个命令

点评

试过手动修改 理正的"改层文件"命令出错 例如 目的是让公司规定的以下图层能使用理正的命令编辑或操作 A_AXIS_MAIN(塔楼轴线)---->在上面画双线墙 A_WALL_BRIK(砌块墙) ----->在此图层上开窗 。。。。 所  详情 回复 发表于 2014-9-15 00:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-9-15 00:17:45 | 显示全部楼层
本帖最后由 gar798 于 2014-9-15 00:19 编辑
st788796 发表于 2014-9-15 00:07
layer.dat 是文本文件吧,随便用什么软件打开,手动修改一次,一劳永逸,没必要非要在 CAD 下用这个命令

试过手动修改Layerdef.dat
理正的相关编辑或操作命令出错
"改层文件"命令也无效

例如
目的是让公司规定的以下图层能使用理正的命令编辑或操作
A_AXIS_MAIN(塔楼轴线)---->在上面画双线墙
A_WALL_BRIK(砌块墙)  ----->在此图层上开窗
。。。。
所以
用到理正的"改层文件"这个命令来定义以上的图层

如有其他方法,请赐教

点评

你可以反过来想, 先把你公司定义的图层改为理正认的, 然后写个工具把这些图层最后再转换回你公司的图层交给其他专业。  详情 回复 发表于 2014-9-15 00:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 05:22 , Processed in 0.511043 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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