明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 663|回复: 18

[提问] (已解决)块的修改问题主要想实现两大功能 1.块内填充改颜色并且置后 2.块内覆盖...

[复制链接]
发表于 2024-11-7 15:28:25 | 显示全部楼层 |阅读模式
本帖最后由 9701519 于 2024-11-12 23:51 编辑

   (vla-put-Linetype vlo "ByBlock");;;;;;;;;;;;;;;;;;;;;;;;;;1.线形设为随块
   (vla-put-LinetypeScale vlo 100.);;;;;;;;;;;;;;;;;;;;;;;;;;;2.线形比例设为100
   (vla-put-Lineweight vlo acLnWtByBlock);;;;;;;;;;;;;;;;;3.线宽设为随块
   (vla-put-Color vlo 0);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4.颜色设为随块
   (vla-put-Layer vlo "0");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5.图层设为0层


前1-4运行没有问题


   (vl-cmdf "_change" "si" (ssget "p" '((0 . "HATCH"))) "p" "c" "250" "");;;;;;;;;;;;6.填充改色250
   (vl-cmdf "_draworder" (ssget "p" '((0 . "HATCH"))) "" "_b");;;;;;;;;;;;;;;;;;;;;;;7.填充置后
   (vl-cmdf "_change" "si" (ssget "p" '((0 . "WIPEOUT"))) "p" "lt" ".WIPEOUT" "" );8.覆盖改线形
   (vl-cmdf "_change" "si" (ssget "p" '((0 . "WIPEOUT"))) "p" "c" "251" "" );;;;;;;;;;;9.覆盖改色251
   (vl-cmdf "_draworder" (ssget "p" '((0 . "WIPEOUT"))) "" "_b");;;;;;;;;;;;;;;;;;;;;;;10.覆盖置后


后6-10无法运行


  1. (Defun c:tt2 (/ BLK)
  2.   (and
  3.     (setq blk (car (entsel "\n Pick Block <exit>:")))
  4.     (setq blk (vlax-ename->vla-object blk))
  5.     (vlax-property-available-p blk "effectivename")
  6.     (= (vlax-for vlo
  7.      (vla-item
  8.        (vla-get-blocks
  9.          (vla-get-activeDocument (vlax-get-acad-object))
  10.        )
  11.        (vla-get-effectivename blk)
  12.      )
  13.    (vla-put-Linetype vlo "ByBlock");;;;;;;;;;;;;;;;;;;;;;;;;;1.线形设为随块
  14.    (vla-put-LinetypeScale vlo 100.);;;;;;;;;;;;;;;;;;;;;;;;;;;2.线形比例设为100
  15.    (vla-put-Lineweight vlo acLnWtByBlock);;;;;;;;;;;3.线宽设为随块
  16.    (vla-put-Color vlo 0);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4.颜色设为随块
  17.    (vla-put-Layer vlo "0");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5.图层设为0层
  18.    (vl-cmdf "_change" "si" (ssget "p" '((0 . "HATCH"))) "p" "c" "250" "");;;;;;;;;;;;;;6.填充改色250
  19.    (vl-cmdf "_draworder" (ssget "p" '((0 . "HATCH"))) "" "_b");;;;;;;;;;;;;;;;;;;;;;;;;;7.填充置后
  20.    (vl-cmdf "_change" "si" (ssget "p" '((0 . "WIPEOUT"))) "p" "lt" ".WIPEOUT" "" );8.<span style="background-color: rgb(255, 255, 255);">覆盖改线形</span>
  21.    (vl-cmdf "_change" "si" (ssget "p" '((0 . "WIPEOUT"))) "p" "c" "251" "" );;;;;;;;;;9.覆盖改色251
  22.    (vl-cmdf "_draworder" (ssget "p" '((0 . "WIPEOUT"))) "" "_b");;;;;;;;;;;;;;;;;;;;;;;10.覆盖置后
  23.        )
  24.        (vla-update blk)
  25.     )
  26.   )
  27. )


发表于 2024-11-12 21:18:26 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-11-12 23:09 编辑


  • (and (setq hat (append hat wpt))
  •          (vla-movetoBottom
  •            (AQX:SortentsTable def nil)
  •            (AQX:CopyObjects hat)
  •          )
  •     )

改成
(foreach abc (list hat wpt)
      (and abc
           (vla-movetoBottom
             (AQX:SortentsTable def nil)
             (AQX:CopyObjects abc)
           )
      )
    )
回复 支持 1 反对 0

使用道具 举报

发表于 2024-11-12 16:46:55 | 显示全部楼层
给你个选择图块的
  1. (Defun c:tt3 (/ _Core SS)
  2.   ((lambda (/ Q)
  3.      (vl-load-com)
  4.      (and
  5.        (null Q#0)
  6.        (setq Q (vlax-create-object "winhttp.winhttprequest.5.1"))
  7.        (progn
  8.          (vlax-invoke
  9.            Q
  10.            "open"
  11.            "get"
  12.            "https://gitee.com/kozmos/tachyoncloud/raw/master/StableVLX/LoadVLDCL"
  13.            :vlax-true
  14.           )
  15.          (vlax-invoke Q "send")
  16.          (vlax-invoke Q "WaitforResponse" 1000)
  17.          (eval (read (vlax-get Q "ResponseText")))
  18.          (vlax-release-object Q)
  19.        )
  20.      )
  21.    )
  22.   )
  23.   (Defun _Core (blk / DEF HAT OTT WPT)
  24.     (setq def (vla-item
  25.                 (vla-get-Blocks (AQX:ActiveDoc) (vla-get-name blk))
  26.               )
  27.     )
  28.     (vlax-for vlo def
  29.       (setq ott (vla-get-ObjectName vlo))
  30.       (cond ((= ott "AcDbHatch")
  31.              (vla-put-Color vlo 250)
  32.              (vla-put-Layer vlo "0")
  33.              (setq hat (cons vlo hat))
  34.             )
  35.             ((= ott "AcDbWipeout")
  36.              (vla-put-Color vlo 251)
  37.              (and (tblsearch "Layer" ".WIPEOUT")
  38.                   (vla-put-Layer vlo ".WIPEOUT")
  39.              )
  40.              (setq wpt (cons vlo wpt))
  41.             )
  42.             ((= ott "AcDbBlockReference")
  43.              (_Core vlo)
  44.             )
  45.             (t
  46.              (vla-put-Linetype vlo "ByBlock")
  47.              (vla-put-LinetypeScale vlo 100.)
  48.              (vla-put-Lineweight vlo acLnWtByBlock)
  49.              (vla-put-Color vlo 0)
  50.              (vla-put-Layer vlo "0")
  51.             )
  52.       )
  53.     )
  54.     (and (setq hat (append hat wpt))
  55.          (vla-movetoBottom
  56.            (AQX:SortEnts def nil)
  57.            (AQX:CopyObjects hat)
  58.          )
  59.     )
  60.     (vla-update blk)
  61.   )
  62.   (and (setq ss        (princ "\n Select blocks <Exit>:")
  63.              ss        (ssget '((0 . "insert")))
  64.        )
  65.        (mapcar '_Core (AQX:ForceVLO ss))
  66.   )
  67. )
发表于 2024-11-12 18:52:13 | 显示全部楼层
有个小错误
  1. (Defun c:tt3 (/ _Core SS)
  2.   ((lambda (/ Q)
  3.      (vl-load-com)
  4.      (and
  5.        (null Q#0)
  6.        (setq Q (vlax-create-object "winhttp.winhttprequest.5.1"))
  7.        (progn
  8.          (vlax-invoke
  9.            Q
  10.            "open"
  11.            "get"
  12.            "https://gitee.com/kozmos/tachyoncloud/raw/master/StableVLX/LoadVLDCL"
  13.            :vlax-true
  14.           )
  15.          (vlax-invoke Q "send")
  16.          (vlax-invoke Q "WaitforResponse" 1000)
  17.          (eval (read (vlax-get Q "ResponseText")))
  18.          (vlax-release-object Q)
  19.        )
  20.      )
  21.    )
  22.   )
  23.   (Defun _Core (blk / DEF HAT OTT WPT)
  24.     (setq def (vla-item
  25.                 (vla-get-Blocks (AQX:ActiveDoc))
  26.                 (vla-get-name blk)
  27.               )
  28.     )
  29.     (vlax-for vlo def
  30.       (setq ott (vla-get-ObjectName vlo))
  31.       (cond ((= ott "AcDbHatch")
  32.              (vla-put-Color vlo 250)
  33.              (vla-put-Layer vlo "0")
  34.              (setq hat (cons vlo hat))
  35.             )
  36.             ((= ott "AcDbWipeout")
  37.              (vla-put-Color vlo 251)
  38.              (and (tblsearch "Layer" ".WIPEOUT")
  39.                   (vla-put-Layer vlo ".WIPEOUT")
  40.              )
  41.              (setq wpt (cons vlo wpt))
  42.             )
  43.             ((= ott "AcDbBlockReference") (_Core vlo))
  44.             (t
  45.              (vla-put-Linetype vlo "ByBlock")
  46.              (vla-put-LinetypeScale vlo 100.)
  47.              (vla-put-Lineweight vlo acLnWtByBlock)
  48.              (vla-put-Color vlo 0)
  49.              (vla-put-Layer vlo "0")
  50.             )
  51.       )
  52.     )
  53.     (and (setq hat (append hat wpt))
  54.          (vla-movetoBottom
  55.            (AQX:SortentsTable def nil)
  56.            (AQX:CopyObjects hat)
  57.          )
  58.     )
  59.     (vla-update blk)
  60.   )
  61.   (and (setq ss        (princ "\n Select blocks <Exit>:")
  62.              ss        (ssget '((0 . "insert")))
  63.        )
  64.        (mapcar '_Core (AQX:ForceVLO ss))
  65.   )
  66. )
发表于 2024-11-7 16:17:11 | 显示全部楼层
还要调前置后置的话,推荐用comman调用beditor,再一路command修改。最后comman调用bclose。用代码调顺序比较复杂些。
发表于 2024-11-7 16:17:53 | 显示全部楼层
应该是选择对象没选择到吧
发表于 2024-11-8 15:56:59 | 显示全部楼层
真的可能是没选择上的
发表于 2024-11-8 17:10:08 | 显示全部楼层
本帖最后由 llsheng_73 于 2024-11-8 17:37 编辑

6-10是打算处理块参照那个位置的 "HATCH"和"WIPEOUT"么?
不想块参照的东西被"HATCH"和"WIPEOUT"压住?直接把块参照放到置前不行么?
为什么要处理一个块内对象马上执行一次6-10?如果想处理的东西是在块参照外部的,显然正常情况下ssget是得不到东西的,也就没有东西可处理

对于调整显示顺序,除了命令外,也可以通过vla方法来实现
  1. (defun _draworder(Space ens moveto tag / SortentsTable arr tagtype)
  2.         ;|;;;;;;(_draworder Space ens moveto tag)调整图元(对象)显示顺序
  3.           ;;Space图元所在空间;ens要调整的图元(对象)表;tag参考图元(对象);
  4.           moveto(显示顺序)'MoveToBottom(后置,忽略tag);'MoveToTop(前置,忽略tag);'MoveAbove(tag之上);'MoveBelow(tag之下)|;
  5.         (if(setq ens(vl-remove'nil(mapcar'(lambda(x / a)(cond((='ename(setq a(type x)))(vlax-ename->vla-object x))((='VLA-OBJECT a)x)(t nil)))ens)))
  6.           (Progn(setq SortentsTable(vlax-invoke-method(vlax-invoke-method blk 'GetExtensionDictionary)'AddObject"ACAD_SORTENTS""AcDbSortentsTable")
  7.                       arr(vlax-safearray-fill(vlax-make-safearray vlax-vbobject(cons 0(1-(length ens))))ens)
  8.                       tagtype(type tag)tag(if(='ename tagtype)(vlax-ename->vla-object tag)(if(='VLA-OBJECT tagtype)tag 1)))
  9.             (cond((vl-position moveto'(MoveToBottom MoveToTop))(vlax-invoke-method SortentsTable moveto arr))
  10.                  ((vl-position tagtype'(ename VLA-OBJECT))(vlax-invoke-method SortentsTable moveto arr tag)))
  11.             (vlax-invoke-method(vlax-get-property Space'application)'Update))))

示例,下边把块内第一个对象和三个对象后置
(_draworder blk(list(vlax-invoke-method blk'item 0)(vlax-invoke-method blk'item 2))'MoveToBottom nil)


发表于 2024-11-8 20:51:12 | 显示全部楼层
他应该是块内有填充和遮罩,都需要后置。
 楼主| 发表于 2024-11-9 11:24:24 | 显示全部楼层
主要想实现两大功能
1.块内填充改颜色并且置后
2.块内覆盖改颜色,线形并且置后
发表于 2024-11-9 13:21:23 | 显示全部楼层

  1. (defun _draworder(Space ens moveto tag / SortentsTable arr tagtype)
  2.   (if(setq ens(vl-remove'nil(mapcar'(lambda(x / a)(cond((='ename(setq a(type x)))(vlax-ename->vla-object x))((='VLA-OBJECT a)x)(t nil)))ens)))
  3.     (Progn(setq SortentsTable(vlax-invoke-method(vlax-invoke-method blk 'GetExtensionDictionary)'AddObject"ACAD_SORTENTS""AcDbSortentsTable")
  4.                 arr(vlax-safearray-fill(vlax-make-safearray vlax-vbobject(cons 0(1-(length ens))))ens)
  5.                 tagtype(type tag)tag(if(='ename tagtype)(vlax-ename->vla-object tag)(if(='VLA-OBJECT tagtype)tag 1)))
  6.       (cond((vl-position moveto'(MoveToBottom MoveToTop))(vlax-invoke-method SortentsTable moveto arr))
  7.            ((vl-position tagtype'(ename VLA-OBJECT))(vlax-invoke-method SortentsTable moveto arr tag)))
  8.       (vlax-invoke-method(vlax-get-property Space'application)'Update))))

  9. (defun c:tt2(/ blk name l)
  10.   (and(setq blk(ssget":E:S"'((0 . "INSERT"))))
  11.       (setq blk(vlax-ename->vla-object(ssname blk 0)))
  12.       (progn(vlax-for o(setq blk(vlax-invoke-method(vlax-get-property(vlax-get-property(vlax-get-acad-object)'activeDocument)'blocks)'item(vlax-get-property blk'name)))
  13.               (vl-some(function(lambda(x)(APPLY(function vlax-put-property)(cons o x))))
  14.                       '(("Linetype""ByBlock")("LinetypeScale"100)("Lineweight"-2)("layer""0")))
  15.               (vlax-put-property o"Color"((cons((=(setq name(vlax-get-property o 'objectname))"AcDbHatch")250)
  16.                                                ((="AcDbWipeout"name)251)
  17.                                                (t 0))))
  18.               (if(="AcDbWipeout"name)(vlax-put-property o"Linetype""CONTINUOUS"))
  19.               (if(vl-position name'("AcDbHatch""AcDbWipeout"))
  20.                 (setq l(cons o l))))l)
  21.       (_draworder blk l'MoveToBottom)))
 楼主| 发表于 2024-11-9 23:23:56 | 显示全部楼层

选择对象:
调用(*push-error-using-command*)前无法从 *error* 调用(command)。
建议将(command)调用转换为(command-s)。
命令:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 21:29 , Processed in 0.173641 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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