明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 600|回复: 3

[讨论] 关于矩形填充帮忙优化(已解决)

[复制链接]
发表于 2024-8-20 10:35:06 | 显示全部楼层 |阅读模式
本帖最后由 zhoupeng220 于 2024-8-22 09:18 编辑

  1. (defun c:rectc(/ tc_e tc_vlae tc_name tc_scle tc_ang tc_la tc_col pt1 pt2)
  2.   (vl-load-com)
  3.   (setvar "cmdecho" 0)
  4.             (setq tc_e(car(entsel"\n選擇填充源圖案:")))
  5.             (setq tc_vlae   (vlax-ename->vla-object  tc_e);名稱
  6.                   tc_name   (vla-get-patternname  tc_vlae);圖案名稱
  7.                   tc_scle   (vla-get-patternscale tc_vlae);比例
  8.                   tc_ang    (* 180(/ (vla-get-patternangle tc_vlae) pi));角度
  9.                   tc_la     (vla-get-layer        tc_vlae);圖層
  10.                   tc_col    (vla-get-color        tc_vlae);顏色
  11.                   tc_ltype  (vla-get-linetype     tc_vlae));线型
  12.             
  13.   (setq pt1 (getpoint "\n指定矩形的兩點:"))        
  14.   (setq pt2 (getcorner pt1))  
  15.   (command "rectang" pt1 pt2)
  16.   ;(setq pt1 (entlast))   ;刪除矩形程式碼
  17.   ;(if (= tc_col 256)(setq tc_col (cdr(assoc 62(entget(tblobjname "layer" tc_la))))))
  18.   (command "-hatch" "p" tc_name tc_scle tc_ang  "s"  (entlast) "" "")
  19.   ;(entdel pt1)  ;刪除矩形程式碼
  20.   (while (/= 0 (getvar "cmdactive")) (command pause))
  21.   (vla-put-color (vlax-ename->vla-object (entlast)) tc_col)
  22.   (vla-put-layer (vlax-ename->vla-object (entlast)) tc_la)
  23.   (vla-put-linetype (vlax-ename->vla-object (entlast)) tc_ltype)
  24.   (setq princtext (strcat "\n當前填充圖案:" tc_name))
  25.   (princ princtext)
  26.   (princ "\n矩形填充完成")
  27.   (princ)
  28. )

两个问题,1.获取solid图案后,执行下一步会有问题。
                2.怎样优化成如果不选取填充,默认是上次的填充图案比例角度

在大神@xyp1964 的帮助下问题已经解决。附上优化后的代码。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-8-20 20:36:16 | 显示全部楼层
本帖最后由 alexmai 于 2024-8-20 20:43 编辑

solid图案是属于特殊填充,一般要单独处理



;;;临时填充灰色实体墙
(defun c:h111 ()
  (setvar "osmode" 0)
  (prompt "\n灰色实体填充,指定内部点\n")
  (setq pt (getpoint))
  (setq clcc (getvar "cecolor"))
  (setvar "cecolor" "bylayer")
  (if (null (tblsearch "LAYER" "COLUMN"))
    (command "-LAYER" "M" "COLUMN" "C" 252 "" "" "")
    (setvar "CLAYER" "COLUMN")
  )
  (command "-bhatch" "A" "A" "Y" "" "p" "solid" pt "")
  (setvar "cecolor" clcc)
  (princ)
)




;;;快速矩形填充
(defun c:reh (/ pt1 pt2 width height)
  (setq clay (getvar "clayer"));;;记下当前图层
  (setq clcc (getvar "cecolor"));;;记下当前颜色
  (setq lay1 (tblsearch "layer" "B-Hatch"))
  (if (= lay1 nil)
      (entmake
    (list
      '(0 . "layer")
       '(100 . "AcDbSymbolTableRecord")
       '(100 . "AcDbLayerTableRecord")
       '(70 . 0)
       '(6 . "Continuous")
       '(62 . 2)
           (cons 2 "B-Hatch")
      )
    )
  );if
  (setq lay1 (tblsearch "layer" "B-新起间墙填充"))
  (if (= lay1 nil)
      (entmake
    (list
      '(0 . "layer")
       '(100 . "AcDbSymbolTableRecord")
       '(100 . "AcDbLayerTableRecord")
       '(70 . 0)
       '(6 . "Continuous")
       '(62 . 252)
           (cons 2 "B-新起间墙填充")
      )
    )
  );if
  (setvar "CLAYER" "B-新起间墙填充")
   (if (setq p1 (getpoint "\n矩形插入点:"))
        (progn
           (setq p4 (getcorner p1 "\n对角点:")
                p2 (list (car p4) (cadr p1))
                p3 (list (car p1) (cadr p4))
           )
           (entmake
                (list '(0 . "LWPOLYLINE")
                        '(100 . "AcDbEntity")
                        '(100 . "AcDbPolyline")
                        '(90 . 5)
                        '(62 . 256)
                        (cons 8 "B-Hatch")
                        (cons 10 p1)
                        (cons 10 p2)
                        (cons 10 p4)
                        (cons 10 p3)
                        (cons 10 p1)
                 )
           )
          (setvar "cecolor" clcc)
          (command "-bhatch" "DR" "h" "A" "A" "n" "g" "15" "" "O" "D" "L" "Y" "s" (entlast) "" "")
          (command "ERASE" (SSGET "x"  '((-4 . "<OR") (-4 . "<AND") (8 . "B-Hatch")  (62 . 256) (0 . "LWPOLYLINE") (-4 . "AND>") (-4 . "OR>"))) "")
          (setvar "clayer" clay)
       )
   );if
)


评分

参与人数 1明经币 +1 收起 理由
zhoupeng220 + 1 感谢解惑

查看全部评分

发表于 2024-8-21 08:02:21 | 显示全部楼层
alexmai 发表于 2024-8-20 20:36
solid图案是属于特殊填充,一般要单独处理

如何改成保留选取填充,在执行选取填充时若是按下空格表示默认是上次的填充图案比例角度。
发表于 2024-9-8 18:07:51 | 显示全部楼层
谢谢分享,好用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 06:42 , Processed in 0.165732 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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