Vla-put-controlpoints

提供:GizmoLabs - だいたい CAD LISP なサイト
2015年11月1日 (日) 11:55時点におけるGizmon (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
構文
(vla-put-controlpoints vla-object list)


機能
スプラインの制御点を指定する。


引数
  • vla-object … Spline の VLAオブジェクト
  • list … スプラインに対する 3D WCS 制御点の配列


  • 注意

NumberOfControlPoints プロパティを使用すると、スプラインの制御点の数が分かる。


戻り値
nil


サンプル
(vl-load-com)
(defun c:Example_ControlPoints()
    ;; モデル空間におけるスプラインオブジェクトを作成し、
    ;; スプラインの制御点を読み取り制御点を修正するサンプル。
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    
    ;; スプラインの設定
    (setq startTan (vlax-3d-point 0.5 0.5 0)
          endTan (vlax-3d-point 0.5 0.5 0)
          fitPoints (vlax-make-safearray vlax-vbDouble '(0 . 8)))
    (vlax-safearray-fill 
        fitPoints 
        '(0 0 0    5 5 0   10 0 0))
    
    ;; スプラインを作成
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq splineObj (vla-AddSpline modelSpace fitPoints startTan endTan))
    (vla-ZoomAll acadObj)
    
    ;; 制御点を表示
    (setq ControlPoints (vlax-variant-value (vla-get-ControlPoints splineObj)))
    
    ;; 3つのグループ
    (setq UserMessage ""
          iPoint 0
          iCount 0)
  
    (while (>= (vlax-safearray-get-u-bound ControlPoints 1) iCount)
        (setq iPoint (1+ iPoint))
        (setq UserMessage 
           (strcat UserMessage (itoa iPoint) ")  "
                   (rtos (nth iCount (vlax-safearray->list ControlPoints)) 2) ", "
                   (rtos (nth (+ iCount 1) (vlax-safearray->list ControlPoints)) 2) ", "
                   (rtos (nth (+ iCount 2) (vlax-safearray->list ControlPoints)) 2) "\n"
           )
    )

        (setq iCount (+ iCount 3))
    )
    
    (alert (strcat "The " (itoa (vla-get-NumberOfControlPoints splineObj)) " スプラインの制御点は : " "\n\n" UserMessage))
  
    ;; 制御点を変更
    (setq newFitPoint (vlax-3d-point 8 2 0))
  
    (vla-AddFitPoint splineObj 3 newFitPoint)
    (setq ControlPoints (vlax-variant-value (vla-get-ControlPoints splineObj)))
    (vla-ZoomAll acadObj)
        
    ;; 新しい制御点を表示
    (setq UserMessage ""
          iPoint 0
          iCount 0)
  
    (while (>= (vlax-safearray-get-u-bound ControlPoints 1) iCount)
        (setq iPoint (1+ iPoint))
        (setq UserMessage 
           (strcat UserMessage (itoa iPoint) ")  "
                   (rtos (nth iCount (vlax-safearray->list ControlPoints)) 2) ", "
                   (rtos (nth (+ iCount 1) (vlax-safearray->list ControlPoints)) 2) ", "
                   (rtos (nth (+ iCount 2) (vlax-safearray->list ControlPoints)) 2) "\n"
        )
    )

        (setq iCount (+ iCount 3))
    )

    (alert (strcat "The " (itoa (vla-get-NumberOfControlPoints splineObj)) " スプラインの制御点は :  " "\n\n" UserMessage))
)



関連事項