AutoLispのssgetについて

AutoLispのssgetについて

aspectT2392
Advocate Advocate
808件の閲覧回数
4件の返信
メッセージ1/5

AutoLispのssgetについて

aspectT2392
Advocate
Advocate

添付したLispは、幅を入力すると、0,0-100,0の線を書き、これをY+側に入力した幅分オフセット。

次に、入力幅の1/2をY-側にオフセットして、3本の線を書きます。

そして、ssgetで、中央の線の開始点を通るオブジェクトを抽出し、その数を表示します。

当然、ssgetの結果は、1になるはずですが、私の環境では幅0.2までは正常に動作しますが、

幅0.1以下だとssgetの結果は3になてしまいます。

この問題の原因と、解決方法は無いでしょうか?

よろしく、お願いいたします。

(defun c:test1 ( / wid pt ss nn)
  (setq wid (getreal "幅を入力: "))
  (command "_line" "0,0" "100,0" "")
  (command "_offset" wid (entlast) "50,10" "")
  (command "_offset" (/ wid 2) (entlast) "50,0" "")
  (setq pt (cdr (assoc 10 (entget (entlast)))))
  (setq ss (ssget "C" pt pt))
  (setq nn (sslength ss))
  
  (princ "\n")
  (princ "点ptを通るオブジェクトは ")
  (princ nn)
  (princ)
)
0 件のいいね
解決済み
809件の閲覧回数
4件の返信
返信 (4)
メッセージ2/5

N.H1971
Advisor
Advisor
解決済み

>0,0-100,0の線を書き、これをY+側に入力した幅分オフセット。次に、入力幅の1/2をY-側にオフセット

と書かれていますが、

1.(0,0)(0,100)の線分をY+側に幅分オフセット

2. 1の線分を入力幅の1/2でY-側にオフセット

というのがお望みの動作ということで合っていますか?

質問文では、最初の線分のY+側に入力幅、Y-側に1/2入力幅とも読めたので・・・

 

本題の

>幅0.1以下だとssgetの結果は3になってしまいます。

これは、作図しているウインドウの表示範囲の大きさに影響を受けているのだと思われます。

ssgetの前に、ZOOMで作図したオブジェクトを含む範囲に表示を変更すると、うまく取得できると思います。

(defun c:test2 ( / wid pt ss nn en1 en2)
  (setq wid (getreal "幅を入力: "))
  (command "_line" "0,0" "100,0" "")
  (setq en1 (entlast))
  (command "_offset" wid (entlast) "50,10" "")
  (setq en2 (entlast))
  (command "_offset" (/ wid 2) (entlast) "50,0" "")
  (setq pt (cdr (assoc 10 (entget (entlast)))))
  
  (command-s "ZOOM" "O" en1 en2 (entlast) "")
  (command-s "ZOOM" "S" "0.8x")
  (setq ss (ssget "C" pt pt))
  (setq nn (sslength ss))
  
  (princ "\n")
  (princ "点ptを通るオブジェクトは ")
  (princ nn)
  (princ)
)


H N
AUG-JP Staff
AUG-JP

メッセージ3/5

aspectT2392
Advocate
Advocate

@N.H1971 

表示範囲に対して、選択範囲が小さすぎると正常な結果が得られないんですね。

ありがとうございました。

 

メッセージ4/5

poki9900
Advocate
Advocate
解決済み

>表示範囲に対して、選択範囲が小さすぎる

 

改良後のコードであっても、オフセット幅を0.1とかにすると、
100の長さに対して0.1なので、小さすぎる場合があります。

 

(command-s "ZOOM" "O" en1 en2 (entlast) "")
(command-s "ZOOM" "S" "0.8x")

 

この部分を

 

(command-s "ZOOM" "C" pt wid)

 

にすれば、より安全だと思います。

メッセージ5/5

aspectT2392
Advocate
Advocate

ご指摘ありがとうございます。

でも、改めてssgetが画面表示に左右されたり、Lineコマンドが狭い部分でオブジェクトスナップに左右されたり

この当たりは、知らないと非常に厄介ですね

0 件のいいね