robierzo 发表于 2022-7-6 07:23:15

多边形内部或外部的点

你好我需要知道一个点是在多段线的内部还是外部。非常感谢。Punto dentro o fuera de Polilina。图纸

MSasu 发表于 2022-7-6 07:32:44

我相信你说的是闭合多段线。一种解决方案是尝试使用该点调用边界命令,并检查图形中的最后一个图元。如果添加了新的多段线,则在基准多段线内拾取。

Tharwat 发表于 2022-7-6 07:38:35

试试这个。。。。
 

   (defun c:Test (/ p1 p2 gr)
   ;;;;; Tharwat 28. June. 2012 ;;;;;
    (if (and (setq p1 (getpoint "\n Specify point :"))
             (setq p2 (getcorner p1 "\n Corner :"))
      )
      (while (eq (car (setq gr (grread t 15 1))) 5) (redraw)
      (foreach n '((0.5 0.5 0.0) (-0.5 0.5 0.0)(-0.5 -0.5 0.0)(0.5 -0.5 0.0))
          (grdraw
            (cadr gr)
            (mapcar '+ (mapcar (function (lambda (x) (* x (/ (getvar "VIEWSIZE") 25.))))
                (trans n 1 0))
            (cadr gr)
            )
            1
            0
          )
      )
   
      (if
          (and
            (< (car p1) (car (cadr gr)))
            (> (car p2) (car (cadr gr)))
            (> (cadr p1) (cadr (cadr gr)))
            (< (cadr p2) (cadr (cadr gr)))
          )
         (princ "\n inside ...... ")
         (princ "\n outside ..... ")
      )
      )
    )
    (redraw)
    (princ)
   )
   

MSasu 发表于 2022-7-6 07:44:17

您可以根据自己的代码对其进行调整:
(defun c:TestPick( / refEntity thePoint )
(setq refEntity (entlast))
(setq thePoint (getpoint "\nPick a point:"))

(command "_BOUNDARY" thePoint "")

(if (equal refEntity (entlast))
(prompt "\nPicked outside!")
(progn
(prompt "\nPicked inside!")
(entdel (entlast))
)
)

(princ)
)

robierzo 发表于 2022-7-6 07:49:19

谢谢你们俩。太棒了。谢谢

Lee Mac 发表于 2022-7-6 07:52:15

以下是我的方法:
 
;; Point Inside-p-Lee Mac
;; Utilises a ray-casting algorithm to determine whether a
;; given point (WCS) resides within a supplied object.

(defun LM:PointInside-p ( pt obj / lst ray )
   (setq lst
       (vlax-invoke
         (setq ray
               (vla-addray
                   (vla-objectidtoobject (vla-get-document obj) (vla-get-ownerid obj))
                   (vlax-3D-point pt)
                   (vlax-3D-point (mapcar '+ pt '(1.0 0.0 0.0)))
               )
         )
         'intersectwith obj acextendnone
       )
   )
   (vla-delete ray)
   (= 1 (logand 1 (length lst)))
)
 
要测试:
(defun c:test ( / ent obj pnt )
   (if (setq ent (car (entsel "\nSelect Polyline: ")))
       (if (vlax-method-applicable-p (setq obj (vlax-ename->vla-object ent)) 'intersectwith)
         (while (setq pnt (getpoint "\nPick Point: "))
               (if (LM:PointInside-p (trans pnt 1 0) obj)
                   (alert "Point is INSIDE")
                   (alert "Point is OUTSIDE")
               )
         )
         (princ "\nInvalid Object selected.")
       )
   )
   (princ)
)
(vl-load-com) (princ)

 
对于投影光线平行于相交边缘的情况,可能需要进行更严格的测试。但上述内容足以满足大多数一般应用。

pBe 发表于 2022-7-6 07:56:45

 
我喜欢它
 
谢谢分享。

marko_ribar 发表于 2022-7-6 08:03:33

我相信我已经回答了这个话题,是你robierzo。。。
 
http://www.cadtutor.net/forum/showthread.php?72815-指向另一个实体的内部或外部
 
M、 R。

robierzo 发表于 2022-7-6 08:11:57

李,太棒了。对我来说太复杂了。谢谢分享,塔瓦特,姆萨苏,李Mac。

Tharwat 发表于 2022-7-6 08:12:57

 
不客气
页: [1] 2
查看完整版本: 多边形内部或外部的点