本帖最后由 尘缘一生 于 2015-12-14 18:07 编辑
问题提出:
一:工作初始:
我们画图初始坏境,设置了一定量图层:颜色、线型。
二:工作过程产生新实体入层,然而,新实体的颜色、线型,并没有和初始图层完全相符。
三:求这样功能的lisp :
选择一范围内所有实体,判断每个实体的:颜色,线型;假如这样颜色和线型的图层已存在,就落去,否则,就建立这样颜色+线型的图层出来(新层名就用颜色号),并把这个实体改到新层去......;新增加的图层程序自动记录,下一实体判断要比较的图层,多了这一个.......;如此循环.......
四:目的与结果:
程序处理完,保证:颜色和线型相同的实体,存在唯一的该层上。颜色不同不在该层,线型不同也不在该层。
*******************************************************************
我在本论坛找过"按色分层”源码如下,假如如此使用,虽然按颜色分了层,但却把线型搞乱了,因此,需要完善线型问题,连线型要考虑在内一起判断......;改造成“按色、线分层”出来! - (defun C:DDDD (/ *DOC *OBJ *LAY blocks layers)
- (setvar "CMDECHO" 0)
- (vl-load-com)
- (setq *OBJ (vlax-get-acad-object))
- (setq *DOC (vla-get-activedocument *OBJ))
- (setq *LAY (vla-get-layers *DOC)) ;取得层集合
- (table)
- (setq blocks (vla-get-blocks *DOC)) ;取得块集合
- (vlax-for block blocks ;遍历块集合
- (vlax-for n block ;遍历单个块
- (ccb n)
- )
- )
- (setvar "CMDECHO" 1)
- (princ)
- )
- (defun ccb (object / colour laynam laycol)
- (setq colour (itoa (vla-get-color object))) ;取得物体颜色号
- (cond
- ( (or (= colour "256") (= colour "0")) ;如果物体颜色随层或随块
- (setq laynam (vla-get-layer object)) ;取得物体所在层名
- (setq laycol (cdr (assoc laynam layers))) ;取得层颜色
- (setq colour (itoa laycol))
- (ML)
- )
- ( (ML)
- (vla-put-color object 256) ;否则改变物体颜色为随层
- )
- )
- (vla-put-layer object colour) ;对物体改层到颜色号层
- )
- (defun ML (/ layobj)
- (if (not (assoc colour layers)) ;如果颜色号不在图层表中
- (progn
- (setq layers (cons (cons colour laycol) layers))
-
- ;重新构造图层表
- (setq layobj (vla-add *LAY colour ) ) ;创建颜色号图层
-
- (vla-put-color layobj colour)
- ;对颜色号层赋色
-
- )
- )
- )
- (defun table (/ name color Nname)
- (vlax-for n *LAY ;遍历层集合
- (setq name (vla-get-name n)) ;取得层名
- (setq color (vla-get-color n)) ;取得层颜色
- (setq layers (cons (cons name color) layers));获得层名和颜色号表
- (setq Nname (read name))
- (if (= (type Nname) (type 1)) ;如果层名是整数
- (if (= (strlen (itoa Nname)) (strlen name))
- (if (and (> Nname 0) (< Nname 256)) ;並且>0,<256
- (if (/= color Nname) ;如果层颜色不等于层名
- (vla-put-color n Nname) ;则改层颜色为层名
- )
- )
- )
- )
- )
- )
|