TOP PAGE > 記事閲覧
線分を半分の長さに変更(lisp)
投稿日 : 2015/08/20(Thu) 10:25
投稿者 アルサポ
参照先
線分の長さを半分に短くするLispです。
利用する機会は少ないと思いますが、勉強のために掲載します。

使用する機会としては、
計画法面の平面図を描く時に、これを利用すると便利だと思います。


;中点で長さ変更
(defun C:BreakMid (/ ss1 ent p1 p2 mpt pt)
(prompt "\n線分を選択:")
(setq ss1 (ssget ":S" '((0 . "LINE"))));線分しか選択できない
(if (/= ss1 nil) ;「/=」等しくない
(progn
(setq ent (entget (ssname ss1 0)))
(setq p1(cdr (assoc 10 ent))) ;始点座標
(setq p2(cdr (assoc 11 ent))) ;終点座標
;p3(中点)の座標を計算 中点X座標=X1+(X2-X1)/2、中点Y座標=Y1+(Y2-Y1)/2
(setq mpt (list (+ (car p1) (/ (- (car p2) (car p1)) 2)) (+ (cadr p1) (/ (- (cadr p2) (cadr p1)) 2))))

(setq OldOsmode (getvar "OSMODE")) ;現在のスナップを取得
(setvar "OSMODE" 1) ;端点スナップを設定
(setq pt (getpoint "消去する側の座標を指示:\n"))
(setvar "OSMODE" OldOsmode) ;変更したスナップをもとに戻す

(command "_break" ss1 "f" mpt pt "")
);progn
);if
(princ)
)
Re: 一時的なスナップの変更について
投稿日 : 2015/08/20(Thu) 10:46
投稿者 アルサポ
参照先
一時的なスナップの変更についての説明について

この行で現在のスナップ状態を取得しています。
(setq OldOsmode (getvar "OSMODE")) ;現在のスナップを取得

システム変数「osmode」の数値がスナップの選択状態を表しています。
その数値の詳細は、
0 NON[解除]
1 END[端点]
2 MID[中点]
4 CEN[中心]
8 NOD[点]
16 QUA[四半円点]
32 INT[交点]
64 INS[挿入基点]
128 PER[垂線]
256 TAN[接線]
512 NEA[近接点]
1024 QUI[クイック]
2048 APP[仮想交点]
4096 EXT[延長]
8192 PAR[平行]

複数の組み合わせで選択されている場合は、その数値を足した合計
の数値が入っています。

一時的にスナップを変更する手順としては、
まず、現在のスナップの状態の数値を取得します。

次にシステム変数「osmode」に一時的に変更したいスナップの数値を代入。
(setvar "OSMODE" 1) ;端点スナップを設定
この場合は端点スナップに設定したいので「1」を代入している。

最後に最初に取得したスナップの状態の数値を代入して元の数値に戻す。
(setvar "OSMODE" OldOsmode) ;変更したスナップをもとに戻す
Re: 線分を半分の長さに変更(lisp)
投稿日 : 2015/08/21(Fri) 15:08
投稿者 デジ
参照先
スナップの設定ありがとうです。
私の場合は2種類要すればいいからさっそく登録します。

(defun C:tuujyou ()
(setq OldOsmode (getvar "OSMODE")) ;現在のスナップを取得
(setvar "OSMODE" 39);1+2+4+32=39 通常モード
(setvar "OSMODE" OldOsmode)
)


(defun C:tyokkou ()
(setq OldOsmode (getvar "OSMODE")) ;現在のスナップを取得
(setvar "OSMODE" 640);128+512=640 直行モード
(setvar "OSMODE" OldOsmode)
)

"OSMODE"を戻すから特殊なスナップを使う時だけ登録すればいいね!
これでいいのかな?(笑)
Re: 線分を半分の長さに変更(lisp)
投稿日 : 2015/08/24(Mon) 09:10
投稿者 アルサポ
参照先
デジさんへ
使い方は間違いはありません

使う場面によって一時的にスナップを変えて、
使い終わったらスナップの設定をもとに戻す方法は、
lispで作図を行うときに、よく使うと便利がいいのではないでしょうか?
ページの上に移動

- WEB PATIO -