ME10という機械CADデータのマイグレーションのお話。
ME10の現在の名称は、PTC Creo Element Direct Drafting 18.0
そもそもME10というCADを知りませんでしたが、次のurlにたどり着きました。
ME10はHPが開発したが、その後、CoCreate社に渡り「OneSpace Designer Drafting」という名称になり、更にPTC社に渡り、現在は「Creo Element Direct Drafting」として販売されている。
まぁ、今後も名称は変わるでしょうが、ME10というキーワードで日本の代理店を探すところから苦労しました。
ME10 ver.9図面は、Drafting 18.0でも閲覧可能
マイグレーション対象のCAD図面はME10 ver.9で古く、文字コードもsjisです。最新のDrafting 18.0は、encoding=unicode(utf8)前提で、閲覧できないことを心配していましたが、それなりに表示されました。
※「○○○建設工業㈱ テスト」を日本語を書きましたが
- 「㈱」のような機種依存文字は表示させませんでした
- 半角の「テスト」の表示幅は怪しい気がしますが、それでも表示されました
その他、リビジョンを表す△がずれているのも気になります。
DraftingのメニューからDXF形式保存が可能(ただしsjis->utf8文字参照)
先程の図面をDraftingのメニューバーから「ファイル→名前を付けて保存」を選択し、「AutoCAD2010 DXF形式」で保存することも可能です。
ただし、文字コードがut8に変換され、先ほどの「○○○建設工業㈱ テスト」は内部的に次のようにunicodeの文字参照コードで保存されます。
\U+25cb\U+25cb\U+25cb\U+5efa\U+8a2d\U+5de5\U+696d\U+3231\U+3000\U+ff83\U+ff7d\U+ff84
http://d.hatena.ne.jp/end0tknr/20110519/1305797466
perlによる文字参照のencode/decodeは、以前、↑このurlに記載していますが、chr()やhex()を利用し、次のようなscriptで元の文字に戻すことができます。
#!/usr/local/bin/perl use strict; use utf8; use Encode; main(); sub main { my $org_str = join('', '\U+25cb\U+25cb\U+25cb\U+5efa\U+8a2d\U+5de5', '\U+696d\U+3231\U+3000\U+ff83\U+ff7d\U+ff84'); $org_str =~ s/\\U\+([0-9a-f]{4})/chr(hex($1))/egoi; print Encode::encode('utf8',"$org_str\n"); }
DraftingによるDXF化データをJw_cadで開く前に、utf8文字参照実体化&sjis化
先程、Draftingで「AutoCAD2010 DXF形式」保存したファイルをJw_cadで開くと、次のように文字参照コードがそのまま表示されます。
どうやらJw_cadでDXFファイルを開く場合、DXFに含まれる文字は、実体化されたshift_jisである必要があるようなので、次のようなperl scriptで、utf8文字参照の実体化と、utf8->sjis変換を行うことで正しく表示できます。
#!/usr/local/bin/perl use strict; use utf8; use Encode; main(@ARGV); sub main { my ($mi_dxf_file) = @_; open(my $fh,$mi_dxf_file) or die "can't open $mi_dxf_file $!"; { local $/ = undef; my $dxf_lines = <$fh>; #文字参照コード→文字(utf8) $dxf_lines =~ s/\\U\+([0-9a-f]{4})/chr(hex($1))/egoi; #utf8→sjis(cp932) print Encode::encode('cp932',$dxf_lines); } close($fh) or die "can't close $mi_dxf_file $!"; }
※Jw_cadでは「㈱」のような機種依存文字も正しく表示されました
様々なCADデータの書式なんて、どれもDXFを基本とした派生データなんて、思っていましたが、実際にマイグレーションやる場合、いろいろと手間なんだろうなぁ