找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: eachy

[原创] 图层合并

[复制链接]
发表于 2013-7-17 21:10:45 | 显示全部楼层
我也有此情况,同楼上,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-17 21:30:21 来自手机 | 显示全部楼层
既然有源码了,大家一起捉捉虫,能耐心看完的一定了不起!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6568个

财富等级: 富甲天下

发表于 2013-7-17 21:59:52 | 显示全部楼层
看看是咋用的,谢谢前辈了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-4 18:31:21 | 显示全部楼层
求知若渴呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-8-9 12:41:18 | 显示全部楼层
一直在用这个程序,之前对比过很多个,这个是最彻底的。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-8-15 09:15:49 | 显示全部楼层
终于可以来看这个帖子了,,,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1489个

财富等级: 财源广进

发表于 2013-8-15 19:26:06 | 显示全部楼层

出现这样的错“错误: 输入中含有多余的闭括号” 我找到问题在哪了!看看下面修改。

本帖最后由 flowerson 于 2013-8-15 19:45 编辑
  1. ;by eachy ;flowerson 修改
  2. (vl-load-com)
  3. (if (>= (atof (getvar "acadver")) 16.0)
  4.   (vl-arx-import "acapp.arx")
  5.   (vl-arx-import "acadapp.arx")
  6. )
  7. ;|
  8. 全局变量
  9.     nlyr  新图层
  10.     llyr  转换列表
  11.     name  图层列表
  12.     fillc 新图层颜色
  13.     tf    保留颜色     "1" 保留 "0" 不保留
  14.     tf1   保留线形     "1" 保留 "0" 不保留
  15.     ltf   忽略块内0层  "1" 忽略 "0" 修改
  16. |;
  17. (defun c:Lyrt (/ ea:string_parse      ea:string_unparse
  18.    ea:pross      ea:get-utime  RGBtoOLE_color
  19.    OLEtoRGB_color       RGBtoACI
  20.    ea:getcecolor ea:chglyrcolor
  21.    ea:translyr   ea:chgcolor   ea:fillcolor
  22.    ea:pre        ea:table      getsslyr
  23.    myerr        mknewlyr      ea:clearcset
  24.    thisdrawing   blocks      layers
  25.    name        nullss      olderr
  26.    ltf        nlyr      llyr
  27.    fillc        tf      tf1
  28.    _$ver        _ealyrtr_id   what_next
  29.    oAcad        x  tmp bn
  30.   )
  31.   ;|(if (or (> (atoi (rtos (getvar "cdate") 2 0)) 20041231)
  32.    (< (atoi (rtos (getvar "cdate") 2 0)) 20040906)
  33.       )
  34.     (vla-eval
  35.       (vlax-get-acad-object)
  36.       (strcat
  37. "MsgBox "\nAuthor: Eachy\n\nhttp:\\\\www.xdcad.net""
  38. ", "
  39. "vbExclamation+vbSystemModal"
  40. ", "
  41. ""Layer Merge V2.3 ""
  42.        )
  43.     ) ;_ end eval
  44.   ) ;_ end if|;
  45.   (defun ea:table (s / d r)
  46.     (while (setq d (tblnext s (null d)))
  47.       (setq r (cons (cdr (assoc 2 d)) r))
  48.     )
  49.     (acad_strlsort (reverse r))
  50.   )
  51.   (defun ea:string_parse (str delimiter / post strlst)
  52.     (if str
  53.       (progn
  54. (setq strlst '())
  55. (while (vl-string-search delimiter str)
  56.    (setq post (vl-string-search delimiter str))
  57.    (setq strlst (append strlst (list (substr str 1 post))))
  58.    (setq str (substr str (+ post 2)))
  59. )
  60. (vl-remove "" (append strlst (list str)))
  61.       )
  62.     ) ;_ end if
  63.   ) ;_ end defun ea:string_pase
  64.   (defun ea:string_unparse (lst delimiter / return)
  65.     (setq return "")
  66.     (foreach str lst
  67.       (setq return (strcat return delimiter str))
  68.     )
  69.     (substr return 2)
  70.   )
  71.   ;;一个在状态条显示处理进度的函数
  72.   ;; k 数 l 长度
  73.   (defun Ea:pross (k l)
  74.     (grtext -2
  75.      (strcat "已完成"
  76.       (rtos (/ (* 100.0 k) l)
  77.      2
  78.      0
  79.       )
  80.       "%...."
  81.      )
  82.     )
  83.   )
  84.   (defun ea:get-utime ()
  85.     (* 86400 (getvar "tdusrtimer"))
  86.   )
  87.   ;; Convert a list of RGB to TrueColor
  88.   ;; (RGBtoOLE_color '(118 118 118))
  89.   (defun RGBtoOLE_color (RGB-codes / r g b)
  90.     (setq r (lsh (car RGB-codes) 16))
  91.     (setq g (lsh (cadr RGB-codes) 8))
  92.     (setq b (caddr RGB-codes))
  93.     (+ (+ r g) b)
  94.   )
  95.   ;;Truecolor -> rgb
  96.   (defun OLEtoRGB_color (OLE_color / r g b)
  97.     (setq r (lsh OLE_color -16))
  98.     (setq g (lsh (lsh OLE_color 16) -24))
  99.     (setq b (lsh (lsh OLE_color 24) -24))
  100.     (strcat "RGB:"
  101.      (vl-princ-to-string r)
  102.      ","
  103.      (vl-princ-to-string g)
  104.      ","
  105.      (vl-princ-to-string b) ;(list r g b))
  106.     )
  107.   )
  108.   ;;
  109.   (defun RGBtoACI (RGB-codes / colorobj)
  110.     (setq
  111.       ColorObj (vla-GetInterfaceObject oAcad "AutoCAD.AcCmColor.16")
  112.     )
  113.     (vlax-invoke
  114.       ColorObj
  115.       'setRGB
  116.       (car RGB-codes)
  117.       (cadr RGB-codes)
  118.       (caddr RGB-codes)
  119.     )
  120.     (vlax-get-property ColorObj 'ColorIndex)
  121.   )
  122.   (defun ea:Clearcset (/ cset)
  123.     (if (not (vl-catch-all-error-p
  124.         (setq cset
  125.         (vl-catch-all-apply
  126.    'vla-item
  127.    (list
  128.      (vla-get-selectionsets thisdrawing)
  129.      "CURRENT"
  130.    )
  131.         )
  132.         )
  133.       )
  134. )
  135.       (vla-delete cset)
  136.     )
  137.     (princ)
  138.   )
  139.   ;;**************************************************************************
  140.   ;;转换主程序
  141.   (defun ea:translyr (/ ea:chg_layer_color_ltyp_0     ea:chgattblk
  142.    ea:chg_ssget_blockdef
  143.    ea:chg_not_ssget_blockdef     llyrc
  144.    lt        t0       nl
  145.    filter        cset       l
  146.    n        s       sl
  147.    t1        blst       ll
  148.    lt        x       nllyr
  149.    0colorobj      0_in       e0 all_0 nn tmp
  150.          )
  151.     ;;修改实体  mark 0 层实体块内/非块内标志, 如果 0 不在llyr中,块内 0 层仅涉及颜色
  152.     (defun ea:chg_layer_color_ltyp_0 (obj mark / alyr cl colobj olt)
  153.       ;;处理块内 object 及属性
  154.       (if (/= (cdr (assoc
  155.        0
  156.        (entget
  157.          (vlax-vla-object->ename
  158.     obj
  159.          )
  160.        )
  161.      )
  162.        )
  163.        "ACAD_PROXY_ENTITY"
  164.    ) ;_ 排除代理实体
  165. (progn
  166.    (setq alyr (vla-get-layer obj))
  167.    ;;保存实体原始特性
  168.    (if _$ver
  169.      (progn
  170.        (setq colobj (vla-get-truecolor obj)
  171.       cl    (vla-get-colorindex colobj )
  172.        )
  173.        (if (= cl 256) ;_ bylayer
  174.   (setq colobj (cdr (assoc alyr llyrc)))
  175.        )
  176.      ) ;_ 2004/2005 特性
  177.      (if (= (setq cl (vla-get-color obj )) 256)
  178.        (setq cl (cdr (assoc alyr llyrc)))
  179.      )
  180.    )
  181.    ;;修改图层
  182.    (if (and (/= alyr nlyr)
  183.      (not (and mark (= alyr "0") (= ltf "1")))
  184.        ) ;_ 只有忽略块内 0 时不改图层
  185.      (vla-put-layer obj  nlyr)
  186.    ) ;_ end if
  187.    ;;恢复颜色
  188.    (if (= tf "1") ;_ 保留
  189.      (cond
  190.        ((and mark
  191.       (= alyr "0") ;_ 0 层实体
  192.       (= cl 256) ;_ bylayer
  193.         )
  194.         (if _$ver
  195.    (progn
  196.      (vla-put-colorindex colobj  acByblock) ;_ 只有块内实体才需要改
  197.      (vla-put-truecolor obj ' colobj)
  198.    )
  199.    (vla-put-color obj  0)
  200.         ) ;_ byblock
  201.        )
  202.        ((and (/= alyr nlyr) (= cl 256)) ;_ bylayer 非0层实体
  203.         (if _$ver
  204.    ;;取图层颜色
  205.    (vla-put-truecolor obj  colobj)
  206.    (vla-put-color obj cl)
  207.         ) ;_ end if
  208.        )
  209.        (t)
  210.      ) ;_ end cond
  211.      ;;不保留颜色
  212.      (if (and _$ver
  213.        (/= cl 256)
  214.   )
  215.        (progn
  216.   (vla-put-colorindex colobj 256);_ bylayer
  217.   (vla-put-truecolor obj  colobj)
  218.        )
  219.        (vla-put-color obj  256)
  220.      )
  221.    ) ;_end if
  222.    ;;不保留线形
  223.    (if (= tf1 "1")
  224.      (if (and (= (setq olt (vla-get-linetype obj ))
  225.    "BYLAYER"
  226.        )
  227.        (/= olt "BYBLOCK")
  228.        (vlax-property-available-p obj 'linetype t)
  229.   )
  230.        (vlax-put-property obj 'linetype (cdr (assoc alyr lt)))
  231.      )
  232.      (if (and (/= (vla-get-linetype obj ) "BYLAYER")
  233.        (vlax-property-available-p obj 'linetype t)
  234.   )
  235.        (vla-put-linetype obj ' "BYLAYER")
  236.      )
  237.    ) ;_ end if
  238. ) ;_ end progn
  239.       ) ;_ end progn (if)
  240.     ) ;_ end defun ea:chg_color_ltyp_0
  241.     ;;修改属性块的属性实体及SEQEND, 属性只能是最外层, mark 块内/非块内标志
  242.     (defun ea:ChgAttBlk (blk mark / seqent attlst)
  243.       (setq attlst (vlax-safearray->list
  244.        (vlax-variant-value (vla-getattributes blk))
  245.      )
  246.       )
  247.       (mapcar '(lambda (x)
  248.    (if (vl-position (vla-get-layer x ) llyr)
  249.      (ea:chg_layer_color_ltyp_0 x mark)
  250.    )
  251.         )
  252.        attlst
  253.       )
  254.       (if (vl-position
  255.      (vlax-get-property
  256.        (setq
  257.   seqent (vlax-ename->vla-object
  258.     (entnext
  259.       (vlax-vla-object->ename (last attlst))
  260.     )
  261.          )
  262.        )
  263.        'layer
  264.      )
  265.      llyr
  266.    )
  267. (vlax-put-property seqent 'layer nlyr)
  268.       ) ;_ 修改 SEQEND 实体
  269.       (if (and (= tf1 "0")
  270.         (/= (vla-get-linetype seqent ) "BYLAYER")
  271.    )
  272. (vla-put-linetype seqent  "BYLAYER")
  273.       )
  274.     ) ;_end defun ea:chgattblk
  275.     ;;**************************************************************************************
  276.     ;;主程序
  277.     (if (and (/= llyr "") (/= nlyr ""))
  278.       (progn
  279. (if (not blocks)
  280.    (setq blocks (vla-get-blocks thisdrawing ))
  281. )
  282. (if (not layers)
  283.    (setq layers (vla-get-layers thisdrawing ))
  284. )
  285. (setq t0 (ea:get-utime))
  286. (if (not (tblsearch "layer" nlyr))
  287.    (vla-add layers nlyr)
  288. )
  289. ;;(vla-startundomark thisdrawing)
  290. (vlax-map-collection
  291.    layers
  292.    '(lambda (x) (vla-put-lock x  :vlax-false))
  293. )
  294. ;;有一种颜色无法保留
  295. (setq nl     (mapcar 'atoi (ea:string_parse llyr " "))
  296.        filter (ea:string_unparse
  297.          (setq llyr (mapcar '(lambda (x) (nth x name)) nl))
  298.          ","
  299.        )
  300. ) ;_end setq
  301. (if (not (vl-position "0" llyr))
  302.    (setq nllyr (append llyr '("0")))
  303.    (setq nllyr llyr)
  304. )
  305. (setq l (vla-get-count blocks ))
  306. (if (= tf "1") ;_ 保留颜色时提取对应的颜色列表
  307.    (setq llyrc
  308.    (mapcar
  309.      '(lambda (x / col mod bkname)
  310.         (if _$ver
  311.    (cons x (vla-get-truecolor (vla-item layers x) ))   
  312.    (cons x (cdr (assoc 62 (tblsearch "layer" x))))
  313.         ) ;_ end if
  314.       ) ;_ end lambda
  315.      (if (not (vl-position nlyr nllyr))
  316.        (append (list nlyr) nllyr)
  317.        nllyr
  318.      )
  319.    ) ;_end mapcar
  320.    ) ;_ end setq
  321. ) ;_ end if
  322. (if (= tf1 "1")
  323.    (setq lt
  324.    (mapcar '(lambda (x)
  325.        (cons x (cdr (assoc 6 (tblsearch "layer" x))))
  326.      )
  327.     (if (not (vl-position nlyr nllyr))
  328.       (append (list nlyr) nllyr)
  329.       nllyr
  330.     )
  331.    )
  332.    )
  333. )
  334. ;;处理实体
  335. (ea:clearcset)
  336. (if (ssget "x"
  337.      (list '(-4 . "<or")
  338.     '(66 . 1)
  339.     '(-4 . "<and")
  340.     (cons 8 filter)
  341.     '(-4 . "<not")
  342.     '(0 . "ACAD_PROXY_ENTITY")
  343.     '(-4 . "not>")
  344.     '(-4 . "and>")
  345.     '(-4 . "or>")
  346.      )
  347.      ) ;_ end ssget
  348.    (progn
  349.      (setq l (+ l
  350.          (vlax-get-property
  351.     (setq cset (vla-get-activeselectionset
  352.           thisdrawing
  353.         )
  354.     )
  355.     'count
  356.          )
  357.       )
  358.     n 1
  359.      )
  360.      (vlax-map-collection
  361.        cset
  362.        '(lambda (x / bbn)
  363.    (Ea:pross n l)
  364.    (cond
  365.      ((= (vla-get-objectname x ) "AcDbBlockReference")
  366.       (if (vl-position (vla-get-layer x) llyr)
  367.         (progn
  368.    (ea:chg_layer_color_ltyp_0 x nil)   
  369.    (if (not blst)
  370.      (setq blst
  371.      (list (setq
  372.       bbn (vla-get-name x )
  373.            )
  374.      )
  375.      )
  376.      (if (not (vl-position
  377.          (setq
  378.            bbn (vla-get-name x)
  379.          )
  380.          blst
  381.        )
  382.          )
  383.        (setq blst (append blst (list bbn)))
  384.      )
  385.    ) ;_ 只记录了最外层块
  386.         )
  387.       )
  388.       (if (= (vla-get-hasattributes  x) :vlax-true)
  389.         (ea:chgattblk x nil)
  390.       )
  391.      )
  392.      (t (ea:chg_layer_color_ltyp_0 x nil))
  393.    )
  394.    (setq n (1+ n))
  395.         )
  396.      )
  397.    ) ;_ while
  398. ) ;_ end progn
  399. ;;修改图块定义, 保留颜色仅涉及 块内 Bylayer 0 层是否改为 acByblock
  400. (vlax-map-collection
  401.    (vlax-get-property thisdrawing 'blocks)
  402.    '(lambda (i / bn e tmp)
  403.       (if
  404.         (and
  405.    (setq bn (strcase (vlax-get-property i 'name)))
  406.    (not (wcmatch bn "`**_SPAC*"))
  407.    (/= (vla-get-count i) 0)
  408.         )
  409.   ;;(vlax-map-collection
  410.   (if (vl-position bn blst);_ in ssget block
  411.     (vlax-map-collection
  412.       i
  413.       '(lambda (e / etyp lay bbn)
  414.          (setq etyp (vla-get-objectname e)
  415.         lay  (vla-get-layer e)
  416.          )
  417.          (cond
  418.     ((and (wcmatch etyp "*Block*")
  419.           (not (vl-position
  420.           (strcase (vla-get-name e))
  421.           blst
  422.         )
  423.           )
  424.           (vl-position lay llyr)
  425.      )
  426.      (if (not 0_in)
  427.        (setq 0_in (list (vla-get-name e)))
  428.        (if (not (vl-position
  429.            (setq bbn (vla-get-name e))
  430.            0_in
  431.          )
  432.     )
  433.          (setq 0_in (append (list bbn) 0_in))
  434.        )
  435.      )
  436.      (ea:chg_layer_color_ltyp_0 e t)
  437.      (if (= (vlax-get-property e 'hasattributes)
  438.      :vlax-true
  439.          )
  440.        (ea:chgattblk e t)
  441.      )
  442.     )
  443.     ((vl-position lay llyr)
  444.      (ea:chg_layer_color_ltyp_0 e t)
  445.     )
  446.     (t)
  447.          )
  448.        )
  449.     ) ;_ end vlax-map-collection
  450.     (vlax-map-collection ;_ not in ssget 但可能在 blst 引用内(0_in)
  451.       i
  452.       '(lambda (e / etyp lay)
  453.          (setq etyp (vla-get-objectname e)
  454.         lay  (vla-get-layer e)
  455.          )
  456.          (cond
  457.     ((vl-position lay llyr)
  458.      (cond
  459.        ((wcmatch etyp "*Block*")
  460.         (ea:chg_layer_color_ltyp_0 e t)
  461.         (if (not (vl-position
  462.      (strcase (vla-get-name e))
  463.      blst
  464.           )
  465.      )
  466.           (if (not 0_in)
  467.      (setq 0_in (list (vla-get-name e)))
  468.      (if
  469.        (not (vl-position
  470.        (setq bbn (vla-get-name e))
  471.        0_in
  472.      )
  473.        )
  474.         (setq
  475.           0_in (append (list bbn) 0_in)
  476.         )
  477.      )
  478.           )
  479.         )
  480.         (if
  481.           (= (vlax-get-property e 'hasattributes)
  482.       :vlax-true
  483.           )
  484.     (ea:chgattblk e t)
  485.         )
  486.        )
  487.        ((/= lay "0")
  488.         (ea:chg_layer_color_ltyp_0 e t)
  489.        )
  490.        (t)
  491.      )
  492.     )
  493.     ((and (= lay "0") ;_ 仅保留 0 层实体
  494.           (not (vl-position lay llyr))
  495.      )
  496.       (if (not 0_in)
  497.         (setq 0_in (list bn))
  498.         (if (not (vl-position bn 0_in))
  499.           (setq
  500.      0_in (append (list bn) 0_in)
  501.           )
  502.         )
  503.       )
  504.       (setq nn  (read bn)
  505.      tmp (eval nn)
  506.       )
  507.       (if (not tmp)
  508.         (set nn (list e))
  509.         (set nn (cons e tmp))
  510.       )
  511.     ) ;_ end if
  512.     (t)
  513.          );_ end if
  514.        );_ end lambda
  515.     ) ;_ end vlax-map-collection
  516.   ) ;_ end if
  517.       ) ;_ end if
  518.     ) ;_ end lambda
  519. ) ;_ 结束处理块定义
  520. ;;处理被非选择图块且被引用并在 llyr 图层之块定义内的 0 实体
  521. (if 0_in
  522.    (progn
  523.      (setq 0colorobj (vla-get-truecolor (vla-item layers"0")))
  524.      (vla-put-colorindex 0colorobj acByblock)
  525.      (mapcar
  526.        '(lambda (x / 0lst)
  527.    (if (not (setq 0lst (eval (read x))))
  528.      (mapcar '(lambda (e0)
  529.          (if _$ver
  530.     (vla-put-truecolor e0 0colorobj)
  531.     (vla-put-color e0 0)
  532.          )
  533.        )
  534.       olst
  535.      )
  536.    )
  537.         )
  538.        0_in
  539.      )
  540.    )
  541. )
  542. (setvar "clayer" "0")
  543. (vla-purgeall thisdrawing)
  544. ;;更新块引用
  545. (if (setq s (ssget "x" (list (cons 8 nlyr) '(0 . "INSERT"))))
  546.    (progn
  547.      (setq sl (sslength s))
  548.      (while (> sl 0)
  549.        (entupd (ssname s (setq sl (1- sl))))
  550.      )
  551.    ) ;_ end progn
  552. ) ;_ end if
  553. ;;(vla-endundomark thisdrawing)
  554. (setq llyr   nil
  555.        name   (ea:table "layer")
  556.        blocks (vlax-get-property thisdrawing 'blocks)
  557.        layers (vlax-get-property thisdrawing 'layers)
  558. )
  559. (if fillc
  560.    (progn
  561.      (setq ll (entget (tblobjname "layer" nlyr))
  562.     ll (vl-remove-if
  563.          '(lambda (x)
  564.      (vl-position (car x) '(62 420 430)))
  565.          ll
  566.        )
  567.      )
  568.      (entmod (append ll fillc))
  569.    )
  570. )
  571. (if t0
  572.    (progn
  573.      (setq t1 (ea:get-utime))
  574.      (princ
  575.        (strcat "\n成功转换至 " nlyr " 图层,  耗时(secs): ")
  576.      )
  577.      (princ (- t1 t0))
  578.    )
  579. )
  580. (if all_0 (mapcar '(lambda (x) (set x nil)) all_0))
  581.       ) ;_ end progn
  582.     ) ;_end if
  583.   ) ;_ end dufun ea:translyr
  584.   ;;预览
  585.   (defun ea:pre (/ nl layers str)
  586.     (if (and (/= llyr nil) (/= llyr ""))
  587.       (progn
  588. (vla-startundomark thisdrawing)
  589. (setq nl     (mapcar 'atoi (ea:string_parse llyr " "))
  590.        nl     (mapcar '(lambda (x) (nth x name)) nl)
  591. )
  592. (vlax-map-collection
  593.    (vlax-get-property thisdrawing 'layers)
  594.    '(lambda (l)
  595.       (if (vl-position (vlax-get-property l 'name) nl)
  596.         (progn
  597.    (if (= (vlax-get-property l 'layeron) :vlax-false)
  598.      (vlax-put-property  l 'layeron :vlax-true)
  599.    )
  600.    (if (= (vlax-get-property l 'freeze) :vlax-true)
  601.      (vlax-put-property l 'freeze :vlax-false)
  602.    )
  603.         )
  604.         (vlax-put-property l 'layeron :vlax-false)
  605.       )
  606.     )
  607. )
  608. (vla-endundomark thisdrawing)
  609. (setq str (getstring "\n回车退出...."))
  610. (vl-cmdf ".u")
  611.       )
  612.     ) ;_end if
  613.     (princ)
  614.   ) ;_ end defun  ea:per
  615.   ;;选择合并实体, 支持嵌套在块内图层?
  616.   (defun getssLyr (/ ss ssl lyr slyr slst)
  617.     (princ "\n选择要合并图层实体<退出>...")
  618.     (if (setq ss (ssget))
  619.       (progn
  620. (setq ssl (sslength ss))
  621. (while (> ssl 0)
  622.    (setq
  623.      lyr
  624.       (cdr (assoc 8 (entget (ssname ss (setq ssl (1- ssl))))))
  625.    )
  626.    (if slyr
  627.      (if (not (vl-position lyr slyr))
  628.        (setq slyr (cons lyr slyr))
  629.      )
  630.      (setq slyr (list lyr))
  631.    )
  632. ) ;_ end while
  633. (setq slst (mapcar '(lambda (l) (vl-position l name))
  634.       slyr
  635.      )
  636. )
  637. (if llyr
  638.    (setq slst
  639.    (append slst (mapcar 'atoi (ea:string_parse llyr " ")))
  640.    )
  641. )
  642. (setq llyr (ea:string_unparse
  643.        (mapcar 'vl-princ-to-string
  644.         (vl-sort slst '<)
  645.        )
  646.        " "
  647.      )
  648. )
  649.       ) ;_ end progn
  650.     ) ;_ end if
  651.   ) ;_ end dufun
  652.   ;;获取当前颜色 l 层
  653.   (defun ea:getcecolor (l / color el inc tc dc le)
  654.     (if (not l)
  655.       (progn
  656. (setq color (getvar "cecolor"))
  657. (cond
  658.    ((= (type (read color)) 'INT);_ ACI
  659.     (list (cons 62 (read color)))
  660.    )
  661.    ((wcmatch color "RGB:*");_ truecolor
  662.     (setq inc
  663.     (RGBtoACI
  664.       (setq
  665.         tc
  666.          (mapcar
  667.     'atoi
  668.     (ea:string_parse (vl-string-trim "RGB:" color) ",")
  669.          )
  670.       )
  671.     )
  672.     )
  673.     (list (cons 62 inc) (cons 420 (RGBtoOLE_color tc)))
  674.    )
  675.    ((= color "BYLAYER")
  676.     (setq el  (entget (tblobjname "layer" (getvar "clayer")))
  677.    inc (assoc 62 el)
  678.    tc  (assoc 420 el)
  679.    dc  (assoc 430 el)
  680.     )
  681.     (cond
  682.       (dc (list inc tc dc))
  683.       (tc (list inc tc))
  684.       (t (list inc))
  685.     )
  686.    )
  687.    ((= color "BYBLOCK")
  688.     (setq color '(62 . 7))
  689.    )
  690. );_ end cond
  691.       );_ end progn
  692.       (if (setq le (tblobjname "layer" l))
  693. (progn
  694.    (setq el  (entget le)
  695.   inc (assoc 62 el)
  696.   tc  (assoc 420 el)
  697.   dc  (assoc 430 el)
  698.    )
  699.    (cond
  700.      (dc (list inc tc dc))
  701.      (tc (list inc tc))
  702.      (t (list inc))
  703.    )
  704. )
  705. (ea:getcecolor nil)
  706.       )
  707.     )
  708.   ) ;_ end defun ea:getcecolor
  709.   ;;填充默认颜色
  710.   (defun ea:fillcolor (/ cc width height cl)
  711.     (cond
  712.       (fillc    ;acad_colordlg
  713.        (setq cc (abs (cdar fillc)))
  714.       )
  715.       (nlyr
  716.        (setq cc (abs (cdar (ea:getcecolor nlyr))))
  717.       )
  718.       (t
  719.        (setq cc (abs (cdar (ea:getcecolor nil))))
  720.       )
  721.     )
  722.     (setq width  (dimx_tile "col")
  723.    height (dimy_tile "col")
  724.     )
  725.     (start_image "col")
  726.     (fill_image 0 0 width height cc) ;1 = AutoCAD red.
  727.     (end_image)
  728.   ) ;_ end defun
  729.   ;;修改颜色按钮
  730.   (defun ea:chgcolor (/ c l)
  731.     (setq c (ea:getcecolor nlyr))
  732.     (setq fillc (if _$ver
  733.     (cond
  734.       ((= (setq l (length c)) 1);_ aci
  735.        (acad_truecolordlg (cdar c))
  736.       )
  737.       ((= l 2);_ truecolor
  738.        (acad_truecolordlg (cadr c))
  739.       )
  740.       (t (acad_truecolordlg (last c)));_ dict
  741.     )
  742.     (acad_colordlg (car c))
  743.   )
  744.     ) ;_ end setq
  745.   ) ;_ end defun
  746.   (defun myerr (msg /)
  747.     (if (or (/= msg "*函数已取消*")
  748.      (= msg "*函数已取消*")
  749. )
  750.       (princ "\n*取消*")
  751.     )
  752.     (if 0_in
  753.       (mapcar '(lambda (x) (set (read x) nil)) 0_in)
  754.     )
  755.     (setq 0_in nil)
  756.     (vla-endundomark thisdrawing)
  757.     (setq *error* olderr)
  758.     (princ)
  759.   ) ;_end deufn
  760.   ;;***********************************************************
  761.   ;;主程序
  762.   (setq oAcad     (vlax-get-acad-object)
  763. thisdrawing (vlax-get-property oAcad 'activedocument)
  764. _$ver     (> (atof (getvar "acadver")) 16.)
  765. olderr     *error*
  766. *error*     myerr
  767.   )
  768.   (vla-startundomark thisdrawing)
  769.   (if (setq nullss (ssget "x" '((0 . "*text") (1 . ""))))
  770.     (vl-cmdf ".erase" nullss "")
  771.   )
  772.   ;(vla-purgeall thisdrawing)
  773.   (if (not _ealyrtr_id)
  774.     (setq _ealyrtr_id (load_dialog "lyrtr.dcl"))
  775.   )
  776.   (setq what_next 2)
  777.   (while (>= what_next 2)
  778.     (if (not name)
  779.       (setq name (ea:table "layer"))
  780.     )
  781.     (if (not (new_dialog "ea_lyrtrans" _ealyrtr_id))
  782.       (exit)
  783.     )
  784.     (start_list "what")
  785.     (mapcar 'add_list name)
  786.     (end_list)
  787.     (start_list "Sel")
  788.     (mapcar 'add_list name)
  789.     (end_list)
  790.     (if llyr
  791.       (set_tile "what" llyr)
  792.     )
  793.     (if (and (/= nlyr "") nlyr)
  794.       (set_tile "Nlyr" nlyr)
  795.     )
  796.     (ea:fillcolor)
  797.     (if tf
  798.       (set_tile "color" tf)
  799.     )
  800.     (if tf1
  801.       (set_tile "ltyp" tf1)
  802.     )
  803.     (action_tile
  804.       "Trans"
  805.       (strcat
  806. "(princ "\n请稍候,处理进行中.....")"
  807. "(setq nlyr (get_tile "Nlyr"))"
  808. "(setq llyr (get_tile "what"))"
  809. "(setq tf (get_tile "color"))"
  810. "(setq tf1 (get_tile "ltyp"))"
  811. "(setq ltf (get_tile "lay"))"
  812. "(done_dialog 4)"
  813.        )
  814.     )
  815.     (action_tile "accept" "(done_dialog 1)")
  816.     (action_tile "lay" "(setq ltf $value)")
  817.     (action_tile "Nlyr" "(setq nlyr $value)")
  818.     (action_tile "color" "(setq tf $value)")
  819.     (action_tile "ltyp" "(setq tf1 $value)")
  820.     (action_tile
  821.       "col"
  822.       "(setq nlyr (get_tile "Nlyr"))(ea:chgcolor)(ea:fillcolor)(if fillc(set_tile "color" "0"))"
  823.     )
  824.     (action_tile
  825.       "Sel"
  826.       "(set_tile "Nlyr" (nth (atoi $value) name))"
  827.     )
  828.     (action_tile
  829.       "pre"
  830.       "(setq nlyr (get_tile "Nlyr"))(setq llyr (get_tile "what")) (done_dialog 5)"
  831.     )
  832.     (action_tile
  833.       "list"
  834.       "(setq llyr (get_tile "what"))(done_dialog 6)"
  835.     )
  836.     (action_tile
  837.       "what"
  838.       (strcat
  839. "(setq nlyr (get_tile "Nlyr"))"
  840. "(setq llyr $value)"
  841. "(if (= $reason 4)(progn (setq nlyr (get_tile "Nlyr"))(setq llyr $value)(done_dialog 5)))" ;_ double click
  842.       )
  843.     )
  844.     (setq what_next (start_dialog))
  845.     (cond
  846.       ((= what_next 4)
  847.        (ea:translyr)
  848.       )
  849.       ((= what_next 5)
  850.        (ea:pre)
  851.       )
  852.       ((= what_next 6)
  853.        (getsslyr)
  854.       )
  855.     )
  856.   ) ;_end while
  857.   (unload_dialog _ealyrtr_id)
  858.   (vla-endundomark thisdrawing)
  859.   (vlax-release-object thisdrawing)
  860.   (vlax-release-object oAcad)
  861.   (if blocks (vlax-release-object blocks))
  862.   (if layers (vlax-release-object layers))
  863.   (if 0_in (mapcar '(lambda (x) (set (read x) nil)) 0_in))
  864.   (setq 0_in nil)
  865.   (setq *error* olderr)
  866.   (princ)
  867. ) ;_end defun
  868. (princ
  869.   "\n\t图层合并V2.3, 命令: Lyrt. BY eachy[www.xdcad.net]"
  870. )
  871. (princ)     

点评

是在哪里出现问题啊??今天找了半天,,还是没有找到。。。  详情 回复 发表于 2013-8-30 14:54
既然找出了错误,想必对程序也有了了解,有心得可以和大家分享吗?  详情 回复 发表于 2013-8-17 07:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-17 07:38:39 | 显示全部楼层

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-8-30 14:54:44 | 显示全部楼层

是在哪里出现问题啊??今天找了半天,,还是没有找到。。。

点评

直接复制我上面修改好的就行啦!  详情 回复 发表于 2013-8-30 19:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1489个

财富等级: 财源广进

发表于 2013-8-30 19:29:52 | 显示全部楼层
张和平 发表于 2013-8-30 14:54
是在哪里出现问题啊??今天找了半天,,还是没有找到。。。

直接复制我上面修改好的就行啦!

点评

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

使用道具 举报

发表于 2013-9-1 15:45:08 | 显示全部楼层
楼主DCL对话框要是全部整合到LISP里就好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-9-2 09:47:51 | 显示全部楼层
flowerson 发表于 2013-8-30 19:29
直接复制我上面修改好的就行啦!

主要是我想知道是哪里出错了

点评

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

使用道具 举报

发表于 2013-9-2 11:29:20 | 显示全部楼层
张和平 发表于 2013-9-2 09:47
主要是我想知道是哪里出错了

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

使用道具 举报

发表于 2013-10-17 10:07:21 | 显示全部楼层
这个工具很实用阿!:lol:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-2-16 10:52:58 | 显示全部楼层
程序太好了,可惜积分不够,继续努力兼积分
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 01:05 , Processed in 0.355098 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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