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

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

1ファイルのモデル空間内の複数図面を印刷方法
皆様
初めまして、お世話になります。
autocadLT2014使用しています。

1つのファイルのモデル空間に複数(20~100ほど)図面書くことがあり、
毎回手作業で印刷(pdf化)していますが、
ctrl+Pでウィンドウ開き、窓選択で図面枠の対角選んで決定という作業の繰り返しに大変時間をとられています。

これを少しでも時間短縮できればと思い、探していたところこちらにたどり着きました。
何卒宜しくお願い致します。

  • Schloa
  • 2018/08/20 (Mon) 22:32:51
Re: 1ファイルのモデル空間内の複数図面を印刷方法
その複数の図面が、全て同じ大きさで、モデル空間上に等間隔で並んでいるなら、マクロで一括印刷は可能です。(印刷条件にも寄りますが)
図面状況やプリンタ名、その他印刷設定に合わせて作る事になります。
どんな条件でも対応できる様なカスタマイズはマクロでは困難なので、ネット上でもそのようなマクロは公開されていません。

図面の大きさがそれぞれ違う(印刷尺度が違う)場合や、均等に並んでいない場合は、
それらの図面を1図面=1レイアウトで登録する事で、複数のレイアウトを一括印刷すれば良いですが、
初めにレイアウト作成とレイアウト毎の印刷設定が必要になるので、その手間が惜しいなら、向きません。
(その図面を何度も印刷するなら、やる意味は有ります)
※この方法は標準機能で行えるので、マクロ等のカスタマイズは不要です。

また、レイアウトを使わずに、モデル上で各図面をビュー登録し、その登録したビューを一括印刷する事も可能です。
これはマクロ等のカスタマイズを作成して行う方法です。
但し、尺度の違う図面が混じっている時は、一括印刷ではフィット(F)の尺度でしか印刷できないので、
尺度を指定したい場合には向きません。
レイアウトと同様に、初めにビュー登録という作業が必要になるので、その手間との天秤になります。
(場合によっては、レイアウト設定よりもビュー登録の手間の方が少ない)


マクロで印刷を行う場合ですが、マクロの特殊性で半角スペースを含む文字列を嫌います。(マクロでは半角スペースは特別な意味を持つ)
従って、印刷スタイル名、プリンター名、用紙サイズ名に半角スペースが含まれると、マクロが正常に機能しない事が多くあります。
この場合、スクリプトやLISP等のカスタマイズを使用する事になります。

といった事で、そちらの図面状況や印刷方法、印刷設定内容等により、使えるカスタマイズや方法が違ってきますので、
詳しい状況説明が必要だと思います。

乱文失礼しました。
  • Lon
  • 2018/08/21 (Tue) 09:27:15
Re: 1ファイルのモデル空間内の複数図面を印刷方法
等間隔に並んでいる場合のマクロを作ってみました。(添付画像の順に並んでいる場合限定です)

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;縦枚数;\;横枚数;\;縦間隔;\;横間隔;\;枠縦幅;\;枠横幅;\;尺度;\;Xcnt;0;;Ycnt;0;id;基点指示(1枚目の左下)^X\setenv;to;1,,,,,,)$(nth,$(getenv,to),,;GX;$(index,0,$(getvar,lastpoint));;GY;$(index,1,$(getvar,lastpoint));;to;2,,,,,)$(nth,$(getenv,to),,,;PX;$(+,$(getenv,GX),$(*,$(getenv,Xcnt),$(getenv,横間隔)));;PY;$(+,$(getenv,GY),$(*,$(getenv,Ycnt),$(getenv,縦間隔)));;to;3,,,,)$(nth,$(getenv,to),,,,-plot;y;;;;;;;;$(getenv,PX)","$(getenv,PY);$(+,$(getenv,PX),$(getenv,枠横幅))","$(+,$(getenv,PY),$(getenv,枠縦幅));1:$(getenv,尺度);;;;;;;;y;setenv;to;4,,,)$(nth,$(getenv,to),,,,,;Xcnt;$(+,$(getenv,Xcnt),1);;to;5,,)$(nth,$(getenv,to),,,,,,$(if,$(-,$(getenv,Xcnt),$(getenv,横枚数)),;to;2,;Xcnt;0;;Ycnt;$(+,$(getenv,Ycnt),1);;to;6),)$(nth,$(getenv,to),,,,,,,$(if,$(-,$(getenv,Ycnt),$(getenv,縦枚数)),;to;2,^Cid;印刷終了^X))^M

まず、マクロを実行する前に、1枚だけ印刷するための設定をして下さい。
印刷のアイコンを押して、プリンタや用紙サイズ、用紙方向、プロットスタイルやその他諸々を設定。
印刷範囲は、必ず「窓」で設定してください。
設定したら、「レイアウトに適用」を押して終了です。


マクロを実行すると、色々聞かれるので入力してください。

添付画像の状態の図面を印刷する場合、
縦枚数 = 3
横枚数 = 4
縦間隔 = 15000
横間隔 = 20000
枠縦幅 = 11880
枠横幅 = 16820
尺度 = 20 (A3に出力したい場合は 尺度 = 40)

その後、1枚目枠の左下をクリックすれば、印刷が始まります。

※画像の状態では、11枚しか有りません。
しかし、縦×横を3枚×4枚と入力したので、12枚目まで印刷コマンドが実行されます。

12枚目は何もない場所を印刷するので、プリンタによっては白紙が出力されます。
(最近のプリンタは白紙の場合は印刷しない機能が付いています。設定によりON/OFFできる物もあります。)

どうしても白紙を出したくない場合は、2回に分けて実行すれば良いです。
1回目:縦×横を2枚×4枚、2回目:縦×横を1枚×3枚

  • Lon
  • 2018/08/21 (Tue) 12:59:42
Re: 1ファイルのモデル空間内の複数図面を印刷方法
Lon様 こちらの説明不足の中、対応していただき大変ありがとうございます。
印刷設定は添付画像のようにしており、フィットでも問題ありません。
またマクロ用に枠の画層線種色等を変更しても構いません。
作って頂いたマクロのように事前に枠を等間隔に配置することも問題ありません。
図面を上から下に並べ、11枚目以降は右に列を増やしていく形にしているので、
可能でしたら印刷順を変えてもらえたら助かります。

等間隔に並んでいる場合のマクロを実際に試してみたところ、エラーが出てしまいました。
---以下ログ。

コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <0>: 0
コマンド:
SETENV
変数名を入力: 縦枚数
値 <5>:
コマンド:
SETENV
変数名を入力: 横枚数
値 <2>:
コマンド:
SETENV
変数名を入力: 縦間隔
値 <3000>:
コマンド:
SETENV
変数名を入力: 横間隔
値 <4000>:
コマンド:
SETENV
変数名を入力: 枠縦幅
値 <2725>:
コマンド:
SETENV
変数名を入力: 枠横幅
値 <3935>:
コマンド:
SETENV
変数名を入力: 尺度
値 <40>:
コマンド: Xcnt
そのようなコマンド "XCNT" はありません。ヘルプを表示するには F1 キーを押してください。
コマンド: 0
そのようなコマンド "0" はありません。ヘルプを表示するには F1 キーを押してください。
コマンド:
SETENV
変数名を入力: Ycnt
値 <0>: 0
コマンド: id
点を指定: 基点指示(1枚目の左下)*削除*
基点指示(1枚目の左下) X = 180902.3060 Y = -40650.2347 Z = 0.0000
コマンド: setenv
変数名を入力: to
値 <0>: 1
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0
コマンド:
SETENV
変数名を入力: GX
値 <180902.30600223>: 180902.30600223
コマンド:
SETENV
変数名を入力: GY
値 <-40650.23474087>: -40650.23474087
コマンド:
SETENV
変数名を入力: to
値 <0>: 2
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <2>: 0
コマンド:
SETENV
変数名を入力: PX
値:
コマンド:
SETENV
変数名を入力:
コマンド: PY
そのようなコマンド "PY" はありません。ヘルプを表示するには F1 キーを押してください。
コマンド: -40650.23474087
そのようなコマンド "23474087" はありません。ヘルプを表示するには F1 キーを押してください。
コマンド:
SETENV
変数名を入力: to
値 <0>: 3
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <3>: 0
コマンド: -plot
詳細な印刷環境設定? [はい(Y)/いいえ(N)] <いいえ>: y
レイアウト名を入力 または [一覧(?)] <モデル>:
出力デバイス名を入力 または [一覧(?)] <CubePDF>:
用紙サイズを入力 または [一覧(?)] <A3>:
用紙単位を入力 [インチ(I)/ミリメートル(M)] <ミリメートル>:
図面の方向を入力 [縦(P)/横(L)] <横>:
上下を反転して印刷しますか? [はい(Y)/いいえ(N)] <いいえ>:
印刷領域を入力 [表示画面(D)/オブジェクト範囲(E)/図面範囲(L)/ビュー(V)/窓(W)] <窓>:
窓の左下コーナーを入力 <-27748.149458,-53481.700099>: ,
点が無効です。

---ここまで。

お忙しいところ恐縮ですが、何卒よろしくお願い致します。
  • Schloa
  • 2018/08/21 (Tue) 21:22:22
Re: 1ファイルのモデル空間内の複数図面を印刷方法
印刷の順番を変えてみました。
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;縦枚数;\;横枚数;\;縦間隔;\;横間隔;\;枠縦幅;\;枠横幅;\;尺度;\;Xcnt;0;;Ycnt;0;id;基点指示(1枚目の左下)^X\setenv;to;1,,,,,,)$(nth,$(getenv,to),,;GX;$(index,0,$(getvar,lastpoint));;GY;$(index,1,$(getvar,lastpoint));;to;2,,,,,)$(nth,$(getenv,to),,,;PX;$(+,$(getenv,GX),$(*,$(getenv,Xcnt),$(getenv,横間隔)));;PY;$(-,$(getenv,GY),$(*,$(getenv,Ycnt),$(getenv,縦間隔)));;to;3,,,,)$(nth,$(getenv,to),,,,-plot;y;;;;;;;;$(getenv,PX)","$(getenv,PY);$(+,$(getenv,PX),$(getenv,枠横幅))","$(+,$(getenv,PY),$(getenv,枠縦幅));1:$(getenv,尺度);;;;;;;;y;setenv;to;4,,,)$(nth,$(getenv,to),,,,,;Ycnt;$(+,$(getenv,Ycnt),1);;to;5,,)$(nth,$(getenv,to),,,,,,$(if,$(-,$(getenv,Ycnt),$(getenv,縦枚数)),;to;2,;Ycnt;0;;Xcnt;$(+,$(getenv,Xcnt),1);;to;6),)$(nth,$(getenv,to),,,,,,,$(if,$(-,$(getenv,Xcnt),$(getenv,横枚数)),;to;2,^Cid;印刷終了^X))^M

印刷尺度がフィットで良いのでしたら、こちらで。(尺度入力を削除しました)
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;縦枚数;\;横枚数;\;縦間隔;\;横間隔;\;枠縦幅;\;枠横幅;\;Xcnt;0;;Ycnt;0;id;基点指示(1枚目の左下)^X\setenv;to;1,,,,,,)$(nth,$(getenv,to),,;GX;$(index,0,$(getvar,lastpoint));;GY;$(index,1,$(getvar,lastpoint));;to;2,,,,,)$(nth,$(getenv,to),,,;PX;$(+,$(getenv,GX),$(*,$(getenv,Xcnt),$(getenv,横間隔)));;PY;$(-,$(getenv,GY),$(*,$(getenv,Ycnt),$(getenv,縦間隔)));;to;3,,,,)$(nth,$(getenv,to),,,,;waku1;$(getenv,PX)","$(getenv,PY);;waku2;$(+,$(getenv,PX),$(getenv,枠横幅))","$(+,$(getenv,PY),$(getenv,枠縦幅));;to;4,,,)$(nth,$(getenv,to),,,,,zoom;w;$(getenv,waku1);$(getenv,waku2);-plot;y;;;;;;;;$(getenv,waku1);$(getenv,waku2);F;;;;;;;;y;setenv;Ycnt;$(+,$(getenv,Ycnt),1);;to;5,,)$(nth,$(getenv,to),,,,,,$(if,$(-,$(getenv,Ycnt),$(getenv,縦枚数)),;to;2,;Ycnt;0;;Xcnt;$(+,$(getenv,Xcnt),1);;to;6),)$(nth,$(getenv,to),,,,,,,$(if,$(-,$(getenv,Xcnt),$(getenv,横枚数)),;to;2,^Cid;印刷終了^X))^M
  • Lon
  • 2018/08/22 (Wed) 08:17:25
Re: 1ファイルのモデル空間内の複数図面を印刷方法
Schloa様
Lon様

お世話様です。横から割り込んで申し訳ありません。
Lon様の作成頂いたマクロが大変使い易く今後重宝しそうです。

大変申し訳ありませんが、印刷順を左下から上、以降右に流れていくように改変出来ないでしょうか。
Lon様の最初に作成されたマクロで例えますと、5枚目が2枚目。9枚目が3枚目、2枚目が4枚目、6枚目が5枚目といった感じです。
当方で色々試してみましたが、上手くいかず....

お手数おかけ致しますが、宜しくお願い致します。

Schloa様 割り込んでしまい申し訳ありません。

  • h_s
  • 2018/08/22 (Wed) 09:51:20
Re: 1ファイルのモデル空間内の複数図面を印刷方法
2018/08/22 (Wed) 08:17:25のマクロの

;PY;$(-,$(getenv,GY),$(*,$(getenv,Ycnt),$(getenv,縦間隔)))
の部分を
;PY;$(+,$(getenv,GY),$(*,$(getenv,Ycnt),$(getenv,縦間隔)))
に変更すれば良いです。

-を+にするだけです。
  • Lon
  • 2018/08/22 (Wed) 10:29:08
Re: 1ファイルのモデル空間内の複数図面を印刷方法
Lon様

ありがとうございました。
思い通りの動作になりました。
  • h_s
  • 2018/08/22 (Wed) 11:22:34
Re: 1ファイルのモデル空間内の複数図面を印刷方法
Lon様 ありがとうございました!
無事にマクロが動きこれで作業が捗りそうです。

  • Schloa
  • 2018/08/22 (Wed) 19:52:28
Re: 1ファイルのモデル空間内の複数図面を印刷方法
皆様

いつもお世話になっております。
LISPの投稿で申し訳ありません。
日頃各種のマクロを利用させていただき感謝しております。

上記の「複数の図面を連続印刷するマクロ」をLISPで行うことは可能でしょうか?
以下は作ってみたものですが思うような結果が得られませんでした。

(setq 縦枚数 (getint "\nTA TE: "))
(setq 横枚数 (getint "\nYO KO: "))

(setq 縦間隔 (getint "\nTA TE KANKAKU: "))
(setq 横間隔 (getint "\nYO KO KANKAKU: "))

(setq 枠縦幅 (getint "\nWAKUTATEHABA: "))
(setq 枠横幅 (getint "\nWAKUYOKOHABA: "))

(setq Counta 0)
(setq 基点 (getpoint "\nKAISI TEN: "))
(setq 現在のY座標 (cadr Kiten))

;; 処理の繰り返し
(repeat 縦枚数
(setq 現在のX座標 (car Kiten))

(repeat 横枚数
(setq 最後の場所 (entlast))
(if 最後の場所
(progn
(setq GX (car (entget 最後の場所))
GY (cadr (entget 最後の場所)))

(setq PX (+ GX 枠横幅)
PY (- GY 枠縦幅))

(setq waku1 (list PX PY)
waku2 (list (+ PX 枠横幅) (+ PY 枠縦幅)))

(command "-plot" "Y" "" "" "" "M" "L" "" "W" (strcat (itoa (car waku1)) "," (itoa (cadr waku1))) (strcat (itoa (car waku2)) "," (itoa (cadr waku2))) "F" "C" "Y" "" "" "" "" "" "" "")

;; 次の図面の位置に移動
(setq 現在のX座標 (+ 現在のX座標 横間隔))

;; カウンター
(setq Counta (+ Counta 1))
)
(setq 終了フラグ t)
)

;; 縦方向の移動
(setq 現在のY座標 (+ 現在のY座標 縦間隔))
)

;; 次の行へ移動
(setq 現在のY座標 (cadr 基点))
(setq 現在のX座標 (+ (car 基点) 横間隔))

;; カウンタのリセット
(setq Counta 0)
)

(princ (strcat "\n印刷が完了しました。総枚数: " (itoa (* 縦枚数 横枚数))))

AutoCAD2024を使用しています。
よろしくお願いいたします。
  • naok
  • 2023/07/05 (Wed) 10:11:26
Re: 1ファイルのモデル空間内の複数図面を印刷方法
私が以前作ったやつとりあえず載せときます。
レイアウトも設定してからコマンド打って書く枚数など設定すると印刷される(はず)です。
少し前に作ったので、精査していませんのでご了承ください。
(変なところ教えていただいたら幸いです。)

他の書き込み見ても変だと思ったので、そもそも論から
1.(defun c:~ から初めて、コマンド定義づけから始めてください。
前後の流れが分からず、プログラムが半端なところ過ぎて指摘しづらいです。

2.変数名は日本語ではなく英語(アルファベット)にしてください。
たぶんコマンドライン上に出るコメントと変数名が逆です。
変数名も混ざっていてわかりづらいです。

3.repeat処理
Countaが増えてはいるようですが、ループ内でcountaによって値が変わるものがありません。
この場合は、意味がないです。
(entlast)を使っていますが、これは最後に作成したオブジェクトを取得するだけで、
位置などを取得するわけではありません。

全体的にちぐはぐになってしまっていて、
アドバイスもしづらいです。
最初から書き直してみて、
関数名を調べて返す値と取得しなければいけない値を明確にすると
分かりやすくなると思います。

自ら解決できるよう応援しております。


以下、LISP
------------------------------
(defun c:rowplot
( / Old_Os Old_Cm layObj pltObj acadDoc genten kiten syuten i
kyori xkyori ykyori
yokoichi tateichi)

;初期設定の保存
(setq Old_Os (getvar "OSMODE"));オブジェクトスナップの保存
(setq Old_Cm (getvar "CMDECHO"));エコーモードの保存
;
;エラー処理(初期設定の戻し)
(defun *error* (msg)
(setvar "OSMODE" Old_Os);オブジェクトスナップの戻し
(setvar "CMDECHO" Old_Cm);エコーモードの戻し
(princ))

;オブジェクトスナップ、エコーモードを無効化
(setvar "OSMODE" 0)
(setvar "CMDECHO" 0)

;vl関数の読み込み
(vl-load-com)
;現在の図面のオブジェクトを読み込み
(setq acadDoc (vla-get-ActiveDocument (vlax-get-Acad-object)))
(setq layObj (vla-get-ActiveLayout acadDoc))
(setq pltObj (vla-get-plot acadDoc))

;窓印刷の座標を取得
(vla-GetWindowToPlot layObj 'genten 'syuten)
(setq genten (vlax-safearray->list genten)
syuten (vlax-safearray->list syuten)
)
(setq kyori (list (setq xkyori (- (car syuten) (car genten)))
(setq ykyori (- (cadr syuten) (cadr genten)))
)
)

;;印刷の尺度を取得
(Vla-getcustomscale layObj 'Numerator 'Denominator)
(setq syaku (/ Numerator Denominator))

;ダイアログボックスの呼び出し&値を取得
;houkou:左下なら「1」左上なら「-1」
;tate:縦の図面枚数
;yoko:横の図面枚数
;maisu:枚数の合計

(setq yoko 0 maisu 0)
(rowplot_SetVar)
(setq tate (atoi tate)
yoko (atoi yoko)
maisu (atoi maisu)
)
(if (= maisu 0)
(setq maisu (* tate yoko))
)

;原点座標をユーザーに指定
(setvar "OSMODE" 1);オブジェクトスナップモードを端点に指定

;オブジェクトスナップを無効化
(setvar "OSMODE" 0)

;縦位置、横位置の初期設定
(setq tateichi 0)
(setq yokoichi 0)
(setq i 0)


;ここからループ処理
(while (< i maisu)

;;縦位置が縦の同じの場合、1に戻して、横位置を増やす。
;;違う場合、縦位置を+1する
(if (= tateichi tate)
(progn
(setq tateichi 1)
(setq yokoichi (+ yokoichi 1))
)
(progn
(setq tateichi (+ tateichi 1))
)
)

;;紙面の起点位置を設定
(setq kiten
(list (+ (car genten) (* xkyori yokoichi) (* yoko-yohaku yokoichi))
(+ (cadr genten) (* ykyori (- tateichi 1)) (* tate-yohaku (- tateichi 1)))
)
)
;;紙面の終点位置を設定
(setq syuten
(list (+ (car kiten) xkyori)
(+ (cadr kiten) ykyori)
)
)

(if (= (getvar 'CTAB) "Model")
(command-s "-plot"
"y" ;詳細な印刷環境設定? [はい(Y)/いいえ(N)] <いいえ>:
"" ;レイアウト名を入力 または [一覧(?)] <モデル>:enter,そのまま
"" ;出力デバイス名を入力 または [一覧(?)] <DocuWorks Printer>:
"" ;用紙サイズを入力 または [一覧(?)] <A3 (297x420mm)>:
"m" ;用紙単位を入力 [インチ(I)/ミリメートル(M)] <ミリメートル>:
"" ;図面の方向を入力 [縦(P)/横(L)] <横>:
"" ;上下を反転して印刷しますか? [はい(Y)/いいえ(N)] <いいえ>:
"w" ;印刷領域を入力 [表示画面(D)/オブジェクト範囲(E)/図面範囲(L)/ビュー(V)/窓(W)] <窓>:
kiten ;窓の左下コーナーを入力 <0.000000,0.000000>:
syuten ;窓の右上コーナーを入力 <841.000000,594.000000>:
syaku ;印刷尺度を入力 (印刷 ミリメートル=作図単位) または [フィット(F)] <1=2>:
"" ;印刷オフセット(x,y)を入力 または [中心(C)] <中心>:
"" ;印刷スタイルを使用して印刷しますか? [はい(Y)/いいえ(N)] <はい>:
"" ;印刷スタイル テーブル名を入力 または [一覧(?)] ( . = なし) <黄色→黒.ctb>:
"" ;線の太さを使用して印刷しますか? [はい(Y)/いいえ(N)] <はい>:
"" ;シェーディング印刷の設定を入力 [表示どおり(A)/旧式ワイヤフレーム(W)/旧式隠線処理(H)/表示スタイル(V)/レンダリング(R)] <旧式ワイヤフレーム>:
"N" ;印刷をファイルへ書き出しますか [はい(Y)/いいえ(N)] <N>:
"N" ;ページ設定の変更を保存しますか [はい(Y)/いいえ(N)]? <N>
"y" ;印刷を続けますか [はい(Y)/いいえ(N)] <Y>:
)
(command-s "-plot"
"y" ;詳細な印刷環境設定? [はい(Y)/いいえ(N)] <いいえ>:
"" ;レイアウト名を入力 または [一覧(?)] <モデル>:enter,そのまま
"" ;出力デバイス名を入力 または [一覧(?)] <DocuWorks Printer>:
"" ;用紙サイズを入力 または [一覧(?)] <A3 (297x420mm)>:
"m" ;用紙単位を入力 [インチ(I)/ミリメートル(M)] <ミリメートル>:
"" ;図面の方向を入力 [縦(P)/横(L)] <横>:
"" ;上下を反転して印刷しますか? [はい(Y)/いいえ(N)] <いいえ>:
"w" ;印刷領域を入力 [表示画面(D)/オブジェクト範囲(E)/図面範囲(L)/ビュー(V)/窓(W)] <窓>:
kiten ;窓の左下コーナーを入力 <0.000000,0.000000>:
syuten ;窓の右上コーナーを入力 <841.000000,594.000000>:
syaku ;印刷尺度を入力 (印刷 ミリメートル=作図単位) または [フィット(F)] <1=2>:
"" ;印刷オフセット(x,y)を入力 または [中心(C)] <中心>:
"" ;印刷スタイルを使用して印刷しますか? [はい(Y)/いいえ(N)] <はい>:
"" ;印刷スタイル テーブル名を入力 または [一覧(?)] ( . = なし) <黄色→黒.ctb>:
"" ;線の太さを使用して印刷しますか? [はい(Y)/いいえ(N)] <はい>:
"" ;印刷尺度を使用して線の太さを尺度変更しますか? [はい(Y)/いいえ(N)] <はい>:
"" ;ペーパー空間を最初に印刷しますか? [はい(Y)/いいえ(N)] <いいえ>:
"" ;ペーパー空間のオブジェクトを隠線処理しますか? [はい(Y)/いいえ(N)] <いいえ>:
"N" ;印刷をファイルへ書き出しますか [はい(Y)/いいえ(N)] <N>:
"N" ;ページ設定の変更を保存しますか [はい(Y)/いいえ(N)]? <N>
"y" ;印刷を続けますか [はい(Y)/いいえ(N)] <Y>:
)
)
(setq i (1+ i))
;ループ処理の終了
)

;オブジェクトスナップ、エコーモードの戻し
(setvar "OSMODE" Old_Os)
(setvar "CMDECHO" Old_Cm)


;変数をnilにしておく。
(setq tate nil);縦の図面枚数
(setq yoko nil);横の図面枚数
(setq maisu nil);枚数の合計
(princ)
)



;---------------------------------------------
;ダイアログボックスから値を取得するサブルーチン
;---------------------------------------------
(defun rowplot_GetVar ()
(setq tate (get_tile "tate"));縦の図面枚数
(setq yoko (get_tile "yoko"));横の図面枚数
(setq maisu (get_tile "maisu"));枚数の合計
(setq tate-yohaku (atoi (get_tile "tate-yohaku")));縦の余白
(setq yoko-yohaku (atoi (get_tile "yoko-yohaku")));横の余白
)

;---------------------------------------------
;ダイアログボックスを作成して表示するサブルーチン
;---------------------------------------------
;(dcl_write "rowplot.dcl")
(defun rowplot_SetVar (/ file-open file-name str dcl-id)
(setq file-open (open (setq file-name (vl-filename-mktemp "" "" ".dcl")) "w"))
(foreach str
'("// rowplot.dcl for use in A1Layout.lsp //"
"rowplot_setting :dialog"
"{ label = \"連続印刷の設定\";"
"//--------------------------------------------------------"
" : row {"
" : column {//colmun1_START"
" children_fixed_height = 3;"
" :boxed_column {label = \"図面枚数\";"
" alignment = left;"
" :edit_box{"
" label = \"縦の枚数\";"
" edit_width = 5;"
" key = \"tate\"; }"
" :edit_box{"
" label = \"横の枚数\";"
" edit_width = 5;"
" key = \"yoko\"; }"
" :edit_box{"
" label = \"合計枚数\";"
" edit_width = 5;"
" key = \"maisu\"; }"
" }//boxed_column"
" :boxed_column {label = \"図面間の余白(実測値)\";"
" :edit_box{"
" label = \"縦の余白\";"
" edit_width = 5;"
" alignment = left;"
" key = \"tate-yohaku\"; }"
" :edit_box{"
" label = \"横の余白\";"
" edit_width = 5;"
" alignment = left;"
" key = \"yoko-yohaku\"; }"
" }//boxed_column"
" }//colmun1 "
" }//row "
"ok_cancel;"
"}"
)
(write-line str file-open)
);end make dcl
(close file-open)
(setq ctblst (vl-directory-files (getenv "PrinterStyleSheetDir") "*.ctb"))
(new_dialog "rowplot_setting" (setq dcl-id (load_dialog file-name)))
(set_tile "StPt" "LeDw" )
(action_tile "accept" "(rowplot_GetVar)(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq Act (start_dialog))
(unload_dialog dcl-id)
(cond
((= Act 0)(princ "キャンセルキーを押しました"))
((= Act 1)(princ "OKを押しました"))
);cond
(vl-file-delete file-name)
(princ)
)

(princ "\n印刷設定などを行ってレイアウトの適用をしてから\n「rowplot」と入力すると連続で印刷を行います。")

  • んぼ
  • 2023/07/05 (Wed) 11:32:16
Re: 1ファイルのモデル空間内の複数図面を印刷方法
何を使ってLISPを作成されていますか?
AutoCADのLISPエディタとして、Visual Studio (VS) Codeを使用されているなら、
(defun 以下で変数を宣言していれば、デバッグでその変数に何が入るかチェックしつつステップインできます。

>思うような結果が得られませんでした。
デバッグ作業でどこまで思った結果が得られているのか、どこがうまく行ってないのかご自分で絞り込むことをお薦めします。
  • LUNE
  • 2023/07/05 (Wed) 11:38:05
Re: 1ファイルのモデル空間内の複数図面を印刷方法
参考までに、掲載いただいたものを直すとこんな感じでしょうか。
あとはLUNEさんがおっしゃるようにVScode使ってデバックかけたり、
1行ずつコマンドラインに貼り付けて希望の動作するか確認してみたりしてください。


(defun c:test
(/ row col
dist-row dist-col
frame-row frame-col
base x-base y-base
x y x-pt1 y-pt1 pt1
x-pt2 y-pt2 pt2
)

(setq row (getint "\n縦の枚数を入力:"))
(setq col (getint "\n横の枚数を入力:"))

(setq dist-row (getreal "\n縦の間隔を入力:"))
(setq dist-col (getreal "\n横の間隔を入力:"))

(setq frame-row (+ dist-row (getreal "\n枠の縦余白を入力: ")))
(setq frame-col (+ dist-col (getreal "\n枠の横余白を入力: ")))

(setq base (getpoint "\n印刷を開始する点を選択:"))
(setq x-base (car base))
(setq y-base (cadr base))
(setq x x-base)
(setq y y-base)

(repeat col
(repeat row
(setq x-pt1 x
y-pt1 y
)
(setq x-pt2 (+ x-pt1 dist-col)
y-pt2 (+ y-pt1 dist-row)
)
(setq pt1 (list x-pt1 y-pt1)
pt2 (list x-pt2 y-pt2)
)

(command "-plot" "Y" "" "" "" "M" "L" "" "W" pt1 pt2 "F" "C" "Y" "" "" "" "" "" "")

(setq y (+ y frame-row))
)
(setq x (+ x-base frame-col)
y y-base
)
)
)
  • んぼ
  • 2023/07/05 (Wed) 13:29:24
Re: 1ファイルのモデル空間内の複数図面を印刷方法
んぼ様
LUNE様

思い通りに動きました。
お手数をおかけしましたが、素晴らしいサポートをいただき、心から感謝しています。
ありがとうございました。
  • naok
  • 2023/07/05 (Wed) 14:36:37
Re: 1ファイルのモデル空間内の複数図面を印刷方法
皆様
んぼ様
LUNE様

先日は素早い対応ありがとうございました。
お手数をおかけいたしますが、再度お力をお借りできますでしょうか。
横の枚数に3以上を入力しますと、2列目の印刷を繰り返してしまいます。
大変恐縮ですが、よろしくお願いいたします。
  • naok
  • 2023/07/06 (Thu) 14:52:47
Re: 1ファイルのモデル空間内の複数図面を印刷方法
割り込みすみません
久しぶりに掲示板覗いたら、同じ様に苦労されてる方がいらっしゃるようで、是非試して頂ければと思います。
マクロでは有りませんが、
5~6年くらい前からスクリプトファイルを使用して連続印刷をやってます。
対象はモデル空間、枚数は幾らでもOK、図面サイズ大小なんでも有り、R/LTどちらもOK。
手順としては(正確な表現は出来ませんが)
1.CAD上でビュー番号作成(必要数)
2.CSVファイルにビュー番号、用紙サイズ、尺度、印刷数、縦横設定、上下反転を設定
3.exeファイルを実行
4.スクリプトファイルが出来るのでCAD図上にドラッグ
5.印刷開始 100枚程度でも1分位でPDFに出来ます(PC速度にも寄りますが)
PDFも1ファイルで出来上がるので結合処理も不要です。
以下を探して見てください。
https://ryooji-f.hatenadiary.org/entry/20121101/1351780031
もしダメなら、pscrgで検索「AutoCADでビューを連続印刷する【pscrg】~」
何れかで分かると思います。
  • ヨシ
  • 2023/07/06 (Thu) 20:42:06
Re: 1ファイルのモデル空間内の複数図面を印刷方法
ヨシ 様

スクリプトファイルでの解決策を教えていただきありがとうございました。
今後もご助言いただけると幸いです。
お力添えに心から感謝しています。
  • naok
  • 2023/07/07 (Fri) 09:20:42
Re: 1ファイルのモデル空間内の複数図面を印刷方法
お世話になってます。
こちらも横から失礼します。
リンク先のファイルをDLしようとしたらウイルスに感染していると出ました。
違うところをクリックしてたら申し訳ありませんが、念の為レスさせていただきます。
  • YK
  • 2023/07/07 (Fri) 09:36:10
Re: 1ファイルのモデル空間内の複数図面を印刷方法
YK 様

ありがとうございます。
確かにそのような表示が出ました。
  • naok
  • 2023/07/07 (Fri) 09:44:05
Re: 1ファイルのモデル空間内の複数図面を印刷方法
皆様
ひょっとしたら、EXEファイルが有るのでその関係かな?
私の環境ではEXEファイルは大丈夫なので。
https://firestorage.jp/download/187bb6377070571d5dd164b29544a215f018cb3b
よりDL下さい。
期限有りますので、お早めに!
  • ヨシ
  • 2023/07/07 (Fri) 12:58:36
Re: 1ファイルのモデル空間内の複数図面を印刷方法
ヨシ 様

ありがとうございます。
ダウンロードいたしました。
  • naok
  • 2023/07/07 (Fri) 13:19:29
Re: 1ファイルのモデル空間内の複数図面を印刷方法
お世話になっております。
使用しているCADはAUTOCAD2022 R版です。
こちらのスレッド内で紹介されていた連続印刷のマクロ及びLISPですが
AUTOCADの印刷→プリンタ/プロッタ→ AutoCAD PDF (General Documentation).pc3
※デフォルトで入ってる設定です。
にて印刷すると、最初の1枚しか印刷が出来ないです。
(画面自体は各図面毎に照準を合わせていってるので、途中で止まる事なく最後まで動いてますが
 印刷がからぶってる感じです。)

原因が分かる方がいればご教示いただけないでしょうか。
予想でもいいので、よろしくお願いします・・・。
  • YK
  • 2023/07/21 (Fri) 10:06:21
Re: 1ファイルのモデル空間内の複数図面を印刷方法
AutoCAD PDF (General Documentation).pc3ではなく、実際のプリンターへ紙の出力は大丈夫なら、
AutoCAD PDF (General Documentation).pc3が原因です。

例えば、PDFの保存先を指示しないといけないのに、それを無視又はキャンセルして先に進んでいるとか。
保存する名前を全て同じにしているので、上書き禁止処理により後から出力された物が無効になっているとか。
  • 通りすがり
  • 2023/07/21 (Fri) 11:36:25
Re: 1ファイルのモデル空間内の複数図面を印刷方法
>通りすがり様
お返事ありがとうございます。
実際のプリンターでは出せました。
原因も多分御指摘の内容な気がしてますので、探ってみます!
  • YK
  • 2023/07/21 (Fri) 13:05:17
Re: 1ファイルのモデル空間内の複数図面を印刷方法
多分、プリンタードライバーとの相性かも知れません。
記憶薄れてますが、同じ様な事が有った気がします。
私は、PDF印刷にこれを使用しています。
https://tools.pdf24.org/ja/creator
連続印刷した場合、全ての印刷情報を一度PDF24内に保管表示されます
その後、結合するか1枚のみか選択処理を行います。
ファイルに落とす前に、確認することも出来ます。
Onlineで有ればAdobeが無くてもページ編集が出来ます。
印刷時の設定は、画像添付します。
  • ヨシ
  • 2023/07/22 (Sat) 11:42:21

返信フォーム






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