基于环境创建图案填充
你好我有一个包含多段线“Test*”的块。
我想做什么?
1、获取多段线的形状
2、将形状分为2部分
3.使用RGB颜色和单个图层(2个形状)创建图案填充(见图)
有可能吗?
你只是在避免手动操作吗?
作为一个使用这种方法的lisp非常简单的自动化工具,你知道如何使用lisp吗?
拾取pt1
拾取pt2
拾取pt3
选取pt4
线路pt1 pt2
-舱口pt1 pat1
-舱口pt2 pat2 我想使用autolisp。但我有个问题。我不知道如何创建点列表(计算分割点并从块中获取点列表)。 我额外的问题是,你想要真实的区域1=区域2吗?如果是这样,那么可能没有一个图像是正确的,或者我只想用一些规则选取两个点,比如另一条线的中间。
lisp代码实际上是将我已经发布的内容转换为lisp。
请张贴关于额外的问题,它使事情复杂化,如果不需要a1=a2,那么它需要几分钟的代码。 你好
图片是草图(请不要建议)
我假设了这种情况。
搜索最大左/下角。
获取长度多段线并拆分为2部分。
设定点并创建两个目标。
也许这是个错误的假设。。 试试这个。演示。
(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)
) 很酷,罗恩!
但有几个问题:
是否需要缩放到对象?
如果是:也许使用zoomextents和zoomprevious方法会更快。
有人知道舱口评估是否重要吗?(vla评估)
因为我以前使用AddHatch方法,而不需要它。
我使用“boundary”命令缩放对象以提高速度,这样它就不会查看整个图形。。试试看,我也可以打电话给(bpoly pt)。。但想想看,对于屏幕上的许多对象来说,速度仍然是一个问题。
*编辑。。刚刚测试过,速度要慢得多。
谢谢你的确认,罗恩。 我对“CAD克隆”有问题-BricsCad
有没有可能以某种方式避免它
“;-----表达式周围出错-----
(BPOLY“P”)
;
; 错误:没有函数定义;处的预期功能
"
页:
[1]
2