明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5528|回复: 14

[求助]判断图层是否存在,如果不存在则建立图层的代码

  [复制链接]
发表于 2006-9-24 18:41:00 | 显示全部楼层 |阅读模式
(if (=(tblobjname "LAYER" "-视口") nil)
(progn
(entmake (list
'(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS") ;线型
'(62 . 3) ;颜色
'(70 . 0) ;图层状态
(cons 2 "-视口") ;图层名
)
)
)
)
这是一段判断图层是否存在,如果不存在则建立图层的代码。
那怎么将图层是否打印的控制添加到里面?

发表于 2006-9-26 22:52:00 | 显示全部楼层
建新图层,用command是不是更简单啊?
 楼主| 发表于 2006-9-26 23:01:00 | 显示全部楼层

我想用啊,但是会出现冲突,只要用command,就会与其他程序冲突,不能运行啊!

只有这个不冲突,但是就是不知道怎样控制图层打印

发表于 2006-10-6 14:59:00 | 显示全部楼层
  1. ;;;autolisp方法
  2. (defun getlayerlist ()
  3.   (setvar "cmdecho" 0)
  4.   (setq a (tblnext "layer" t))
  5.   (setq n 1)
  6.   (setq lli (list))
  7.   ;(princ "图层列表:\n")
  8.   (while a
  9.     ;(princ (cdr (nth 1 a)))
  10.     (setq lli (append lli (list (cdr (nth 1 a)))))
  11.     ;(princ "\n")
  12.     (setq n (1+ n))
  13.     (setq a (tblnext "layer"))
  14.    
  15.   )
  16.   ;(princ lli)
  17.   (princ)
  18. )
  19. (princ)
  20. ;;;调用时
  21. (getlayerlist)               
  22. (if (not (member "pdpc" lli))  
  23.    (command "layer" "n" "pdpc" "s" "pdpc" "")
  24.   
  25. )
发表于 2006-10-8 01:33:00 | 显示全部楼层
yfywk发表于2006-9-24 18:41:00回复:(yfywk)判断图层是否存在,如果不存在则建立图层的代码 (if (=(tblobjname \"LAYER\" \"-视口\") nil)(progn(entmake (list'(0 . \"LAYER\")'(100 . \"AcDbSymbolTableRecord\")'(...
图层dxf组码

290

打印标志。如果设置为 0,则不打印此图层

发表于 2006-10-8 10:40:00 | 显示全部楼层
如果要判断好多个图层呢?
发表于 2006-10-8 11:47:00 | 显示全部楼层

那就循环啊

while

发表于 2006-10-8 18:52:00 | 显示全部楼层

不会,楼上可否改后贴出来?

看看我的:

;;;  程序功能:   
;;;  1,判断指定层是否存在,如果不存在则建立并置为当前层,颜色为随层的指定色;
;;;  2,如果当前层不是指定层,且指定层被冻结则解冻指定层并置为当前层,颜色为随层的指定色;
;;;  3,如果当前层是指定层,则将指定层置为当前层,颜色为随层的指定色;
;;;  4,注意: W_Lname为“字符串”型,W_Color为“整数”型,取值1~255.  (_By dwg001)
(Defun ZHL_MLA()
(defun Mla (W_Lname W_Color / W_layer)
  (setq W_layer (tblsearch "layer" W_Lname))
  (if (= nil W_layer)
    (command "_.layer" "m" W_Lname "c" W_Color "" "")
  )
  (if (/= (getvar "clayer") W_Lname)
    (command "_.layer" "t" W_Lname "s" W_Lname "c" W_Color "" "")
  )
  (if (= (getvar "clayer") W_Lname)
    (command "_.layer" "s" W_Lname "c" W_Color "" "")
  )
  (prin1)
)
;;; 如 (mla "ppp" 3)
(mla "1" 1)
(mla "2" 2)
(mla "3" 3)
(mla "4" 4)
(mla "5" 5)
(mla "6" 6)
(mla "8" 8)
(mla "9" 9)

和楼主发的一样功能,但哪个更好些呢?

发表于 2006-10-9 07:52:00 | 显示全部楼层

(defun Mla (W_Lname W_Color / W_layer)
  (setq W_layer (tblsearch "layer" W_Lname))
  (if (= nil W_layer)
    (command "_.layer" "m" W_Lname "c" W_Color "" "")
  )
  (if (/= (getvar "clayer") W_Lname)
    (command "_.layer" "t" W_Lname "s" W_Lname "c" W_Color "" "")
  )
  (if (= (getvar "clayer") W_Lname)
    (command "_.layer" "s" W_Lname "c" W_Color "" "")
  )
  (prin1)
)
;;; 如 (mla "ppp" 3)
(defun c:aa (/ laylist n lay)
  (setq laylist '("1" "2" "3"))  ;图层列表
  (setq n 0)
  (while (setq lay (nth n laylist)) ;如果 lay 不为 nil 则进行循环
    (mla lay 1)    ;创建图层
    (setq n (1+ n))
  )
)

对测试表达式进行求值,如果它不是 nil,则执行循环体中的表达式,重复这个过程,直到测试表达式的求值结果为 nil
(while testexpr [expr...])

while 函数在 testexpr 为 nil 之前不断运行。

参数

testexpr

包含测试条件的表达式。

expr

在 testexpr 为 nil 之前要求值的一个或多个表达式。

返回值

最后的 expr 表达式最新的值。

样例

下列代码调用了 10 次 some-func 函数,其参数 test 的取值从 1 到 10。最后它返回 11,因为这是它最后那个表达式的值:

(setq test 1)
(while (<= test 10)
  (some-func test)
  (setq test (1+ test))

)

发表于 2006-10-11 20:14:00 | 显示全部楼层
楼上,我试了怎么出错的。颜色
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-23 12:06 , Processed in 0.220843 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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