jan_ek 发表于 2022-7-5 15:28:40

基于环境创建图案填充

你好
我有一个包含多段线“Test*”的块。
我想做什么?
1、获取多段线的形状
2、将形状分为2部分
3.使用RGB颜色和单个图层(2个形状)创建图案填充(见图)
有可能吗?

BIGAL 发表于 2022-7-5 15:34:50

你只是在避免手动操作吗?
 
作为一个使用这种方法的lisp非常简单的自动化工具,你知道如何使用lisp吗?
拾取pt1
拾取pt2
拾取pt3
选取pt4
线路pt1 pt2
-舱口pt1 pat1
-舱口pt2 pat2

jan_ek 发表于 2022-7-5 15:35:35

我想使用autolisp。但我有个问题。我不知道如何创建点列表(计算分割点并从块中获取点列表)。

BIGAL 发表于 2022-7-5 15:39:58

我额外的问题是,你想要真实的区域1=区域2吗?如果是这样,那么可能没有一个图像是正确的,或者我只想用一些规则选取两个点,比如另一条线的中间。
 
lisp代码实际上是将我已经发布的内容转换为lisp。
 
请张贴关于额外的问题,它使事情复杂化,如果不需要a1=a2,那么它需要几分钟的代码。

jan_ek 发表于 2022-7-5 15:42:23

你好
图片是草图(请不要建议)
我假设了这种情况。
搜索最大左/下角。
获取长度多段线并拆分为2部分。
设定点并创建两个目标。
 
也许这是个错误的假设。。

ronjonp 发表于 2022-7-5 15:46:58

试试这个。演示。
 
(defun c:foo (/ _addhatch _bnd a ao b d doc e ll mp o s sp ur vc vs)
(defun _addhatch (e c sp l / h)
   (if        (setq h (vla-addhatch sp achatchpatterntypepredefined "SOLID" :vlax-false))
   (progn (vlax-invoke h 'appendouterloop (list e))
   (vla-put-color h c)
   (vla-evaluate h)
   (vla-update h)
   (entmod (append (entget (vlax-vla-object->ename h)) (list (cons 8 l))))
   h
   )
   )
)
(defun _bnd (p l / e)
   (setq e (entlast))
   (command "_.-boundary" p "")
   (cond ((not (equal e (entlast)))
   (entmod (append (entget (setq e (entlast))) (list (cons 8 l))))
   (vlax-ename->vla-object e)
)
   )
)
(if (setq s (ssget '((0 . "LWPOLYLINE") (-4 . "&") (70 . 1))))
   (progn
   (setq doc (vla-get-activedocument (setq ao (vlax-get-acad-object))))
   (vla-startundomark doc)
   (setq sp (vlax-get doc
               (cond ((= 1 (getvar 'cvport)) 'paperspace)
                     ('modelspace)
               )
       )
   )
   (vla-put-lock (vlax-ename->vla-object (tblobjname "layer" (getvar 'clayer))) :vlax-false)
   (setq vc (getvar 'viewctr))
   (setq vs (getvar 'viewsize))
   (foreach b (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(setq o (vlax-ename->vla-object b))
(if
(and (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'll 'ur))))
       (mapcar 'set '(ll ur) (mapcar 'vlax-safearray->list (list ll ur)))
       (setq e (entmakex (list '(0 . "line") '(8 . "tempfoo") (cons 10 ll) (cons 11 ur))))
)
   (progn (setq mp (mapcar '(lambda (a b) (/ (+ a b) 2.)) ll ur))
          (vlax-invoke ao 'zoomcenter mp (setq d (distance ll ur)))
          (and (setq a (_bnd (list (+ (car mp) (* d 0.1)) (cadr mp)) "BoundaryA"))
             (_addhatch a 1 sp "HatchA")
          )
          (and (setq b (_bnd (list (- (car mp) (* d 0.1)) (cadr mp)) "BoundaryB"))
             (_addhatch b 3 sp "HatchB")
          )
   )
)
(and e (entdel e))
   )
   (vla-endundomark doc)
   (vlax-invoke ao 'zoomcenter vc vs)
   )
)
(princ)
)

Grrr 发表于 2022-7-5 15:49:32

很酷,罗恩!
但有几个问题:
是否需要缩放到对象?
如果是:也许使用zoomextents和zoomprevious方法会更快。
 
有人知道舱口评估是否重要吗?(vla评估)
因为我以前使用AddHatch方法,而不需要它。

ronjonp 发表于 2022-7-5 15:52:33

 
我使用“boundary”命令缩放对象以提高速度,这样它就不会查看整个图形。。试试看,我也可以打电话给(bpoly pt)。。但想想看,对于屏幕上的许多对象来说,速度仍然是一个问题。
 
*编辑。。刚刚测试过,速度要慢得多。

Grrr 发表于 2022-7-5 15:54:19

 
谢谢你的确认,罗恩。

jan_ek 发表于 2022-7-5 15:58:58

我对“CAD克隆”有问题-BricsCad
有没有可能以某种方式避免它
 
“;-----表达式周围出错-----
(BPOLY“P”)
;
; 错误:没有函数定义;处的预期功能
"
页: [1] 2
查看完整版本: 基于环境创建图案填充