Vla-addregion

提供:GizmoLabs - だいたい CAD LISP なサイト
2014年6月22日 (日) 16:39時点におけるGizmon (トーク | 投稿記録)による版 (ページの作成:「{{AutoLISP}} ; 構文 : (vla-addregion ''vla-object'' ''ObjectList'') ; 機能 : オブジェクトと他の 3D ソリッドまたはリージョン オブジェクト...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
構文
(vla-addregion vla-object ObjectList)


機能
オブジェクトと他の 3D ソリッドまたはリージョン オブジェクトとの間で、ブール演算(和、交差、または差)を実行する。


引数
  • vla-object … メソッドが適用される VLA オブジェクト (Block、ModelSpace、PaperSpace)
  • ObjectList … リージョンとなる閉じた同一平面を形成するオブジェクトの配列。 (Arc、Circle、Ellipse、Line、LWPolyline、Spline)


戻り値
生成されたリージョンの VLA オブジェエクトの配列
  • memo:
    • このメソッドは、曲線の入力配列によって形成される閉じたループからリージョンを作成する。閉じた 2D および平面 3D ポリラインを個別のリージョンに変換し、次に閉じた平面ループを形成するポリライン、線分、および曲線を変換する。3 本以上の曲線が 1 つの端点を共有する場合、最終的なリージョンは任意に決定される。
    • Explode メソッドを使用して、リージョンを個々のループに分解することができる。vla-boolean メソッドを使用すれば、別のソリッドやリージョンとの交差、和、または差によって、合成 3D ソリッドや合成リージョンを作成することができる。
    • 作成される Region オブジェクトの総数は、Ubound(objRegions) - Lbound(objRegions) + 1 となる。


サンプル

(vl-load-com)
(defun c:Example_AddRegion()
    ;; 円弧と線分からリージョンを作成するサンプル
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    (setq modelSpace (vla-get-ModelSpace doc))

    ;; 円弧の値
    (setq centerPoint (vlax-3d-point 5 3 0)
          radius 2
          startAngle 0
          endAngle 3.141592)
    (setq arc (vla-AddArc modelSpace centerPoint radius startAngle endAngle))
    
    ;; 線分の値
    (setq line (vla-AddLine modelSpace (vla-get-StartPoint arc) (vla-get-EndPoint arc)))

    (setq curves (vlax-make-safearray vlax-vbObject '(0 . 1)))
    (vlax-safearray-put-element curves 0 arc)
    (vlax-safearray-put-element curves 1 line)
  
    ;; リージョンを作成
    (setq regionObj (vla-AddRegion modelSpace curves))
    (vla-ZoomAll acadObj)
)


(defun c:exp_boolean2 ( / space e1 e2 )
  ;; 閉じた図形からリージョンを作成して
  ;; ブールするサンプル
  (vl-load-com)
  (setq space
    (vlax-get-property (vla-get-ActiveDocument (vlax-get-acad-object))
      (if (= 1 (getvar 'CVPORT))
        'Paperspace
        'Modelspace
      )))

  (if
    (and
      (setq e1 (car (entsel "\n外周図形を選択 : ")))
      (vlax-curve-isClosed e1)
      (setq e2 (car (entsel "\n内周図形を選択 : ")))
      (vlax-curve-isClosed e2)
    )
    (vla-Boolean
      (car (vlax-invoke space 'AddRegion (list (vlax-ename->vla-object e1)))) acSubtraction
      (car (vlax-invoke space 'AddRegion (list (vlax-ename->vla-object e2))))
    )
  )

  (princ)
)


関連事項