明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1460|回复: 4

[已解答] 我写的替换图层lisp有问题 麻烦各位大师帮忙看一下

[复制链接]
发表于 2015-11-13 09:59:04 | 显示全部楼层 |阅读模式
本帖最后由 wushixlm 于 2015-11-13 17:26 编辑

RT
根据论坛上大师以前的写的lisp和我的目的:读取txt文件,把图层A替换为图层B,并将图层B删掉,写了以下lisp,可是运行有问题,麻烦各位大师帮我看以下。不胜感激!!!
(defun tcth (tucengxin tucengjiu / aaa bbb ccc)
  (setvar "cmdecho" 1)
  (setq aaa (tblsearch "layer" tucengxin))
  (if (= aaa nil)
    (command "-layer" "n" tucengxin "")
  )
  (command "-layer" "s" tucengxin "")
  (setq bbb (ssget "x" '((8 . tucengjiu))))
  (if bbb
    (command "change" bbb "" "p" "la" tucengxin "")
  )
  (setq ccc (tblsearch "layer" tucengjiu))
  (if ccc
    (command "laydel" "n" tucengjiu "" "Y")
  )
  (prin1)
)
(defun c:111 ( / data ff num)
  (setvar "cmdecho" 1)
  (setq ff (open "d:/替换表.txt" "r"))
  (setq data (read-line ff))
  (while data
    (setq num (vl-string-position (ascii ",") data))
    (setq tcjiu (substr data 1 num))
    (setq tcxin (substr data (+ num 2)))
    (tcth tcxin tcjiu)
    (setq data (read-line ff))
  )
)
d:/替换表.txt的内容如下:
S-0-TEMP,S-0-TEXT
C-DOTE,S-0-TEXT
发表于 2015-11-13 11:22:09 | 显示全部楼层
不知道你的txt是什么内容的 ,读取出来是什么。
tcth 里面已经写出了图层名。
替换的话我给你一个不用command调用的方法。

取得旧图层的选择集后:
  1. (if bbb
  2.   (vlax-for bbb
  3.     (vla-get-activeselectionset
  4.       (vla-get-activedocument
  5.         (vlax-get-acad-object)
  6.       )
  7.     )
  8.     (vla-put-Layer bbb "tucengxin")
  9.   )
  10. )
复制代码
 楼主| 发表于 2015-11-13 11:44:44 | 显示全部楼层
bori 发表于 2015-11-13 11:22
不知道你的txt是什么内容的 ,读取出来是什么。
tcth 里面已经写出了图层名。
替换的话我给你一个不用com ...

感谢 我试一下 谢谢哈
发表于 2015-11-14 02:30:23 | 显示全部楼层
本帖最后由 xyp1964 于 2015-11-14 02:32 编辑
  1. (defun c:tt ()
  2.   (defun ChLa (la-new la-old / ss)
  3.     (if (not (tblsearch "layer" la-new))(command "layer" "n" la-new ""))
  4.     (command "layer" "s" la-new "")
  5.     (if(setq ss (ssget "x" (list (cons 8 la-old))))(command "chprop" ss “” "la" la-new ""))
  6.   )
  7.   (setvar "cmdecho" 0)
  8.   (setq lst '(("S-0-TEMP" "S-0-TEXT") ("C-DOTE" "S-0-TEXT")))
  9.   (foreach a lst  (ChLa (car a) (cadr a)))
  10.   (VLA-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))
  11.   (princ)
  12. )
 楼主| 发表于 2015-11-14 09:06:02 | 显示全部楼层
xyp1964 发表于 2015-11-14 02:30

感谢版主的回复,我自己昨天晚上研究了一下,发现时因为获得图层所有对象时 (ssget "x" '((8 . “图层” ))) 而不能是(SETQ A "图层") (ssget "x" '((8 . A))) 但可以用  (SETQ A "图层")(setq ss (ssget "x" (list (cons 8 A))))
(defun tcth (tucengxin tucengjiu / aaa ccc)
  (setvar "cmdecho" 1)
  (setq aaa (tblsearch "layer" tucengxin))
  (if (= aaa nil)
    (command "-layer" "n" tucengxin "")
  )
  (command "-layer" "s" tucengxin "")
  (setq ss (ssget "x" (list (cons 8 tucengjiu))))
  (if SS
    (command "change" SS "" "p" "la" tucengxin "")
  )
  (setq ccc (tblsearch "layer" tucengjiu))
  (if ccc
    (command "laydel" "n" tucengjiu "" "Y")
  )
  (prin1)
)
(defun c:111 ()
  (setvar "cmdecho" 1)
  (setq ff (open "d:/ìæ»»±í.txt" "r"))
  (setq data (read-line ff))
  (while data
    (setq num (vl-string-position (ascii ",") data))
    (setq tcjiu (substr data 1 num))
    (setq tcxin (substr data (+ num 2)))
    (tcth tcxin tcjiu)
    (setq data (read-line ff))
  )
)
这是我最新的 是可以用的了
我再试试版主您的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 06:13 , Processed in 0.182128 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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