asos2000 发表于 2022-7-6 10:50:45

谢谢你的回复
我想用ADDHATCH

Lee Mac 发表于 2022-7-6 10:52:14

 
 
要使用ActiveX AddHatch方法完成此任务,需要一个形成闭合边界的边界对象,以便可以附加图案填充对象的外循环(使用AppendOuterLoop方法)。
 
要使用单个点获得这样的对象,需要一个函数来测试点是否位于对象内部。
 
这是一个经典问题(PIP),可以通过多种方式实现,最常见的是光线投射或通过计算物体的缠绕数。
 
最简单的方法是在内部使用Express Tools的函数acet geom point,尽管这确实会依赖于用户系统上Express Tools的可用性。
 
使用检测点是否位于多边形内的功能,可以检查图形中的每个闭合多边形,并收集指定点位于其中的多边形。从这个集合中,我们可以检索最接近该点的多边形,并对其进行相应的图案填充。
 
例如,考虑以下代码:
 

(defun c:test ( / PointInside ss pt i e l hObj ) (vl-load-com)

(defun PointInside ( pt ptlst )
   (acet-geom-point-inside pt ptlst
   ( (lambda ( m / d ) (foreach x ptlst (if (< m (setq d (distance pt x))) (setq m d))) m)
       0.0
   )
   )
)

(if
   (and
   (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (70 . 1))))
   (setq pt (getpoint "\nPick Internal Point: "))
   )
   (progn
   (setq i -1 pt (trans pt 1 0))
   
   (while (setq e (ssname ss (setq i (1+ i))))
       (if
         (PointInside pt
         (mapcar
             (function
               (lambda ( p ) (trans (cdr p) e 0))
             )
             (vl-remove-if-not (function (lambda ( p ) (= 10 (car p)))) (entget e))
         )
         )
         (setq l (cons e l))
       )
   )
   (if
       (setq e
         (car
         (vl-sort l
             (function
               (lambda ( a b )
               (<
                   (distance pt (vlax-curve-getClosestPointto a pt))
                   (distance pt (vlax-curve-getClosestPointto b pt))
               )
               )
             )
         )
         )
       )
       (progn
         (setq hObj
         (vla-AddHatch
             (vlax-get-property
               (vla-get-ActiveDocument (vlax-get-acad-object))
               (if (= 1 (getvar 'CVPORT))
               'Paperspace
               'Modelspace
               )
             )
             acHatchPatternTypePredefined "ANSI31" :vlax-true AcHatchObject
         )
         )
         (vlax-invoke hObj 'AppendOuterLoop (list (vlax-ename->vla-object e)))
         (vla-Evaluate hObj)
       )
   )
   )
)
(princ)
)


 
页: 1 [2]
查看完整版本: 在不同多边形中创建图案填充