Jagaimo
図形のプロパティを変更する練習問題です。今回は円を移動させるコマンドの解答編です。
解答
コマンド MOVE[移動]を使う場合
単に移動させる場合は単純にこれが一番いいと思います。
(defun c:test ( / Obj)
(setq Obj (car(entsel)))
(command-s "._MOVE" Obj "" "0,0" "150,50")
(princ))
DXF図形情報を置き換える場合
DXF図形情報の書き換え、点座標編集の練習をしたい人はコチラの方法で。
- 円の中心の点座標を取得
- 中心点にXに150Yに50を足して新しい点座標を作成
- DXF図形情報の中心点の情報を上書き
(defun c:test ( / Ent Pt PtX PtY NewPt)
(setq Ent (entget (car(entsel "円を選択:"))))
(setq Pt (cdr (assoc 10 Ent)))
(setq PtX (+ 150 (car Pt))
PtY (+ 50 (cadr Pt))
)
(setq NewPt (list PtX PtY 0))
(setq Ent (subst (cons 10 NewPt) (assoc 10 Ent) Ent))
(entmod Ent)
(princ))
DXF図形情報とコマンドの合わせ技
取得した点と新しく作った点の2点を使ってコマンド移動させる方法もあります。
- 円の中心の点座標を取得
- 中心点にXに150Yに50を足して新しい点座標を作成
- コマンドMOVE[移動]で、取得した点と新しい点の2点を指定
(defun c:test ( / Obj Ent Pt PtX PtY NewPt)
(setq Obj (car(entsel "円を選択:")))
(setq Ent (entget Obj))
(setq Pt (cdr (assoc 10 Ent)))
(setq PtX (+ 150 (car Pt))
PtY (+ 50 (cadr Pt))
)
(setq NewPt (list PtX PtY 0))
(command-s "._MOVE" Obj "" Pt NewPt)
(princ))
VLISPを使う場合
VLISPを使うとこんな感じになります。
(defun c:test ( / VlObj Pt VlObj PtX PtY)
(setq VlObj (vlax-ename->vla-object (car(entsel "円を選択:"))))
(setq Pt (vlax-safearray->list
(vlax-variant-value
(vla-get-center VlObj)
)
)
)
(setq PtX (+ 150 (car Pt))
PtY (+ 50 (cadr Pt))
)
(vla-put-center VlObj (vlax-3D-point PtX PtY 0))
(princ))
関連記事
移動点を指定するコマンドを作るときは、オブジェクトスナップが影響してエラーの原因になるので、対策が必要です。
Comments