明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 334|回复: 9

[提问] 程序哪里出了问题

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式
本帖最后由 zm880928 于 2024-10-25 20:38 编辑

(defun c:ttt(/ en layadd+c obj objname ss sslen st excluded-layer)
  (defun layadd+c (layer color)
    ;新建图层函数
    (if (null (tblobjname "LAYER" layer))
      (entmake (list
                 '(0. "LAYER")
                 '(100. "AcDbSymbolTableRecord")
                 '(100. "AcDbLayerTableRecord")
                 '(6. "CONTINUOUS")    ;线型
                 '(70. 0)        ;图层状态
                 (cons 62 color)        ;颜色
                 (cons 2 layer)        ;图层名
                 ))
    )
  )
  (princ "图元分层")
  (setvar "cmdecho" 0)
  (setq excluded-layer "穿线孔") ; 设置要排除的图层名称
  (if (setq ss (ssget '((8. "!". excluded-layer)))) ; 排除特定图层的选择过滤器
    (progn
      ;(layadd+c "0-XG-Layer01" 1)    ;新建xg层,图层颜色=1(红)
      ;(layadd+c "0-XG-CENTER" 5) ;新建XG-CENTER层,图层颜色=5(蓝)
      ;(layadd+c "0-XG-BHATCH" 8) ;新建XG-BHATCH层,图层颜色=8(灰)
      ;(layadd+c "0-XGTXT" 3) ;新建xgtxt层,图层颜色=3(绿)
      ;(layadd+c "0-XGDIM" 7) ;新建xgdim层,图层颜色=7(白)
      (setq sslen (sslength ss)) ;图元数量
      (setq st -1)
      (repeat sslen
        (setq
          en (ssname ss (setq st (1+ st)))
          obj (vlax-ename->vla-object en)
          objname (strcase (vla-get-objectname obj) t)
        )
        (vla-put-color obj (vla-get-color (vla-get-layer obj))) ; 将图元颜色设为随层
        (cond
          ((wcmatch objname "*dimension,acdbleader") (vla-put-layer obj "XGDIM"))
          ((wcmatch objname "*text") (vla-put-layer obj "XGTXT"))
          ((wcmatch objname "*hatch") (vla-put-layer obj "XG-BHATCH"))
          ((and
               (wcmatch objname "*circle,*line")
               (wcmatch (strcase (vla-get-linetype obj) t) "dashed*,hidden*")
             )
             (vla-put-layer obj "XG-CENTER"))
          (t (vla-put-layer obj "XG-Layer01"))
        )
      )
      (princ (strcat "\n共有" (itoa sslen) "个图元整理分层成功"))
    )
    (princ "\n未选中图元")
  )
  (setvar "cmdecho" 1)
  (prin1)
)

输入命令还没开始选择就提示一下错误
图元分层undo 当前设置: 自动 = 开,控制 = 全部,合并 = 是,图层 = 是输入要放弃的操作数目或 [自动(A)/控制(C)/开始(BE)/结束(E)/标记(M)/后退(B)] <1>: e ssget 列表错误
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 前天 08:33 | 显示全部楼层
(defun c:ttt(/ os ss)
  (setvar "cmdecho" 0)
  (if(setq ss(ssget '((8 . "~穿线孔"))))
    (progn
      ;1新建程序所需图层
      (mapcar
        (function
          (lambda(x)
            (entmakex
              (list
                '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")'(6 . "CONTINUOUS")'(70 . 0)
                (cons 62(cadr x))(cons 2(car x))
              )
            )
          )
        )
        '(("0-XG-Layer01" 1)("0-XG-CENTER" 5)("0-XG-BHATCH" 8)("0-XGTXT" 3)("0-XGDIM" 7))
      )
      ;2图元依类分层
      (mapcar
        (function
          (lambda(x / on)
            (setq on(vla-get-objectname x))
            (vla-put-layer x
              (cond
                ((wcmatch on "*Dim*,*Leader")"0-XGDIM")
                ((wcmatch on "*Text")"0-XGTXT")
                ((wcmatch on "*Hatch")"0-XG-BHATCH")
                ((wcmatch on "*Text")"0-XGTXT")
                ((wcmatch on "*Text")"0-XGTXT")
                ((and(wcmatch on "*Circle,*Line")(wcmatch(vla-get-linetype x)"DASHED*,HIDDEN*"))"0-XG-CENTER")
                (t "0-XG-Layer01")
              )
            )
            (vla-put-Color x 256)
          )
        )
        (setq os(mapcar 'vlax-ename->vla-object(vl-remove-if 'listp(mapcar 'cadr(ssnamex ss)))))
      )
      (princ(strcat "\n共有" (itoa(length os)) "个图元整理分层成功"))
    )
  )
  (prin1)
)

点评

还是大师傅厉害  发表于 昨天 08:16
回复 支持 1 反对 0

使用道具 举报

发表于 4 天前 | 显示全部楼层
  1. (defun c:tt ()
  2.   "图元分层"
  3.   (defun dxf (code e) (cdr (assoc code (entget e))))
  4.   (defun SubUpd (e c v)
  5.     (entmod (subst (cons c v) (assoc c (entget e)) (entget e)))
  6.     (entupd e)
  7.   )
  8.   (defun mklaco (la co)
  9.     (entmake (list '(0 . "LAYER")
  10.                    '(100 . "AcDbSymbolTableRecord")
  11.                    '(100 . "AcDbLayerTableRecord")
  12.                    (cons 62 co) ;颜色
  13.                    (cons 2 la) ;图层名
  14.              )
  15.     )
  16.   )
  17.   (if (setq ss (ssget '((8 . "~穿线孔")))) ; 排除特定图层
  18.     (progn
  19.       (mklaco "XG-LAYER01" 1)
  20.       (mklaco "XG-CENTER" 5)
  21.       (mklaco "XG-BHATCH" 8)
  22.       (mklaco "XG-TXT" 3)
  23.       (mklaco "XG-DIM" 7)
  24.       (setq i -1)
  25.       (repeat (setq nn (sslength ss))
  26.         (setq s1 (ssname ss (setq i (1+ i))))
  27.         (setq et (strcase (DXF 0 s1)))
  28.         (SubUpd s1 62 256) ; 图元颜色随层
  29.         (cond ((wcmatch et "*DIMENSION,ACDBLEADER")
  30.                 (SubUpd s1 8 "XG-DIM")
  31.               )
  32.               ((wcmatch et "*TEXT")
  33.                (SubUpd s1 8 "XG-TXT")
  34.               )
  35.               ((wcmatch et "HATCH")
  36.                (SubUpd s1 8 "XG-BHATCH")
  37.               )
  38.               ((and (wcmatch et "CIRCLE,*LINE")
  39.                     (setq lt (DXF 6 s1))
  40.                     (wcmatch (strcase lt) "DASHED*,HIDDEN*")
  41.                )
  42.                (SubUpd s1 8 "XG-CENTER")
  43.               )
  44.               (t (SubUpd s1 8 "XG-LAYER01"))
  45.         )
  46.       )
  47.       (princ (strcat "\n共有" (itoa nn) "个图元整理分层成功"))
  48.     )
  49.   )
  50.   (princ)
  51. )
回复 支持 1 反对 0

使用道具 举报

发表于 5 天前 | 显示全部楼层
这代码粘的 就跟AI写的一样
  1. (setq excluded-layer "~穿线孔") ; 设置要排除的图层名称  
  2.         (if (setq ss (ssget (list (cons 8 excluded-layer)))) ; 排除特定图层的选择过滤器   
 楼主| 发表于 5 天前 | 显示全部楼层
飞雪神光 发表于 2024-10-25 19:54
这代码粘的 就跟AI写的一样

贴出来了,没注意看,排版,我重新贴了一遍
发表于 5 天前 | 显示全部楼层
  1. (defun c:ttt(/ en layadd+c obj objname ss sslen st excluded-layer)
  2.   (defun layadd+c (layer color)
  3.     ;新建图层函数
  4.     (if (null (tblobjname "LAYER" layer))
  5.       (entmake (list
  6.                  '(0 . "LAYER")
  7.                  '(100 . "AcDbSymbolTableRecord")
  8.                  '(100 . "AcDbLayerTableRecord")
  9.                  '(6 . "CONTINUOUS")    ;线型
  10.                  '(70 . 0)        ;图层状态
  11.                  (cons 62 color)        ;颜色
  12.                  (cons 2 layer)        ;图层名
  13.                                                          )
  14.                         )
  15.     )
  16.   )
  17.   (princ "图元分层")
  18.   (setvar "cmdecho" 0)
  19.   (setq excluded-layer "~穿线孔") ; 设置要排除的图层名称  
  20.         (if (setq ss (ssget (list (cons 8 excluded-layer)))) ; 排除特定图层的选择过滤器   
  21.     (progn
  22.       (layadd+c "XG-Layer01" 1)    ;新建xg层,图层颜色=1(红)
  23.       (layadd+c "XG-CENTER" 5) ;新建XG-CENTER层,图层颜色=5(蓝)
  24.       (layadd+c "XG-BHATCH" 8) ;新建XG-BHATCH层,图层颜色=8(灰)
  25.       (layadd+c "XGTXT" 3) ;新建xgtxt层,图层颜色=3(绿)
  26.       (layadd+c "XGDIM" 7) ;新建xgdim层,图层颜色=7(白)
  27.       (setq sslen (sslength ss)) ;图元数量
  28.       (setq st -1)
  29.       (repeat sslen
  30.         (setq
  31.           en (ssname ss (setq st (1+ st)))
  32.           obj (vlax-ename->vla-object en)
  33.           objname (strcase (vla-get-objectname obj) t)
  34.         )
  35.         (vla-put-color obj (vla-get-color (vlax-ename->vla-object(tblobjname "layer" (vla-get-layer obj))))) ; 将图元颜色设为随层   
  36.         (cond
  37.           ((wcmatch objname "*dimension,acdbleader") (vla-put-layer obj "XGDIM"))
  38.           ((wcmatch objname "*text") (vla-put-layer obj "XGTXT"))
  39.           ((wcmatch objname "*hatch") (vla-put-layer obj "XG-BHATCH"))
  40.           ((and
  41.                                                  (wcmatch objname "*circle,*line")
  42.                                                  (wcmatch (strcase (vla-get-linetype obj) t) "dashed*,hidden*")
  43.                                          )
  44.                                                 (vla-put-layer obj "XG-CENTER")
  45.                                         )
  46.           (t (vla-put-layer obj "XG-Layer01"))
  47.         )
  48.       )
  49.       (princ (strcat "\n共有" (itoa sslen) "个图元整理分层成功"))
  50.     )
  51.     (princ "\n未选中图元")
  52.   )
  53.   (setvar "cmdecho" 1)
  54.   (prin1)
  55. )
 楼主| 发表于 5 天前 | 显示全部楼层

谢谢师傅,但是好像颜色不能随层
发表于 4 天前 | 显示全部楼层
本帖最后由 ljpnb 于 2024-10-26 15:18 编辑

(setq dxf (subst (cons 62 256) (assoc 62 dxf) dxf))
(entmod dxf)

或者

  (setq col (vla-get-truecolor obj))
  (if (< (vla-get-colorindex col) 256)
    (progn
      (vla-put-colorindex col 256)
      (vla-put-truecolor obj col)
    )
  )

发表于 前天 17:41 | 显示全部楼层
感谢分享,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-30 10:24 , Processed in 0.196031 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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