2007年7月29日 (日)

pdfからdxf,svg

一度CADをPDFにしてしまうと再びCADデータとして
利用することは出来ないと考えた方がいいと思います。
(それを目的としてPDFにすることもありますし..)

PDFの中身もベクトルデータとして扱っているようですが
詳細な寸法は復元出来ません。ただ、ちょっとした
データをJWで加工したいときなどもありPDFからDXFへ
の変換も少しは利用価値があると思います。

pstoeditを使うとpdfからdxf,またはsvgなどへの
変換が出来ます。

pstoedit.exe temp.pdf -f "dxf:-polyaslines" temp.dxf

pstoedit.exe temp.pdf -f plot-svg -ssp temp.svg

pstoeditはGhostScriptと連携して動作するので、
pstoeditだけでなくGhostScriptがインストールされて
いる必要があります。

svgについては "-f svg"オプションもあるようですが、
シェアウェアなのでフリーの"-f plot-svg" を
使っています

また、-sspオプションについては以下で知りました。

http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/43337.html

また、ImageMagick,GshostScriptともにフォントがらみ
でうまく変換できないことがあるようです。PDFを作る際に
フォントを埋め込むことで解決できるようです。

2007年7月16日 (月)

pdfからjpg

ImageMagickを使うとpdfからの変換、pdfへの
変換も出来ます。

convert -density 200x200 temp.pdf temp.jpg

-densityは作成する画像の解像度を指定します

逆に

convert temp.jpg temp.pdf

とすればjpgからpdfへの変換も可能。

ただ、pdfが作られた状況(ソフト)によっては
うまくいかない場合もあるようです。

私の仕事場の環境ではスキャナ(コピー複合機)
が作成したpdfではうまくいきませんでした。

ImageMagickでなくGhostScriptを使う方法もあります

gswin32 -dBATCH -dNOPAUSE -sDEVICE=jpeg -r400 -sOutputFile=temp.jpg temp.pdf

当然 ImageMagick,GhostScriptはそれぞれインストール
されていることが前提です。

Acrobat Readerでスナップショットを使ってやれば
pdfから画像への変換は出来ますが大量のファイルを
処理する場合はやはりバッチ処理の方が効率的。

また、コマンドラインになじんでいればわざわざ起動に
時間のかかるAcrobatを立ち上げなくて済むので
こちらの方が楽だと思います

2006年12月 2日 (土)

条件抽出

DBIを勉強していて
SQLのSELECT~WHERE~ように条件で要素
を抽出できたら、外変プログラムの作成が
楽になるんじゃないかと思いライブラリを
改造しました。

(1)条件付削除
Clear**([expression])でexpressionの条件
のものだけを削除します。ライブラリの中
では「eval」を使ってexpresionを直接評価
していますのでexpressionは文字列として
渡すことになります。

次の文は外部変形起動時の線色、線種の円を
選択的に削除します。

$data->ClearCircle('($obj->Color==OrigColor)&&($obj->Type==OrigType)');

変数名$objはライブラリ内で宣言されていて
必ずこれを使います。

(2)要素抽出
sq******->Array([expression])で条件に
あう要素を配列として返します。
内容はClear****とほぼ同じです。

次のプログラムは線色1の直線を線色6に変更します。

foreach my $straight($data->sqStraight->Array('$obj->Color==1')){
$straight->SetColor(6);
}

2006年11月25日 (土)

外部変形でjwファイル検索、起動

今週はDBIについてちょっと勉強しました

「外部変形でjwファイル検索、起動」では
テキストのデータベースファイルを使った
のですが、DBIを使えばAccessなどのデータ
ベースプログラムと直接やりとりが出来ます。

しかも簡単に..

今まで使っていたAccessの検索用フォームも
そのまま使い続けられるし。

先に勉強しておけば、テキストファイルとの
やりとりの部分は作る必要がなかった..

まぁ自分でやってみたから興味を持ったので
卵か鶏かという話になりますけど。

自分ではすごく便利に使ってはいますが
外部変形は完全におまけ状態です。

2006年11月18日 (土)

円だけ削除

円だけを消去する外部変形です。
もしかすると、別に方法があるのかも
しれません。これまでは、選択してから
「属性選択」で円を指定して削除していました。
この方法だと円弧と楕円も指定されてしまうので
一つ一つ選択からはずしていく必要があります。

それほど一般的な作業ではないので、外部変形
を作るかどうか迷ったのですが、ライブラリを
使えば数行で出来ることは判っていたので、
仕事中にちょこちょこっと作りました。

外部変形作成の手間と手作業の手間を比較して
外部変形の方が楽なのがライブラリ使用の
メリットかと思います。おかげで使い捨ての
外変プログラムがどんどん溜まっていきます
けど...

#プログラムはここから###############
use strict;
require "Jwcpgh.pl";

my $data=Jwcpgh->new;
$data->ClearCircle;
$data->write;
#ここまで###########################

ついでにCの方でもつくろうとしたら、ライブラリに
jwcgh_clearcircle();が定義されていませんでした。

こっちも作ってたら結局手作業で消す時間よりかかって
しまいました..<偽の無精>

こちらは「番外編:C言語で外部変形」のほうに
アップしています。

2006年11月 5日 (日)

直線だけ

JW2.5DからSketchUpへの3D-Dxfの取り込みは
Dxfファイル読んだときにグループ化される
ので今ひとつです。多分SketchUp側でプラグ
インで読んでやるほうが良いかと思い、直線
だけやってみました。

今、他の外部変形を製作中なので時間ができた
らもうちょっと研究してみます。

def readDXF
    file=open("d:/work/temp.dxf","r")
    model = Sketchup.active_model
    while line=file.gets
        if line=~/LINE/
            while line=file.gets
                if line=~/^\s*10\s*$/
                    x1=file.gets.chomp
                end
                if line=~/^\s*20\s*$/
                    y1=file.gets.chomp
                end
                if line=~/^\s*30\s*$/
                    z1=file.gets.chomp
                end
                if line=~/^\s*11\s*$/
                    x2=file.gets.chomp
                end
                if line=~/^\s*21\s*$/
                    y2=file.gets.chomp
                end
                if line=~/^\s*31\s*$/
                    z2=file.gets.chomp
                end
                if line=~/^\s*0\s*$/
                    break;
                end
            end
            model.start_operation "readDXF"
            pt1=[x1.to_f,y1.to_f,z1.to_f]
            pt2=[x2.to_f,y2.to_f,z2.to_f]
            model.entities.add_line(pt1, pt2)
            model.commit_operation
        end #LINE
    end
end

2006年11月 3日 (金)

c:\jww以外でも動くように

他の方が作った外部変形を使っていて気づいた

すべてをc:\jwwに置くことにしていると
そのうち収集がつかなくなる..
(もうなってる??)

ということで自分が作ったものも
c:\jww以外でも動くように改造しました。

rem #cd

をバッチファイルに追加するのを
忘れないように...

2006年11月 2日 (木)

寸法図形の"msg"

どうも寸法図形の"msg"の表記はかならず
jwc_temp.txt最後に出力されるようだ。
仕様としてそうなっているのかどうか
はよく判らないですが..

2006年10月26日 (木)

属性についての発見

今までほとんど我流で外部変形を作って、使って
いたけど、いま、ちょっと他の方の作った外部変形を
読んで勉強している。

DOS版も含めると10年以上jwを使っていることに
なるけど外部変形に限らず今まで使わないできている
機能が多いことに驚かされた。

rem #zzという外部変形の記述を調べていて属性と
いうものを初めて意識した。

今日わかったことと判らなかったこと。

(1)ハッチ属性と寸法属性は理解できた。
図形属性と建具属性はよく判らない。

(2)今まで寸法補助線を消すのに色指定で
消していたけど寸法属性を選択して
消去すると寸法図形と一緒に全部選択
消去できる。これは便利。

(4)属性変更(DOSと同じようにSHIFT-「W」
を割り当てている)右クリックで
文字も現在の属性に変更できることを知った。
今までは左AM5時で変更していたが
ドラッグの苦手な自分にはこちらの方が簡単。

(5)「TAB」の属性取得も文字に対して使えるか
試したらこれもok。

2006年9月 6日 (水)

jw_cadとRhinoで3Dモデルの作成

拙作の外部変形「2.5Dから3D」の使い方です。この外部変形は2.5Dの書式で3D-DXFへの出力を行います。

「六角穴付きボルト(M6)」
まず、六角穴部分の奥行きを文字列で指示します。jwの2.5Dで文字を入れてもいいのですが ここでは一括入力する外部変形を使用します。

EX13-0.BATを起動して一番左のコマンドボタン「2.5文字」を押します。

六角形の部分を選択し「選択確定」を押します。

「2.5D数値の入力」と入力欄が出ますので「12,16」と入力してReturnキー。

もう一度「2.5文字」の外部変形を使って外側の円を選択、「10,16」と入力してReturnキー。

レイヤを変更して外側の円と同心の直径6mmの円を描きます。「2.5文字」の外部変形で「0,10」と入力。

この時点で25Dでアイソメ図を描くと次のようになります。

25to3d07

EX13-0.BATの左から2番目の「TOP」を押します。作成した線と文字をすべて選択して確定。基準点として円の中心を指示します。

jw上では未実行となりますが「temp.dxf」としてファイルが作成されているはずです。(多分 c:\jwwの直下に)

このファイルをRhinoからimportすると次のようになります。

25to3d01

円柱部分は「ソリッド→平面曲線から押出し→直線」、六角穴部分は「ソリッド→平面曲線から押出し→直線」と「ソリッド→差」を使用して3Dモデルとして仕上げます。

25to3d02

hpはこちらhttp://homepage2.nifty.com/a-yonei/Perl4jw49.html

«正規版