AFsoft World

AF日記。 コンピュータ・CAD・漫画・アニメ・ゲーム・スポーツ等についてのたわいもない話、などなど。

CADづくり

データ構造は SXF仕様に近く

[DelphiXE3・FireMonkey(FMX)で
俺がCADモドキを作れるはずがない?ネタ]

何らかのCAD、CADみたいなソフトを作るとして、当然、データ交換をしなきゃいけないシーンが出てくると思うんだけれども、その際、AutoCADとスムーズにデータ交換をしたい場合には、こちら側のデータ構造が AutoCAD=DXFと似たようなカタチになっていると、当然、やりやすい。同じように、SXFファイルでのやり取りが多い場合には、SXF仕様に近しいカタチになっているほうが望ましい。
AutoCAD=DXFはバージョンによってどんどん変わるし、私は古いモノしかわからない。なので、SXF仕様に近しいカタチで考えていこうと思っているんだけれども、当然、「業界標準=AutoCAD=DXF(DWG)」だろう?って人の場合は、そっちに似せて作ればいいんじゃないかと思う。
大きな違いは、やっぱ、AutoCAD=DXFの、レイアウト&モデル&ビューポートだろうなぁ。SXF仕様にそういう概念は無いし。でも最近のAutoCADでは、モデル空間にもビューポートが置けるって話を聞いた記憶もあるし、よく分からないです、はい(何せ見た事もないので)。

よく分からないし所持していないからテストも出来ないAutoCADについては置いといて、SXFの共通ライブラリを使うかどうかは置いといて、SXF Ver.3.1 レベル2の仕様に少し合わせるって事で。

となりますと、
フィーチャ
 ├ 図面情報
 │  └ 図面表題欄
 ├ 図面構造
 │  ├ 用紙
 │  ├ レイヤ
 │  ├ 線種
 │  ├ 色
 │  ├ 線幅
 │  └ 文字フォント
 ├ 幾何/表記要素
 │  ├ 点マーカ
 │  ├ 線分
 │  ├ 折線
 │  ├ 円
 │  ├ 円弧
 │  ├ 楕円
 │  ├ 楕円弧
 │  ├ 文字
 │  ├ スプライン
 │  └ クロソイド
 └ 構造化要素
    ├ 複合図形定義
    ├ 複合図形配置
    ├ 既定義シンボル
    ├ 直線寸法
    ├ 弧長寸法
    ├ 角度寸法
    ├ 半径寸法
    ├ 直径寸法
    ├ 引出し線
    ├ バルーン
    ├ ハッチング(既定義)
    ├ ハッチング(塗り)
    ├ ハッチング(ユーザ定義)
    ├ ハッチング(パターン)
    └ 複合曲線定義
で、用紙に部分図があって、部分図で尺度を指定すると。

だから、尺度設定は1つしかない、とか、レイヤで尺度を設定する、というシステムではない訳ですね。

というわけで、SXFな話については、当方サイトの「CADを考える」のコーナーで既にやってますので、そこでの開発環境とは違うので内容は多少違ってきますけれども、まぁ、お気軽に考えていこうかなぁ、とは思ってます。

SXF仕様での文字は、基本、シフトJIS って事になってますが、Unicode でやるつもりだし、フォントについても、Windows と MacOSX とでは違ってくるでしょうし。だから文字数制限とか、どうしようかなぁ?という気も、しないでもないんですけれど。

マウスの挙動

{DelphiXE3・FireMonkey(FMX)で
俺はCADモドキは作れるのか?ネタ}

下記のようなテストプログラムを作って
マウスの挙動について見てみました。
20150105a

Imageコンポーネントを貼り付けて、その上でマウス操作をする際の、マウス関連のイベントハンドラの引数がちゃんと受け取れるかどうかの確認です。

↓結果
20150105b
※TD=タッチディスプレイ
  での、タッチ操作での挙動確認
MacOSX では、マウスボタンの同時押し操作は出来ません。

結局、全く反応のない ssTouch、ssPen って一体何なの?って感じですが、Windows7 でのタッチディスプレイ使用時には有効かもしれません。未確認ですけれど。しかし、Windows7 で上手く取れたとしても、Windows8〜で取れないんであればほとんど無意味なので、やっても仕方が無いなぁという感じです。

タッチは、ジェスチャーコンポーネントを配置して、それを指定しても、ダメでした。というか、それをすると反応が少し鈍くなった感じがします。更に、対話型ジェスチャーのズームも MouseWheel イベントに連動してくれないので、ジェスチャーコンポーネントはほとんど無意味です。(※Windows7+タッチディスプレイであれば可能かもしれません) 標準ジェスチャーを使用するためにジェスチャーコンポーネントを利用するのであれば、それなりのメリットがあると思いますけれども。
この辺は、DelphiXE5 でも同様だったと思います。

最新の DelphiXE7 だとまた違ってくるのかもしれませんが、購入(バージョンアップ)してませんので、よく分かりません。

色んな動作環境で同じように使えるプログラムを作る、というのは、それなりに、色々とあるなぁ、という感じです。

今現在は、
マウス左ボタン: 各マウス指定 座標点クリック等
    右ボタン: クリックで画面移動、ドラッグで画面拡大縮小
    中ボタン: ドラッグ画面移動、ホイールで画面拡大縮小
位に考えています。
MacOSX の場合、マウスホイールボタンクリックで何かをするという事が出来ないので、何かちょっと勿体無いなぁという気がしないでもないです。

開発環境

CADモドキを作ろ〜 ということで
まず
開発環境の確認から。

エンバカデロ DelphiXE3 にて
FireMonkey(FMX) HD アプリケーションとして
作成。

同じPCに XE4 も入っているから、
XE4 でもいいんだけれども、まぁ、
XE4 とはいつでも遊べるから・・・という訳で。
(まぁ、さほどの違いも無いだろうし)

従来の VCL アプリケーションではないのは、
MacOSX で動作させることも考慮に入れて。

FMXアプリケーションにする以上、
WindowsAPI とか、レジストリとか、
Windows依存なプログラミングは不可能なので注意、と。

WindowsPC:
 Windows7 Home 64bit メモリ 2GB
Macintosh:
 MacOSX 10.6.3 Snow Leopard メモリ 3GB


DelphiXE5 を入れている別PCは、タッチパネルの
ディスプレイなので、タッチパネルを意識したプログラミングも
やろうと思えば出来ると思いますが、Windows8 なので
先日、ジェスチャーでのタッチパネルでの拡大縮小が
出来なかったので、基本的には、タッチ・ジェスチャーは
意識しないこととします。

・・・

え? 意識した方がいい?

う〜ん、意識するんなら、インターフェイスもそれ用に
考えないといけないからなぁ・・・
開発環境も、Delphi XE5 でやったほうがいいだろうし・・・

どうしようかなぁ? いきなりの悩みどころ。
Recent Comments