この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

角度のついた線に配列複写
こんにちは。よろしくお願いします。
autocad2024を使用しています。

角度(直角)のついた線に 円を配列複写できますでしょうか。
複写からA選択、複写数指定、F指示で行っていますが、マクロ化などできますでしょうか。

よろしくお願いいたします。
  • se
  • 2024/04/17 (Wed) 11:16:12
Re: 角度のついた線に配列複写
マクロ化というのなら、質問者さんが今どのように操作されているかを書かれたほうが良いと思います。
あるいは、どういうルールで配列複写しているのか。

画像を見るに、L字になっているポリラインですが、始点側・終点側それぞれから円の配列はスタートしなければならないようです。
配列複写のピッチは、円の直径になるのでしょうか。
また、配列複写の回数は、線の長さ/円の直径の整数切り上げですか?(入り隅の円はポリラインに接しない可能性がある)
それとも、ポリラインに接することが条件でしょうか?(線の長さ/円の直径の余り)/円の半径>=1

それと、L字のポリラインに接続する直線は、かならず直角になりますか?
  • LUNE
  • 2024/04/18 (Thu) 11:02:44
Re: 角度のついた線に配列複写
配列複写のダイナミックブロックを作成する、という手もあります。
半径1の円で作成しておき、円半径はブロックの尺度で指定するという方法です。
  • LUNE
  • 2024/04/18 (Thu) 11:30:49
Re: 角度のついた線に配列複写
LUNE様
ありがとうございます。説明不足で申し訳ございません。画層を添付いたします。
たまたま、ある時ふと思いました。2度することを1度で完結できればいいのにと。

ご説明いただきました文面から、1度での作図はむつかしいのでしょうね。

お知恵を拝借できればと思っています。

よろしくお願いいたします。
  • se
  • 2024/04/18 (Thu) 11:58:02
Re: 角度のついた線に配列複写
LUNE様

先の投稿を見逃しました。すみません。

ダイナミックブロックという方法があったのですね。気が付きませんでした。

これならいけると思います。

大変 お世話になりました。 ありがとうございます。
  • se
  • 2024/04/18 (Thu) 12:03:02
Re: 角度のついた線に配列複写
L字の2本の線分が同じ長さなら、どっちかやってそれを45度でミラーしたら、ちょっと手数減ります。

φ150固定で、150以下のピッチ、終点で円が接するようにするのでしょうか?


なんにせよ、ダイナミックブロックは、考え方が違いましたね。


  • LUNE
  • 2024/04/18 (Thu) 12:03:57
Re: 角度のついた線に配列複写
LUNE様

ありがとうございます。ミラーという方法もあるのですね。まったく思いもしませんでした。

2方向の円は接します。

貴重なご意見 ありがとうございました。
  • se
  • 2024/04/18 (Thu) 12:33:42
Re: 角度のついた線に配列複写
Lispですが・・・
一度でポリライン全部にと思いましたが、意外と難しかったので、ちょっと楽になる版を
接点→接点→線分の端点→線分の終点
円の直径は150で固定、コピー数は自動計算、コピーの基点のずれ自動計算

(defun c:acrc (/ ent p1 p2 cnt)
(command "circle" "T" pause pause "75")
(setq ent (entlast))
(setq p1 (getpoint "\n配列複写の基準線の始点を指定:"))
(setq p2 (getpoint "\n配列複写の基準線の終点を指定:"))
(setq cnt (if (> (/ (+ (distance p1 p2) 75) 150) (fix (/ (+ (distance p1 p2) 75) 150))) (fix (+ 1 (/ (+ (distance p1 p2) 75) 150)))(fix (+ (distance p1 p2) 75) 150)))
(command-s "copy" ent "" "non" p1 "A" cnt "F" "non" (strcat "@" (rtos (- (distance p1 p2) 75) 2) "<" (rtos (Radian->Degrees (angle p1 p2)) 2)))
(princ)
)

; Convert value in radians to degrees
(defun Radian->Degrees (nbrOfRadians)
(* 180.0 (/ nbrOfRadians pi))
)

同じ数でよければ、もう1本の線分に鏡像するのも追加できます。
  • LUNE
  • 2024/04/18 (Thu) 15:16:42
Re: 角度のついた線に配列複写
LUNE様
ありがとうございます。
こちらの環境では、下記のようにエラーが出ます。使い方が悪いせいかもしれませんがよろしくお願いいたします。


circle
円の中心点を指定 または [3 点(3P)/2 点(2P)/接、接、半(T)]: T
円の第 1 の接線に対するオブジェクト上の点を指定:
円の第 2 の接線に対するオブジェクト上の点を指定:
円の半径を指定 <75.0000>: 75
コマンド:
配列複写の基準線の始点を指定:
配列複写の基準線の終点を指定:; エラー: no function definition: RADIAN->DEGREES
  • se
  • 2024/04/18 (Thu) 17:01:25
Re: 角度のついた線に配列複写
ごめんなさい、サブルーチンを載せ忘れました。
上記を訂正したので、そちらでお願いします。
  • LUNE
  • 2024/04/18 (Thu) 17:13:05
Re: 角度のついた線に配列複写
もう一方の線分が、同じ長さの場合のmirrorコマンド追加バージョン


(defun c:acrc (/ ent p1 p2 cnt p3 entp ss pt1 pt2 pt)
(command "circle" "T" pause pause "75")
(setq ent (entlast))
(setq p1 (getpoint "\n配列複写の基準線の始点を指定:"))
(setq p2 (getpoint "\n配列複写の基準線の終点を指定:"))
(setq cnt (if (> (/ (+ (distance p1 p2) 75) 150) (fix (/ (+ (distance p1 p2) 75) 150))) (fix (+ 1 (/ (+ (distance p1 p2) 75) 150)))(fix (+ (distance p1 p2) 75) 150)))
(command-s "copy" ent "" "non" p1 "A" cnt "F" "non" (strcat "@" (rtos (- (distance p1 p2) 75) 2) "<" (rtos (Radian->Degrees (angle p1 p2)) 2))"")

(setq entp (entget (ssname (ssget "_C" p2 p2 '((0 . "*POLYLINE"))) 0)))
(setq ss (ssget "_C" (cdr (assoc 10 (entget ent))) (cdr (assoc 10 (entget (entlast)))) '((0 . "CIRCLE"))))
(setq pt1 (cdr (assoc 10 entp)))
(setq pt2 (cdr (assoc 10 (reverse entp))))
(setq pt (list (/ (+ (car pt1) (car pt2)) 2) (/ (+ (cadr pt1) (cadr pt2)) 2)))

(command-s "mirror" ss "" "non" p2 "non" pt "N")

(princ)
)

; Convert value in radians to degrees
(defun Radian->Degrees (nbrOfRadians)
(* 180.0 (/ nbrOfRadians pi))
)
  • LUNE
  • 2024/04/18 (Thu) 17:15:18
Re: 角度のついた線に配列複写
LUNE様
ありがとうございます。

動作確認しました。一つお願いがあります。複写配列の中のF(フィット)の機能を入れることができますでしょうか。

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

  • se
  • 2024/04/18 (Thu) 17:26:17
Re: 角度のついた線に配列複写
>複写配列の中のF(フィット)の機能を入れることができますでしょうか。

どのような操作をご希望ですか?
自分でフィットする始点・終点を指定したい、ということでしょうか。
  • LUNE
  • 2024/04/19 (Fri) 09:00:38
Re: 角度のついた線に配列複写
作ってみました

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;r1;半径入力^X\;n1;個数入力^X\;to;1,,,,,,,)$(nth,$(getenv,to),,offset;;オブジェクト選択(R-Clickで終了)^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;to;1;select;non;@;non;@;;setenv;to;2,^Csetenv;to;0)""",,,,,,)$(nth,$(getenv,to),,,;p1;$(getvar,LASTPOINT);undo;be;explode;non;@;lengthen;non;@;dy;;setenv;to;3,,,,,)$(nth,$(getenv,to),,,,;l1;$(-,$(getvar,perimeter),$(getenv,r1));undo;e;u;setenv;to;4,,,,)$(nth,$(getenv,to),,,,,offset;;オブジェクト選択(R-Clickで終了)^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;to;4;select;non;@;non;@;;setenv;to;5,^Csetenv;to;0)""",,,)$(nth,$(getenv,to),,,,,,;p2;$(getvar,LASTPOINT);ucs;ob;non;$(getenv,p1);setenv;to;6,,)$(nth,$(getenv,to),,,,,,,circle;non;$(getenv,r1)","-$(getenv,r1);$(getenv,r1);copy;l;;non;$(getenv,r1)<E;a;$(getenv,n1);f;non;@$(getenv,l1)<E;ucs;p;setenv;to;7,)$(nth,$(getenv,to),,,,,,,,ucs;ob;non;$(getenv,p2);circle;non;$(getenv,r1)","$(getenv,r1);$(getenv,r1);copy;l;;non;$(getenv,r1)<E;a;$(getenv,n1);f;non;@$(getenv,l1)<E;ucs;p;setenv;to;0)^M


使用方法
1.マクロ起動
2.半径入力
3.個数入力
4.ポリラインの端点(提示画像の左上端点)付近をクリック
5.ポリラインの端点(提示画像の右下端点)付近をクリック

以上です


※、端点の指定順番を逆にするとできません
  • chibi-tom
  • 2024/04/19 (Fri) 12:37:49
Re: 角度のついた線に配列複写
手数は少し増えますが
方向は問題なしかな?

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;r1;半径入力^X\;n1;個数入力^X\;to;1,,,,,,)$(nth,$(getenv,to),,offset;;オブジェクト選択(R-Clickで終了)^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;to;1;select;non;@;non;@;;setenv;to;2,^Csetenv;to;0)""",,,,,)$(nth,$(getenv,to),,,;p1;$(getvar,LASTPOINT);undo;be;explode;non;@;lengthen;non;@;dy;;setenv;to;3,,,,)$(nth,$(getenv,to),,,,;l1;$(-,$(getvar,perimeter),$(getenv,r1));undo;e;u;ucs;ob;non;$(getenv,p1);setenv;to;4,,,)$(nth,$(getenv,to),,,,,circle;t;tan;$(getenv,r1)<E;\$(getenv,r1);copy;l;;non;$(getenv,r1)<E;a;$(getenv,n1);f;non;@$(getenv,l1)<E;ucs;p;setenv;to;5,,)$(nth,$(getenv,to),,,,,,offset;;オブジェクト選択(R-Clickで終了)^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;to;5;select;non;@;non;@;;setenv;to;6,^Csetenv;to;0)""",)$(nth,$(getenv,to),,,,,,,ucs;ob;non;@;circle;t;tan;$(getenv,r1)<E;\$(getenv,r1);copy;l;;non;$(getenv,r1)<E;a;$(getenv,n1);f;non;@$(getenv,l1)<E;ucs;p;setenv;to;0)^M

使用方法
1.マクロ起動
2.半径入力
3.個数入力
4.ポリラインの端点付近をクリック
5.接線の2本目を選択
6.ポリラインの端点付近をクリック
7.接線の2本目を選択

以上です

  • chibi-tom
  • 2024/04/19 (Fri) 13:26:36
Re: 角度のついた線に配列複写
LUNE様
ありがとうございました。修正いただいたLISPは動作確認しました。ミラーバージョンは エラー: 引数のタイプが間違っています: numberp: nil とエラーが出ます。

chibi-tom様
ありがとうございます。マクロがきっちり動作いたしました。
本当にありがとうございます。

  • se
  • 2024/04/22 (Mon) 07:39:54
Re: 角度のついた線に配列複写
ミラーバージョン、動きませんか。
配列個数の計算にちょっと誤りがあったので、再度修正してみました。

が、chibi-tomさんのマクロで動いているのなら、そちらの方がいいかもしれません。
  • LUNE
  • 2024/04/22 (Mon) 12:00:35
Re: 角度のついた線に配列複写
LUNE様

大変ありがとうございます。修正いただいたLISPで動作確認いたしました。

完璧に動作します。

本当にありがとうございました。
  • se
  • 2024/04/22 (Mon) 12:54:38

返信フォーム






プレビュー (投稿前に内容を確認)