在不同多边形中创建图案填充
尊敬的各位:,我想在不同层的所有多段线上创建图案填充。例如,图层1上的所有多段线将图案填充创建为红色,图层2上的所有多段线将图案填充创建为黄色。。。。是否可以通过lisp自动创建它?
谢谢 当你说“在多段线上图案填充”时,你的意思是在闭合多段线内图案填充吗? 是的,谢谢。闭合多段线内的图案填充 对闭合多段线进行图案填充并不十分困难。到目前为止,你有什么代码?
提示(选择闭合多段线的最佳方法):
(ssget '((0 . "LWPOLYLINE") (-4 . "<OR") (70 . 1) (70 . 129) (-4 . "OR>"))) 但是如果
((-1 . <Имя объекта: 7edf4508>) (0 . "LWPOLYLINE") (330 . <Имя объекта:
7ed49cf8>) (5 . "6369") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbPolyline") (90 . 5) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0)
(10 -1632.64 5446.11) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -330.423
2953.1) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 3128.59 4700.92) (40 .
0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 402.075 6001.62) (40 . 0.0) (41 . 0.0)
(42 . 0.0) (91 . 0) (10 -1632.64 5446.11) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91
. 0) (210 0.0 0.0 1.0))
没错,但它还没有正式关闭。然而,您可以轻松地修改代码,以确保闭合或(等于起始点端点)。 啊,见鬼。。。
(defun c:Test (/ ss h)
(vl-load-com)
(if (setq ss (ssget '((0 . "LWPOLYLINE") (-4 . "<OR") (70 . 1) (70 . 129) (-4 . "OR>"))))
((lambda (space)
(vlax-for x (setq ss (vla-get-activeselectionset *AcadDoc*))
(vla-put-layer
(setq h (vla-AddHatch space acHatchPatternTypePredefined "SOLID" :vlax-true))
(vla-get-layer x)
)
(vlax-invoke h 'AppendOuterLoop (list x))
(vlax-invoke h 'Evaluate)
)
(vla-delete ss)
)
(if (or (eq acmodelspace
(vla-get-activespace
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
)
(eq :vlax-true (vla-get-mspace *AcadDoc*))
)
(vla-get-modelspace *AcadDoc*)
(vla-get-paperspace *AcadDoc*)
)
)
)
(princ)
) 稍微修改以接受具有相同起点和终点的开放多段线。。。
(defun c:Test (/ ss h)
(vl-load-com)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
((lambda (space)
(vlax-for x (setq ss (vla-get-activeselectionset *AcadDoc*))
(if (or (vlax-curve-isClosed x)
(equal (vlax-curve-getStartPoint x) (vlax-curve-getEndPoint x))
)
(progn
(vla-put-layer
(setq h (vla-AddHatch space acHatchPatternTypePredefined "SOLID" :vlax-true))
(vla-get-layer x)
)
(vlax-invoke h 'AppendOuterLoop (list x))
(vlax-invoke h 'Evaluate)
)
)
)
(vla-delete ss)
)
(if (or (eq acmodelspace
(vla-get-activespace
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
)
(eq :vlax-true (vla-get-mspace *AcadDoc*))
)
(vla-get-modelspace *AcadDoc*)
(vla-get-paperspace *AcadDoc*)
)
)
)
(princ)
) 有没有办法通过选择内部点来创建图案填充?
看看这个。
(while
(setq pt (getpoint "\n Internal Point :"))
(command "_.-hatch" pt "_p" "SOLID" "" "")
)
塔瓦特
页:
[1]
2