Vla-getwidth

提供:GizmoLabs - だいたい CAD LISP なサイト
2015年11月8日 (日) 18:16時点におけるGizmon (トーク | 投稿記録)による版 (ページの作成:「{{AutoLISP}} ; 構文 : (vla-getwidth ''vla-object'' ''SegmentIndex '' ''StartWidth '' ''EndWidth'') ; 機能 : ポリラインの セグメント インデックスを...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
構文
(vla-getwidth vla-object SegmentIndex StartWidth EndWidth)


機能
ポリラインの セグメント インデックスを指定して、ポリラインの始点と終点の幅を取得する。


引数
  • vla-object … LWPolyline、Polyline の VLAオブジェクト
  • SegmentIndex … 幅を設定するセグメントを指定するインデックス。最初のセグメントは、インデックス 0。
  • StartWidth … 取得されたセグメントの始点の幅。
  • EndWidth … 取得されたセグメントの終点の幅。


戻り値
nil


  • 注意 : SegmentIndex は、ポリラインの特定セグメントのインデックス。たとえば、3 つのセグメントを持つポリラインには、セグメント インデックス 0、1、および 2 がある。

Polyline : このメソッドはポリラインの Type プロパティが acCubicSplinePoly または acQuadSplinePoly の場合は失敗する。


サンプル
(vl-load-com)
(defun c:Example_getWidth()
    ;; 選択したポリラインの各セグメントの幅が表示するサンプル
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
   
    (vla-GetEntity (vla-get-Utility doc) 'returnObj 'basePnt "ポリラインを選択 : ")
       
    ;; ポリラインの選択確認
    (if (/= returnObj nil)
        (progn
          (if (= (vla-get-ObjectName returnObj) "AcDbPolyline")
            (progn
	              ;; 選択したポリラインの各頂点の座標を取得。
	              ;; 座標点を配列で返す。
	              (setq retCoord (vlax-variant-value (vla-get-Coordinates returnObj)))
	    
	              (setq segment 0
	                    i (vlax-safearray-get-l-bound retCoord 1)        ;; 座標配列のインデックスを開始。
	                    j (vlax-safearray-get-u-bound retCoord 1)        ;; 座標配列の終了インデックス
	                    nbr_of_vertices (+ (/ (- j i) 2) 1))             ;; ポリラインの頂点の数
	    
	              ;; ポリライン内のセグメント数を決定。
	              ;; 閉じたポリラインは、頂点があり、多くのセグメント。
	              ;; 開いているポリラインが 1 つ少ないセグメントの頂点を持っている。
	              ;; ポリラインが閉じているかどうかは確認
	              (if (= (vla-get-Closed returnObj) :vlax-true)
	                  (setq nbr_of_segments nbr_of_vertices)
	                  (setq nbr_of_segments (1- nbr_of_vertices))
	              )
    
	              ;; ポリラインの各セグメントの幅を取得。
                  (while (>= nbr_of_segments 0)
                      ;; Get the width of the current segment
                      (vla-GetWidth returnObj segment 'StartWidth 'EndWidth)

                      (setq message_string (strcat "最初のセグメントは " 
                                                   (rtos (vlax-safearray-get-element retCoord i) 2) ","
                                                   (rtos (vlax-safearray-get-element retCoord (1+ i)) 2)
                                                   " 始まりの幅は " (rtos StartWidth 2) 
                                                   " 終わりの幅は " (rtos EndWidth 2)))
                        (alert message_string)

                        ;; Prepare to obtain width of next segment, if any
                        (setq i (+ i 2))
                        (setq segment (1+ segment))
                        (setq nbr_of_segments (1- nbr_of_segments))
                  )
            )
            (alert "ポリラインじゃないし")
            )
       )
       (alert "図形選べてなす.")
    )
)


関連事項