【ごまかんぱちの挑戦】エクセルでAutoCADの自動作図(その14)
こんにちは。ごまかんぱちです。🐟
AutoCADの自動作図を目指して奮闘しています。
今回は 縮尺のお話。
14-1. 縮尺に応じたいろいろ
図面の縮尺によって、設定すべき 寸法スタイルや文字高さが変わりますよね。(異尺度対応ではないとき。)
それに対応できるようにします。
これまでにも コードの中に コッソリ紛れていたこともあると思いますが、今回 これをテーマとして シッカリ扱っていきます。
それでは始まりです。👏👏
・ 文字高さ
今回 エクセルはこれだけです。
簡単ですね。😁
続いて ポリラインで適当に図形を描きます。
図形に意味はありませんので 何でもいいです。ポリラインでなくてもいいです。
Print #1, "clayer Layer1" '画層の指定
'ポリライン
Print #1, "pline " & 0 & "," & 0 & " " & 1000 & "," & 0 & " " & 1300 & "," & 700 & " " & 300 & "," & 700 & " c"
文字を足してみましょう。
セルD2の値を使って「縮尺 1:〇〇」と書いてみます。
Print #1, "clayer Layer2" '画層の指定
'文字
Print #1, "text j BC " & 800 & "," & 750 & " " & 35 & " " & 0 & " " & "縮尺 1:" & Range("D2")
できました。
文字高さ35mmの文字で書きました。
この文字高さを 縮尺に応じて変化するようにします。
例えば 印刷したときに 5mmの高さにしたいときは、CAD上では 5mm×縮尺 の文字高さで書きます。
(※) こうではない図面もあると思います。
その場合は、適当な係数を掛けて調整しましょう。
Print #1, "clayer Layer2" '画層の指定
'文字
Print #1, "text j BC " & 800 & "," & 750 & " " & 5 * Range("D2") & " " & 0 & " " & "縮尺 1:" & Range("D2")
できました。
先ほどの「35」を「5 * Range("D2")」に変えるだけです。
これで 文字高さは完成です。😊
・ 寸法スタイル
続いて 寸法線を描いてみます。
'寸法線
Print #1, "dimlinear " & 0 & "," & 0 & " " & 1000 & "," & 0 & " h " & 0 & "," & -350 '水平
Print #1, "dimlinear " & 0 & "," & 0 & " " & 300 & "," & 700 & " v " & -350 & "," & 0 '垂直
Print #1, "dimaligned " & 1000 & "," & 0 & " " & 1300 & "," & 700 & " " & 1350 & "," & 0 '斜め
水平、垂直、斜め とそれぞれの方向の寸法線を書きました。
寸法線を書く際に 特に何も指定しないと、プログラム実行時に選ばれていた寸法スタイルで 寸法線を書きます。
ですので、寸法スタイルを指定してみましょう。
まずは CAD側に いくつか寸法スタイルを作成してみましょう。
「10」「30」「50」「100」という寸法スタイルを作成しました。
それぞれの中身はお任せします。
続いて エクセルも少し変えます。
例えば、セルD2に「20」と入力して、その「20」という名前の寸法スタイルがなかった場合、うまくいきません。途中で止まってしまうことも。
そんな状況を防ぐために、リストで選択できるようにして 入力可能な値を制限しました。
コードはこちら。
Print #1, "dimstyle R " & Range("D2") '寸法スタイルの指定
これだけです。
そして 結果はこちら。
うまく 想定通りの寸法スタイルになりました。😊
コードを簡単にするために、寸法スタイル名を「30」などとしていますが、実際は もっとちゃんとした名前をつけたいですよね。
例えば 寸法スタイル名が「Style30」という名前であれば、次のようなコードで対応できますので、割と自在に対応できます。
Print #1, "dimstyle R " & "Style" & Range("D2") '寸法スタイルの指定
縮尺を入力するセルと 寸法スタイル名を入力するセルを 別々にすると もっと複雑な寸法スタイル名も エクセル上で表すことができるので より便利になりそうです。
14-2. 今回のまとめ
それでは 今回のまとめです。
縮尺に応じて 文字高さや寸法スタイルが変わってほしくて 実現に向けて頑張りました。
以下 今回のコードです。
Sub macro()
Sakuzu = ThisWorkbook.Path & "\CAD_file.scr"
Open Sakuzu For Output As #1
Print #1, "osnap non"
'********↑前処理↑********
Print #1, "clayer Layer1" '画層の指定
'ポリライン
Print #1, "pline " & 0 & "," & 0 & " " & 1000 & "," & 0 & " " & 1300 & "," & 700 & " " & 300 & "," & 700 & " c"
Print #1, "clayer Layer2" '画層の指定
'文字
Print #1, "text j BC " & 800 & "," & 750 & " " & 5 * Range("D2") & " " & 0 & " " & "縮尺 1:" & Range("D2")
'寸法線
Print #1, "dimstyle R " & Range("D2") '寸法スタイルの指定
Print #1, "dimlinear " & 0 & "," & 0 & " " & 1000 & "," & 0 & " h " & 0 & "," & -350 '水平
Print #1, "dimlinear " & 0 & "," & 0 & " " & 300 & "," & 700 & " v " & -350 & "," & 0 '垂直
Print #1, "dimaligned " & 1000 & "," & 0 & " " & 1300 & "," & 700 & " " & 1350 & "," & 0 '斜め
'********↓後処理↓********
Print #1, "zoom e"
Print #1, "filedia 1"
Close #1
End Sub
今回はここまで。👍
次回もお楽しみに。😊
「役に立った!」「助かった!」と感じたらサポートいただけると嬉しいです。😊