Vla-intersectwith

提供:GizmoLabs - だいたい CAD LISP なサイト
構文
(vla-intersectwith vla-object IntersectObject [ExtendOption])


機能
図面内のあるオブジェクトが他のオブジェクトと交差する点を取得する。


引数
  • vla-object : 基本のVLAオブジェクト。Pviewport と PolygonMesh を除く全ての図形、または AttributeReference。
  • IntersectObject : vla-object と交差しているかチェックする VLAオブジェクト。サポートされている図形のいずれか、または AttributeReference。
  • ExtendOption : 交差させるために延長する図形を指定する。
    • acExtendNone: どちらのオブジェクトも延長しない。
    • acExtendThisEntity: 基本オブジェクト(vla-object)を延長する。
    • acExtendOtherEntity: 引数として渡されたオブジェクト(IntersectObject)を延長する。
    • acExtendBoth: 両方のオブジェクトを延長する。


戻り値
交点リスト。バリアント(倍精度浮動小数点数型配列)型の VLAオブジェクト
ExtendOption の設定によってもオブジェクトが交差しない場合は nil。


  • 注意 : 2 つのオブジェクトが交差しない場合は、データは返されない。一方または両方のオブジェクトを延長した場合に交差点となる点を要求することができる。たとえば、下図では、Line-1 はこのメソッドを呼び出す基本オブジェクト、Line-3 はパラメータとして渡されるオブジェクト。

渡された ExtendOption が acExtendThisEntity の場合、LINE-1 を延長した場合に Line-3 と交差する点として、点 B が返る。ExtendOption が acExtendOtherEntity の場合、Line-3 が延長されても、Line-1 とは交差しないためデータは返らない(nil)。 交点の種類が acExtendBothEntities で、パラメータの図形として Line-2 が渡された場合には、点 A が返る。ExtendOption が acExtendNone で、パラメータの図形が Line-2 の場合、データは nil 。

Intersectwith.png


サンプル
(vl-load-com)
(defun c:Example_IntersectWith()
    ;; 線と円を作成して交点を検出するサンプル
    (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

    ;; 線を作成
    (setq startPt (vlax-3d-point -1 -1 0)
          endPt (vlax-3d-point 5 5 0))  

    (setq modelSpace (vla-get-ModelSpace doc))  
    (setq lineObj (vla-AddLine modelSpace startPt endPt))
        
    ;; 円を作成
    (setq centerPt (vlax-3d-point 1 1 0)
          radius 1)
    (setq circleObj (vla-AddCircle modelSpace centerPt radius))
    (vla-ZoomAll (vlax-get-acad-object))
      
    ;; 線と円の交点を探す
    (setq intPoints (vla-IntersectWith lineObj circleObj acExtendNone))
    
    ;; 交点を出力
    (setq I 0
          j 0
          k 0)
    (if (/= (type intPoints) vlax-vbEmpty)
        (while (>= (vlax-safearray-get-u-bound (vlax-variant-value intPoints) 1) I)
            (setq tempPoint (vlax-safearray->list (vlax-variant-value intPoints)))
            (setq str (strcat "交点[" (itoa k) "] は : " 
                               (rtos (nth j tempPoint) 2) ","
                               (rtos (nth (1+ j) tempPoint) 2) ","
                               (rtos (nth (+ j 2) tempPoint) 2)))
            (alert str)
            (setq str ""
                  I (+ I 2)
                  j (+ j 3)
                  k (1+ k))
        )))



関連事項