Sponsored links

【AutoLISP エラー対策】 TRIM[トリム] が上手くいかない

Sponsored links
エラー対策
Sponsored links

トリムをする部分が上手くできない!

画面の外に指定場所があるのが原因かも。

ズームでトリムしたい場所が必ず画面に入るようにしてみて。

Sponsored links

例えば

星を描くコマンドSTAR。
オブジェクトスナップも影響するのでオフにして試してみて下さい。
(オブジェクトスナップ対策は別記事で。)

(defun c:STAR ( / L P B C D E F)
   
  (defun L (A) (polar P(* pi (/ A 180)) 600))
  (setq P (getPoint "星の中心点:") B (L 90.0) C (L 306.0) D (L 162.0) E (L 18.0) F (L 234.0))
   
  (command-s "._LINE" B C D E F B "")

  (foreach X (list B C D E F)
    (command-s "._TRIM" "" "F" P (polar P (angle P X) (/(distance P X)2)) """"))

(princ));defun

今回のコマンドは星五角形作成し、さらにコマンドTRIM[トリム]で余分な線を消して星にします。

しかし、上記のコマンドだと、変なトリムになってしまう場合があります。

原因

トリムする箇所とトリムをする指定点が画面上に無い時に起こります。

対策

この場合は、トリム直前にコマンドZOOM[ズーム]を使って、トリム箇所が画面表示されている状態ににしてからトリムを実行することで、このエラーは回避できます。

コマンドZOOM[ズーム]には、[オブジェクト範囲(E)]というオプションがあるので、オブジェクト範囲で全体表示をするか、[窓(W)]オプションで星の範囲を中心点から出して指定できます。

ズーム箇所が変わるのが嫌な場合は、トリム後に再びコマンドコマンドZOOM[ズーム]を使い、オプション[前画面(P)]を使うと、元のズーム位置に戻すことができます。

窓オプションを使った場合

(defun c:STAR2 ( / L P B C D E F Pt1 Pt2)
   
  (defun L (A) (polar P(* pi (/ A 180)) 600))
  (setq P (getPoint "星の中心点:") B (L 90.0) C (L 306.0) D (L 162.0) E (L 18.0) F (L 234.0))
   
  (command-s "._LINE" B C D E F B "")

;;;;;;;; ズーム用の点座標;;;;;;;;;;;
     (setq Pt1 
       (list 
            (+ (car P) 600)
            (+ (cadr P) 600)
            0
       );list
    );setq Pt1 
;---------------------------------------
    (setq Pt2 
       (list 
            (- (car P) 600)
            (- (cadr P) 600)
            0
       );list
    );setq Pt2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
   
  (command-s "._ZOOM" "_W" Pt1 Pt2)   ;;;;窓ズーム Pt1 & Pt2;;;;

  (foreach X (list B C D E F)
    (command-s "._TRIM" "" "F" P (polar P (angle P X) (/(distance P X)2)) """"))
  
(princ));defun

全体ズームしてから元の表示に戻す場合

(defun c:STAR1 ( / L P B C D E F)
   
  (defun L (A) (polar P(* pi (/ A 180)) 600))
  (setq P (getPoint "星の中心点:") B (L 90.0) C (L 306.0) D (L 162.0) E (L 18.0) F (L 234.0))
   
  (command-s "._LINE" B C D E F B "")
   
  (command-s "Zoom" "E") ; ズームオブジェクト範囲

  (foreach X (list B C D E F)
    (command-s "._TRIM" "" "F" P (polar P (angle P X) (/(distance P X)2)) """"))

  (command-s "Zoom" "P") ; ズーム範囲をを元に戻す
 
(princ));defun

まとめ

  • トリムを使うAutoLISPを作成したとき、トリム箇所が画面上に無いとエラーになる。
  • コマンドZOOM[ズーム]、オブジェクト範囲か窓を使い、トリム箇所が画面上にある状態にしてからトリムをするようにする。
  • 再びコマンドZOOM[ズーム]で前画面(P)オプションを入れることで元のズーム位置に戻る。

関連記事

点座標の編集方法です。

AutoCAD コマンドの使い方で、ズームコマンドを使っている記事です。

Comments