レーザーカッター用のデータ作成の課題
レーザー加工機は、たいがい Adobe Illustrator でデータを作成してプラグインなどで加工器を制御するのですが、ご存知のように Illustrator は価格が高いので、たまにしか使わない個人ユーザーはフリーの作図ソフト(Inkscape や LibreOffice Draw など)で作成し、svg 形式のファイルにエクスポートして、ファブ施設の Illustrator で読み込んで加工している人が多いと思います。
ところが、この場合、カット用のパスが2重になっていたり、色々不都合が出たりしていました。
この問題の解決策の一つが「北東北 LABVIEWユーザー会」のサイトで「レーザーカッターで役に立つメイカーのためのLabVIEW Community活用法 として紹介されていました。
この方法と同じことをするアプリを AppleScript で作ったので紹介します。
AppleScript だけでは苦戦
AppleScript だけで作成しようと頑張ったのですが、テキストファイル処理のところで、改行文字とかキャラクター配列とString とか何かの問題でなかなかうまくいかなかったので、テキストファイル処理の部分は Perl スクリプトを作成してそちらに任せました。(結果的に簡単だった)
プログラムソース
前置きが長くなりましたが、作成したアプリのソースです。
まず、本体の AppleScript
-- SVG 形式のファイルを ADOBE Illustrator 用に修正します
-- レーザーカッター用のカットパスだけを選択します。(彫刻や塗り潰しは無視されます)
set inFile to POSIX path of (choose file) -- 入力用ファイルを選択
set rExp to quoted form of "s/\\.[^\\.]*$//" -- ファイルパスから拡張子を取り除く正規表現
set cmd to "echo " & quoted form of inFile & " | sed " & rExp -- ファイルパスか拡張子を取り除く
set outFile to (do shell script cmd) & "_Mod.svg" -- 出力ファイルパス(..._Mod.svg)をセット
set cmdPath to "~/Desktop/convSVG.pl" -- perl スクリプトの場所を指定(デスクトップ)
-- set cmdPath to appPath & "Contents/Resources/Code/convSVG.pl" -- perl スクリプトの場所を指定(アプリ内)
set cmd to "perl " & cmdPath & " <" & inFile & " >" & outFile
do shell script cmd
perlスクリプトの場所は、環境に合わせて変更してください。
コメントアウトしている方は、AppleScriptをAppとして保存したときに、Appの内部に Contents/Resources/ の下に Code ディレクトリを作成してその中に Perl スクリプトをコピーして内包させる場合の記述です。
テキストファイル処理のPerlスクリプト
# !/usr/bin/perl
#### use encoding 'utf8', STDOUT=>'shiftjis';
$flg = 1;
while(<>) {
$flg = 0 if(/<svg version=.*/);
if($flg) { printf($_);
} else {
printf($_) if (/<path fill="none".*>$/);
printf($_) if (/<\/?svg.*>$/);
}
}
使用上の注意
この方法では、レーザー加工機用のデータのうち、カット用のパスデータだけのものに有効です。
塗り潰しのあるパスデータや彫刻用の画像データは無視されますので、ご注意ください。