明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2333|回复: 10

[提问] 求新建一个图层,并且这个图层颜色都跟已有图层颜色设置不一样

[复制链接]
发表于 2014-12-10 16:54 | 显示全部楼层 |阅读模式
9明经币
1.就是新建一个图层,并且图层颜色都跟已有颜色不一样
2.这个新建图层为当前层

图层名用户输入

最佳答案

发表于 2014-12-10 16:54 | 显示全部楼层
  1. (defun get-layer-colors        (/ color colors layers)
  2.   (setq        layers
  3.          (vla-get-layers
  4.            (vla-get-activedocument (vlax-get-acad-object))
  5.          )
  6.   )

  7.   (vlax-for layer layers
  8.     (setq color (vla-get-color layer))
  9.     (if        (not (member color colors))
  10.       (setq colors (cons color colors))
  11.     )
  12.   )
  13.   colors
  14. )


  15. (defun pick-unique-color (colors / color do)
  16.   (setq        color 1
  17.         do t
  18.   )
  19.   (while do
  20.     (if        (not (member color colors))
  21.       (setq do nil)
  22.       (setq color (1+ color))
  23.     )
  24.   )
  25.   color
  26. )


  27. (defun create-layer (name / color layer layers)
  28.   (setq        layers (vla-get-layers
  29.                  (vla-get-activedocument (vlax-get-acad-object))
  30.                )
  31.         color  (pick-unique-color (get-layer-colors))
  32.   )
  33.   (if (and
  34.         (<= color 255)
  35.         (/= (type (vl-catch-all-apply 'vla-item (list layers name)))
  36.             'vla-object
  37.         )
  38.       )
  39.     (progn
  40.       (setq layer (vla-add layers name))
  41.       (vla-put-color layer color)
  42.       layer
  43.     )
  44.   )
  45. )


  46. (defun c:tt (/ name)
  47.   (setq name (getstring "输入图层名称:"))
  48.   (if (null (create-layer name))
  49.     (princ "图层已存在或无独特颜色,未创建新图层。")
  50.   )
  51.   (princ)
  52. )
回复

使用道具 举报

发表于 2014-12-10 16:56 | 显示全部楼层
这个容易,你先查询已经使用过的颜色

点评

就是跟已有颜色不一样,这个感觉对我太难了  发表于 2014-12-11 01:36

评分

参与人数 1明经币 +1 收起 理由
品茗新秀 + 1 神马都是浮云

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-10 17:34 | 显示全部楼层
自贡黄明儒 发表于 2014-12-10 16:56
这个容易,你先查询已经使用过的颜色

就是程序能检查已使用的颜色,然后增加一个不一样的颜色,如果该颜色不满,就手动改一下
回复

使用道具 举报

 楼主| 发表于 2014-12-11 01:35 | 显示全部楼层
难的是跟已有颜色不一样,搞了半天几搞几来
回复

使用道具 举报

发表于 2014-12-11 15:47 | 显示全部楼层
这个容易,你先查询已经使用过的颜色
回复

使用道具 举报

发表于 2014-12-11 17:21 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-12-11 17:26 编辑

  1. (defun c:tt(/ sll snl la co)
  2.   (Setq sll(TblNext"layer"T))
  3.   (While(SetQ snl(Cons(list(Cdr(Assoc 2 sll))(Cdr(Assoc 62 sll)))snl)sll(TblNext"layer"nil)))
  4.   (setq snl(list(mapcar'car snl)(mapcar'cadr snl))la""co 1)
  5.   (while(and(< co 256)(progn(while(tblsearch"layer"(setq la(getstring(if(<(length(car snl))8)(strcat"\n已有图层名["(apply'strcat(mapcar'(lambda(x)(strcat","x))(reverse(car snl))))"]:")
  6.                                                              (strcat"\n上次图层名["(caar snl)"]:"))))(car snl))(alert(strcat"图层"la"已存在")))(/=""la))la)
  7.     (while(member co(last snl))(setq co(1+ co)))
  8.     (if(< co 257)
  9.       (progn(entmakex(list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 62 co)'(70 . 0)(cons 2 la)))
  10.         (setq snl(mapcar'(lambda(x y)(cons x y))(list la co)snl)))
  11.       (setq la"")))
  12.   )

评分

参与人数 1明经币 +1 收起 理由
品茗新秀 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-11 22:00 | 显示全部楼层
llsheng_73 发表于 2014-12-11 17:21

你好,输入图层名后如何此图即为当前图层,我改了一下,跳不到当前图层
回复

使用道具 举报

 楼主| 发表于 2014-12-11 22:05 | 显示全部楼层
llsheng_73 发表于 2014-12-11 17:21

主要是不能将输入的图层为当前图层
回复

使用道具 举报

 楼主| 发表于 2014-12-11 23:37 | 显示全部楼层
我加了(setvar "clayer"怎么还没用
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 01:54 , Processed in 0.357418 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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