Vla-setwidth

提供:GizmoLabs - だいたい CAD LISP なサイト
2015年11月8日 (日) 18:05時点におけるGizmon (トーク | 投稿記録)による版 (ページの作成:「{{AutoLISP}} ; 構文 : (vla-setwidth ''vla-object'' ''SegmentIndex '' ''StartWidth '' ''EndWidth'') ; 機能 : ポリラインの セグメント インデックスを...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
構文
(vla-setwidth 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_SetWidth()
    ;; 選択したポリラインの各セグメントの幅が表示するサンプル
    (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)
	                  ;; 幅の値を取得。
	                  (setq promptStart (strcat "\nセグメントの始点での幅を指定。" 
                                                (rtos (vlax-safearray-get-element retCoord i) 2) ","
                                                (rtos (vlax-safearray-get-element retCoord (1+ i)) 2) " ==> "))
	                  (setq promptEnd (strcat "\nセグメントの終点での幅を指定。 ==> "))
		                  (setq StartWidth (vla-GetReal (vla-get-Utility doc) promptStart))
	                  (setq EndWidth (vla-GetReal (vla-get-Utility doc) promptEnd))
	                  ;; 現在のセグメントの幅を設定
                      (vla-SetWidth returnObj segment StartWidth EndWidth)
	                  ;; もし次のセグメントがあれば幅を取得する準備をする。
	                  (setq i (+ i 2)
	                        segment (1+ segment)
	                        nbr_of_segments (1- nbr_of_segments))
              	  )
            )
            (alert "ポリラインじゃないし")
            )
       )
       (alert "図形選べてなす.")
    )
)

関連事項