;;Kim_WiringS.lsp
;;Command Name "ws"
;;電気設備用S字配線
;;
;;April 30,2006 Original
;;May 5,2006 Version 1.0
;;Coding by Kim Grossa
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;startP(Xs,Ys)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;midPS(Xms,Yms)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;midPE(Xme,Yme)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;endP(Xe,Ye)
;;
;;*****使用方法
;;コマンドラインで"ws"と入力し、Enter
;;
;;最初の点をクリック
;;最後の点をクリック
;;
;;最後の点の近くをクリック(ポリライン描画方向 横方向をクリック:X軸 縦方向をクリック:Y軸)
;;
;;<現在のオフセット値が表示される>
;;この値で良いなら Enter
;;変更する場合は"c"と入力し、Enter,新しい値を入力
;;
;;<ポリラインが描画される>
;;<現在の丸め半径が表示される>
;;この値で良いなら Enter
;;変更する場合は"c"と入力し、Enter,新しい値を入力
;;
(defun C:ws()
;*****現在のエンティティスナップの設定を退避
(setq oldES (getvar "OSMODE"))
;*****シンボル用エンティティスナップを設定
(setvar "OSMODE" 58)
;2(Midpoint) + 8(Point snap) + 16(Quadrant) + 32(Intersection)
;*****始点、終点を取得
(setq startP (getpoint "\n<Start point>:"))
(setq endP (getpoint startP "\n<End point>:"))
;*****始点、終点の座標の計算
(setq Xs (car startP)) ;始点のX座標
(setq Ys (car (cdr startP))) ;始点のY座標
(setq Xe (car endP)) ;終点のX座標
(setq Ye (car (cdr endP))) ;終点のY座標
;*****エンティティスナップをOff
(setvar "OSMODE" 0)
;*****方向点を取得
(setq directP (getpoint "\n<Direction>:"))
;*****ポリライン描画方向を判定
(setq Xd (car directP)) ;方向点のX座標
(setq Yd (car (cdr directP)));方向点のY座標
(setq DistX (abs (- Xd Xe))) ;X軸方向の距離
(setq DistY (abs (- Yd Ye))) ;Y軸方向の距離
(cond
((> DistX DistY)(setq XYD "x"));X軸方向に描画
((> DistY DistX)(setq XYD "y"));Y軸方向に描画
)
;*****エンティティスナップの設定を復旧
(setvar "OSMODE" oldES)
;*****オフセットの値の入力
(princ "\n(Offset=");現在の設定値を表示
(princ OffS)
(princ "):")
(setq str1(getstring "<Enter to use this offset>/Change:"))
(cond
((= str1 "")()) ;現在の設定値を使用
((or(= str1 "c")(= str1 "C"))(setq OffS(getreal"New Offset:")));設定値の変更
)
;*****中間点の座標の計算
(cond
((and(> Ye Ys)(= XYD "y"));終点が始点の上側 Y軸
(setq Xms Xs)(setq Yms (+ Ys OffS))(setq Xme Xe)(setq Yme (- Ye OffS)))
((and(> Ys Ye)(= XYD "y"));終点が始点の下側 Y軸
(setq Xms Xs)(setq Yms (- Ys OffS))(setq Xme Xe)(setq Yme (+ Ye OffS)))
((and(> Xe Xs)(= XYD "x"));終点が始点の右側 X軸
(setq Xms (+ Xs OffS))(setq Yms Ys)(setq Xme (- Xe OffS))(setq Yme Ye))
((and(> Xs Xe)(= XYD "x"));終点が始点の左側 X軸
(setq Xms (- Xs OffS))(setq Yms Ys)(setq Xme (+ Xe OffS))(setq Yme Ye))
)
;*****中間点のリストを作成
(setq midPS (list Xms Yms)) ;中間点Sのリスト
(setq midPE (list Xme Yme)) ;中間点Eのリスト
;*****ポリラインを描く
(command "POLYLINE" startP midPS midPE endP "")
;始点、中間点S、中間点E、終点を通るポリラインを描画
;*****ポリラインを選択
(setq mypolyline(entlast))
;*****丸めの半径の入力
(setq Frad (getvar "filletrad"));現在の設定値を取得
(princ "\n(Radius=");現在の設定値を表示
(princ Frad)
(princ "):")
(setq str1(getstring "<Enter to use this radius>/Change:"))
(cond
((= str1 "")
()) ;現在の設定値を使用
((or(= str1 "c")(= str1 "C"))
(setq real1 (getreal"New Radius:"))(setvar "filletrad" real1));設定値の変更
)
;*****ポリラインを丸める
(command "FILLET" "P" mypolyline);ポリラインを丸める
)
;;Command Name "ws"
;;電気設備用S字配線
;;
;;April 30,2006 Original
;;May 5,2006 Version 1.0
;;Coding by Kim Grossa
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;startP(Xs,Ys)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;midPS(Xms,Yms)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;midPE(Xme,Yme)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;endP(Xe,Ye)
;;
;;*****使用方法
;;コマンドラインで"ws"と入力し、Enter
;;
;;最初の点をクリック
;;最後の点をクリック
;;
;;最後の点の近くをクリック(ポリライン描画方向 横方向をクリック:X軸 縦方向をクリック:Y軸)
;;
;;<現在のオフセット値が表示される>
;;この値で良いなら Enter
;;変更する場合は"c"と入力し、Enter,新しい値を入力
;;
;;<ポリラインが描画される>
;;<現在の丸め半径が表示される>
;;この値で良いなら Enter
;;変更する場合は"c"と入力し、Enter,新しい値を入力
;;
(defun C:ws()
;*****現在のエンティティスナップの設定を退避
(setq oldES (getvar "OSMODE"))
;*****シンボル用エンティティスナップを設定
(setvar "OSMODE" 58)
;2(Midpoint) + 8(Point snap) + 16(Quadrant) + 32(Intersection)
;*****始点、終点を取得
(setq startP (getpoint "\n<Start point>:"))
(setq endP (getpoint startP "\n<End point>:"))
;*****始点、終点の座標の計算
(setq Xs (car startP)) ;始点のX座標
(setq Ys (car (cdr startP))) ;始点のY座標
(setq Xe (car endP)) ;終点のX座標
(setq Ye (car (cdr endP))) ;終点のY座標
;*****エンティティスナップをOff
(setvar "OSMODE" 0)
;*****方向点を取得
(setq directP (getpoint "\n<Direction>:"))
;*****ポリライン描画方向を判定
(setq Xd (car directP)) ;方向点のX座標
(setq Yd (car (cdr directP)));方向点のY座標
(setq DistX (abs (- Xd Xe))) ;X軸方向の距離
(setq DistY (abs (- Yd Ye))) ;Y軸方向の距離
(cond
((> DistX DistY)(setq XYD "x"));X軸方向に描画
((> DistY DistX)(setq XYD "y"));Y軸方向に描画
)
;*****エンティティスナップの設定を復旧
(setvar "OSMODE" oldES)
;*****オフセットの値の入力
(princ "\n(Offset=");現在の設定値を表示
(princ OffS)
(princ "):")
(setq str1(getstring "<Enter to use this offset>/Change:"))
(cond
((= str1 "")()) ;現在の設定値を使用
((or(= str1 "c")(= str1 "C"))(setq OffS(getreal"New Offset:")));設定値の変更
)
;*****中間点の座標の計算
(cond
((and(> Ye Ys)(= XYD "y"));終点が始点の上側 Y軸
(setq Xms Xs)(setq Yms (+ Ys OffS))(setq Xme Xe)(setq Yme (- Ye OffS)))
((and(> Ys Ye)(= XYD "y"));終点が始点の下側 Y軸
(setq Xms Xs)(setq Yms (- Ys OffS))(setq Xme Xe)(setq Yme (+ Ye OffS)))
((and(> Xe Xs)(= XYD "x"));終点が始点の右側 X軸
(setq Xms (+ Xs OffS))(setq Yms Ys)(setq Xme (- Xe OffS))(setq Yme Ye))
((and(> Xs Xe)(= XYD "x"));終点が始点の左側 X軸
(setq Xms (- Xs OffS))(setq Yms Ys)(setq Xme (+ Xe OffS))(setq Yme Ye))
)
;*****中間点のリストを作成
(setq midPS (list Xms Yms)) ;中間点Sのリスト
(setq midPE (list Xme Yme)) ;中間点Eのリスト
;*****ポリラインを描く
(command "POLYLINE" startP midPS midPE endP "")
;始点、中間点S、中間点E、終点を通るポリラインを描画
;*****ポリラインを選択
(setq mypolyline(entlast))
;*****丸めの半径の入力
(setq Frad (getvar "filletrad"));現在の設定値を取得
(princ "\n(Radius=");現在の設定値を表示
(princ Frad)
(princ "):")
(setq str1(getstring "<Enter to use this radius>/Change:"))
(cond
((= str1 "")
()) ;現在の設定値を使用
((or(= str1 "c")(= str1 "C"))
(setq real1 (getreal"New Radius:"))(setvar "filletrad" real1));設定値の変更
)
;*****ポリラインを丸める
(command "FILLET" "P" mypolyline);ポリラインを丸める
)
※コメント投稿者のブログIDはブログ作成者のみに通知されます