AFsoft World

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

CADづくり

所詮 夢物語かAFD w

今日、なんか オープンソースについてのクレーマーなコメントが付いてた

これは
オープンソースな 2D-ドローソフト「AFD」を公開した私に対する、嫌味なのか、クレームなのか、それとも、
無駄無駄無駄無駄無駄無駄無駄ぁぁあああ!
・・・やれやれだぜ!
ってのを言いたいのか

というわけで取りあえず、叩き台としての「AFD」を
出してみたけれども現在までに
オープンソースであるが故のコメント等は
一切ありませんw

やはり、オープンソース云々以前に、まず、
世間に普及していない事には、どーにもならん、
って事なんでしょうねww
まぁ、私のような マイナーな ただの1個人の
やれることなんて たかが知れてるから
仕方がない面も大きいかな。

元々が、私の中にある もやもや感を全部出して
すっきりしたかった、というのが大きな目的だったから
それはそこそこ叶ったので それで良しとしようw


で、「AFD」を作ってて思った事は
1)作った関数・手続き
 必要に応じてコピペ・作ったり付け足したり
 とかしていたので共通性があんまり無かったり
 やっぱりある程度、最初から、仕様・共通性を意識して
 作りこんでいかないといけなかったなぁ、と反省
2)ラバーバンド
 必要に応じて付けたし付けたしをしてたから
 あとになって見ると 訳が分からない事に…
 これもちゃんと最初から見越して
 管理しないといけなかったなぁ、と反省
3)端点・交点
 画面表示をする毎に計算しているけど
 これは仕方がないって思っているんだけど
 交点計算を行う対象データの絞り込みをもっとやって
 おくべきだったかな?と
 例えば、画面上で50ドット以上のものだけ計算対象、とか
 あと
 タブレットの場合、マウスが存在しないから
 今回のような想定検索ボックス表示が出来ないので
 結局、従来のような タッチ→検索→スナップ って
 ロジックが必要となり、現行の
   想定検索ボックス→クリック(スナップ)
 との辻褄合わせをどうするか? って辺り
4)線種
5)楕円の扱い
 今回、ほとんど何も考えてなかったけど。
 斜め軸対応?
6)複合曲線
7)ブロック図形
8)オブジェクト図形
9)外部参照
・・・
ネタが尽きないなぁw




ホームページでの「CADつくろ!」では、Delphi 6 Personal を使っているので、Delphi 6 が発売されたのは 2001年だそうですから、まぁ、その辺りの頃の話だと思います。時期から考えて、前の前の勤め先での奴隷状態だった頃ですねw
次の「CADを考える」は、平成23年からとありますから、2011年、11年前ですね

ブログで「俺は Delphi FMXでCADモドキが作れるのか?」ってのを始めたのが
http://blog.livedoor.jp/afsoft/archives/52118539.html
これ 2015年1月
しかし途中で何か限界を感じて投げ出してしまうww

再度、モチベーションを上げなおして
http://blog.livedoor.jp/afsoft/archives/52288905.html
っていうのをアップしてますが
これをしようと考えたのは 2020年1月
約2年半の結果が、現在の「AFD Ver.1.0.5」です。

先のパート先が赤字消滅して、さぁ、2020年。
何をしようかいな?
と思って開始したマイ・プロジェクトな訳でありますw

幸いにも、これとは別にプログラム開発の仕事が頂けて現在もかろうじて生きていますがw まぁそれも来年以降は全くの不明w 新しい仕事が頂けるか、貯金切り崩しか、新しいパート探しか、どうなるのかさっぱりわかりませんw


というわけで、私個人としては、「オープンソース」という事で
20年以上、ずっとウェブ上で続けている訳ですが
いやぁ
それにも関わらず、私のことを「反オープンソース連合」総帥 みたいな風に思って私を攻撃してくる人たちって、一体、何なんでしょうね?
たぶん、
叩きたい相手、どんどん叩いてやれ!って相手を見つけて
ひたすら
クレームしまくっているのでしょう。残念な人達です。

そんな時間があるんなら、オープンソース・プロジェクトを広げたいのなら、そういう活動をすればいいのに、と本気で思います。

AFD Ver.1.0.5 公開

「AFD Ver.1.0.5」を OSSにアップしました。
http://afsoft.jp/oss/

Windows 32bitアプリケーション版、
Windows 64bitアプリケーション版、
PDFマニュアル、
Delphi 10.3.3 FMX ソース をダウンロードできるようにしています。

シンボル図2つ、追加してます。


Ver.1.0.5 2022/06/01
・マイナス倍率指定による貼り付け時、円弧・楕円弧・弧長寸法・角度寸法の角度値が反転しない件を修正

シンボル図を描くのも飽きたしw AFDについての御意見等 何もありませんので、AFDは当分このまま放置しようと思ってます。

AFD Ver.1.0.4 公開

「AFD Ver.1.0.4」を OSSにアップしました。
http://afsoft.jp/oss/

Windows 32bitアプリケーション版、
Windows 64bitアプリケーション版、
PDFマニュアル、
Delphi 10.3.3 FMX ソース をダウンロードできるようにしています。



・コマンド実行の際、Offs値を 0 にリセットするよう変更
 (割込コマンド実行時も同様)
・連続線選択のバグFIX
・塗り潰し(選択連続線)、ハッチング(選択連続線)、図形ハッチ(選択連続線)追加
 ※外形線・中抜線は、描画しない(0) となります
 ※これらコマンド実行時「元に戻す」をしても選択解除しないよう調整

AFD Ver.1.0.3 公開

「AFD Ver.1.0.3」を OSSにアップしました。
http://afsoft.jp/oss/

Windows 32bitアプリケーション版、
Windows 64bitアプリケーション版、
PDFマニュアル、
Delphi 10.3.3 FMX ソース をダウンロードできるようにしています。


微調整、コマンドラインからのレイヤー・色・線種・線幅の指示、トップビュー画面表示(3秒毎更新)、レイヤー一覧表示(16枚単位)の追加を行いました。

AFD Ver.1.0.2 公開

「AFD Ver.1.0.2」を OSSにアップしました。
http://afsoft.jp/oss/

Windows 32bitアプリケーション版、
Windows 64bitアプリケーション版、
PDFマニュアル、
Delphi 10.3.3 FMX ソース をダウンロードできるようにしています。

あと、テキトーですが
シンボルデータ4種、描きましたのでアップしておきます。



削除するとき、[Ctrl]+[Del] しますが
これを [Del] にすると
座標入力とかパラメ入力とかで [Del]が使えなくなってしまう、ということになってしまい、残念ながら [Ctrl]+[Del] のままにしています。

AFD Ver.1.0.1 公開

「AFD Ver.1.0.1」を OSSにアップしました。
http://afsoft.jp/oss/

Windows 32bitアプリケーション版、
Windows 64bitアプリケーション版、
PDFマニュアル、
Delphi 10.3.3 FMX ソース をダウンロードできるようにしています。

ソースは汚いですが何かの参考になれば。
すべて自己責任で どうぞ


2022/05/24 17:55 少しミス見つけたので修正アップしました
(座標入力欄で小文字「c」「e」が使えなくなってたので FIX)

AFD Ver.1.0.0 公開

というわけでようやく説明書きを書きましたので
本日「AFD Ver.1.0.0」を OSSで公開しました。
http://afsoft.jp/oss/

Windows 32bitアプリケーション版、
Windows 64bitアプリケーション版、
PDFマニュアル、
Delphi 10.3.3 FMX ソース をダウンロードできるようにしています。

う〜ん、疲れたw

ソースは汚いですが何かの参考になれば。
すべて自己責任で どうぞ


追記:2022/05/22 18:00 少しミスが見つかったので修正アップしました
 

AFD Ver.1.0.0

これまで作成していた2D-ドローイングツール「AFD」
20220513a
ですが、おおよそMy脳内で想像していたところまで出来ましたので、これを Ver.1.0.0 として公開予定です。
http://afsoft.jp/oss/
現状は説明書き等を全く書いてませんので EXE(32bit)のみですが、説明書きを書いたらそれ用のページをOSSに追記して、ソース公開をしようと思っています。著作権は放棄しませんが完全使用フリー状態にしようと思っています。(ソースはそれなりに結構汚いですがw)
プログラミング環境は、
エンバカデロ Delphi 10.3.3 FireMonkey(FMX)
です。
※エンバカデロ社からフリーで使えるコミュニティエディションが公開されています。現在は 10.4.2 だと思います。(現在は 10.4.2 での動作確認はしてませんが多分大丈夫だと思います) このエディションはフリーウェア開発、及び、零細規模な商用利用が可能です(年間売上50万円まで)。開発したアプリの年間売上合計が 50万円を超える場合は、Pro版以上を購入して利用する必要があります。

多分、動かしながら説明書きを書いてる最中でバグ・不具合を見つけて修正すると思いますが、興味のある方はダウンロードして触ってみて下さい。

AFD_TEST

4月の終わりに出したかったのですが「丸め」に手こずって少し中途半端過ぎたので遅れました。とりあえず現在作成中のおりぢなる2D-ドローイングツール「AFD」の途中経過です。
中途半端状態なので実行プログラムのみです。
興味のある方のみ自由に触ってみて下さい。
20220504a
http://afsoft.jp/test/afd_test.zip
ZIP圧縮 3.8MB
Delphi 10.3.3 FMX で作っています。

貼り付け時の縦横異倍率の際の
・矢印円弧は楕円弧対応
・寸法線の斜め引出しに対応
はブッコミましたが多少の違和感はあるかもしれません
あと
編集関連のコマンドの追加、オフセット(Jw_cad での「複線」)の追加、等です。端点変更や延長短縮など、操作編集する側の点を指示します。反対側の点が固定点です。Jw_cad と逆の部分はありますが私のDOS版CAD時代からの感覚は、こっちです。オフセットの線円弧指定は、第1点は検索開始点、最終点は検索終了点、途中の点は交点付近を指示して下さい。うまく取れない場合・計算出来ない場合は作図が乱れたりします。
なお
楕円・楕円弧は交点計算等を組み込んでいませんので指示や計算等はほぼ出来ません。

AFD_TEST

3月の終わりに出したかったのですが少し中途半端過ぎたので遅れました。とりあえず
現在作成中のおりぢなる2D-ドローイングツール「AFD」の途中経過です。
中途半端状態なので実行プログラムのみです。
興味のある方のみ自由に触ってみて下さい。
20220406a
http://afsoft.jp/test/afd_test.zip
ZIP圧縮 3.7MB
Delphi 10.3.3 FMX で作っています。

なお、貼り付け時の縦横異倍率の際、
・文字はスラント対応していない(※斜体文字は可)
・左右反転・上下反転文字は対応していない
・矢印円弧は楕円弧対応していない
・弧長寸法・角度寸法の円弧は楕円弧対応していない
・寸法線は斜め引出しに対応していない
 (必ず垂直引出しになる)
・画像は平行四辺形対応していない
・左右反転・上下反転画像は対応していない
等、思ったような貼り付けが出来ないと思いますがこれは仕様です。

触ってみて 笑って頂ければ幸いです。

AFD_TEST

2月も終わりですのでとりあえず
現在作成中のおりぢなる2D-ドローイングツール「AFD」の途中経過です。
中途半端状態なので実行プログラムのみです。
興味のある方のみ自由に触ってみて下さい。
20220228a
http://afsoft.jp/test/afd_test.zip
ZIP圧縮 3.6MB
Delphi 10.3.3 FMX で作っています。

設定メニューにローカル座標関連、属性取得関連、を追加しました。
このツールでは、各レイヤーに色・線種・線幅を設定し、要素データの色、線種、線幅で、レイヤー色、レイヤー線種、レイヤー線幅、という指定が可能ですが(AutoCAD の ByLayerみたいなもの)、属性取得の結果、レイヤー何ちゃらの場合、レイヤーが違うことにより見え方が違う、ということが有り得ますのでご注意下さい。

触ってみて 笑って頂ければ幸いです。

AFD_TEST

Delphi 10.3.3 Cmt-Edt. のライセンスが切れましたので
とりあえず
現在作成中のおりぢなる2D-ドローイングツール「AFD」の途中経過です。
中途半端状態なので実行プログラムのみです。
(図形ハッチ用のテキトーな線図形ファイルは入れてますけど)
興味のある方のみ自由に触ってみて下さい。
まだ作図しか出来ませんw
http://afsoft.jp/test/afd_test.zip
ZIP圧縮 3.6MB
20220223a

Delphi 10.3.3 FMX で作っています。

要素データはこんな感じです。
ブロックはありません。
レイヤーは256個あってレイヤー設定でレイヤー毎の各種指定を行います。が、ほかの設定を含め、設定画面は結構手抜きしてますので分かりにくいやもしれませんw
画面操作は、マウス右ドラッグで画面移動、マウス左ドラッグで拡大縮小移動・全体表示・図形範囲表示を行います。タブレットでは両ボタン操作はほぼ出来ませんから対応してません。端点のスナップはマウスを近づけるとマークが出ますのでそれで。但し、交点検索はやたらめったに遅くなるため、端点等で1000点越えると交点は拾わなくなります。この検索点は画面再描画のたびに生成します。
まぁ、私の脳内想像の産物なので、どんなCADにも多分似ていないと思いますからw 色々と賛否両論あると思いますが、どのみちフリーで出すつもりなのでクレームは一切受け付けませんw

まぁ、触ってみて 笑って頂ければ幸いです。

※若干画面を調整しました
※開発用の Windows10/GPU:Intel HD Graphics4600 では別段問題出てなかったのですが、インターネット用PCの Windows8/GPU:Intel HD Graphics だと画面を小さくすると画面が乱れる問題が出ています。画面を大きくすると問題は出なくなります。原因不明ですがおそらくグラフィックスドライバの問題のような気はします。

テスト・アップ042

というわけで 今 作ってる最中の
テストプログラムです。
http://afsoft.jp/test/p042.zip
20160113b

線などに 矢印を付け足す機能を追加しました。

あと少し微調整。

円、楕円、閉じた曲線には、矢印はつけれません。
線の途中には、矢印は付けれません。
始点か終点か、だけです。

まぁ、矢印だけを単独で配置するっていうコマンドもアリかな?とは思いましたが、レアだと思ったので現在は付けてません。

円弧・楕円弧に矢印をつけたあと、矢印設定でその矢印スタイル内容を変更した場合、矢印の微調整を行わせています。
アンドゥ・リドゥは、設定を戻したりやり直したりという事は出来ませんので、矢印スタイル内容変更後にアンドゥをしても、元の矢印状態には戻りませんが、円弧・楕円弧の矢印の角度だけが元に戻る(矢印は以前のまま)という事になりますので注意してください。

なお、
円弧に対する矢印の角度は、始点/終点での接線角度ではなく
20160113c
こんな感じで書いてます。
矢印の水平長さの半分を半径とする円との交点をとって、端点からその交点への角度を 矢印の角度としています。何か理論的な話がある等ではなくて単に、そういう感じだったら、それなりに見えるかな?という程度の話です。最初は 水平長さ分をとってみたんですが、円弧の半径が小さくなるとやっぱり厳しいので、半分にしてみた〜程度の事です。

曲線は線分補間していますので、単純に、その1補間線分の角度をとってます。だからポリラインと処理は同じです。

テスト・アップ041

というわけで 今 作ってる最中の
テストプログラムです。
http://afsoft.jp/test/p041.zip

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20160101a
設定メニューを追加しました。
点の作図コマンド、点設定、矢印設定 を追加しました。
矢印の作図コマンドはまだです。
オフセット入力を追加しました。

その他、幾つか微調整。

とりあえず感が強いですけれども
まぁ、お正月なのでwww

Win64bitアプリ、MacOSXアプリでのコンパイルは別段問題無く出来ていますから、多分、いつでも実行プログラムは作成・配布できると思います。

次は何をしよう?

テストプログラム・・・

取りあえず、オフセット入力をつけるの忘れたので、付けましたけど(※まだ未公開)。
次、何をしよう?

やっぱり、点 かな?

点は、SXF仕様に合わせるつもりでいるんだけど・・・

あと、矢印をどうしようかなぁ?という気もしてるんだけども、線端点、円弧端点に作図させるのはいいとしても、線や円弧等を変形等したあとに、矢印はそのまんまって不細工だから、連動させる必要はあると思うんだけれども。 昔作った奴では、線の属性として(色・線種等と同じ感じで)線端種というのをつけてたけれども、同じようにするのか、それとも、矢印は矢印で単独の要素データとして存在させるのか・・・? グループ化? う〜ん? と悩み中です。
まぁ、寸法線・引き出し線等 以外で 矢印付の線を描くケースってレアなような気もするので、データサイズ的に考えると、線要素に線端種コードを入れる必要は無いかなぁ?等と思ったりもして。まぁ、あっても8バイト増えるだけなんですけれど、たぶん。(点の倍率も点スタイルに含んでしまう場合)

連動パターンにするとした場合は、矢印データに、相手先要素番号を入れる必要はありますね。どの点につけたのかは、配置座標で判断すればいいとして、角度もその都度、判断すればいいとして。 まぁ、線等をクリックして作図させるコマンドは当然としても、矢印付線・円弧の作図、みたいなのは、あったほうがいいかも?等と思いつつ。

円弧に矢印をつける場合、普通、その点への角度+90°(接線方向)って考えちゃうけれども、これをするとたいていの場合、ダサいんだよね。なんつーか、矢印の線と円弧の間隔が対照ぽくなくて、だから角度は微調整したくなる。旨い方程式でもあればいいんだけど分かんない。微調整角度量っていうパラメもあった方がいいなぁ等とも思いつつ。

悩む。

テスト・アップ040

というわけで 今 作ってる最中の
テストプログラムです。
http://afsoft.jp/test/p040.zip

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151213a
曲線 を追加しました。
各値(数値)の指定で、式を使えるようにしました。
その他、幾つか微調整。


曲線は、関数グラフ、ベジェ曲線1(区間別タイプ;頂点・制御点・制御点・頂点・制御点・・・)、ベジェ曲線2(一括タイプ;頂点・制御点・制御点・・・・制御点・頂点)、Bスプライン曲線(制御点)、スプライン曲線(Cスプライン・Bスプライン・有理Bスプライン;通過点)、クロソイド曲線、です。 それぞれ、内部でポリラインデータ(連続線)を作ってそれを描画しています。分割数で補間線分の線数が変わりますが、多すぎると やたら遅くなりますのでご注意を。その連続線は、始点・終点はスナップ出来ますが、途中の点、自己交差点はスナップできません。マウス指定点、他の要素データとの交点はスナップできます。なんで遅くなるのかというとその交点算出がえらく時間が掛かる為です。

関数グラフは、変数 T を開始値から終了値まで刻み値分ずつ変化させて、X値の式、Y値の式にT値をあてはめ計算させます。 例えば、Xの式を「T」、Yの式を「T*T」、開始値を「-10」、終了値を「10」、刻み値を「1」とすれば、放物線が描けます。

テスト・アップ035

というわけで 今 作ってる最中の
テストプログラムです。
http://afsoft.jp/test/p035.zip

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151201a
楕円 を追加しました。
その他、幾つか微調整。

楕円は、内部で 64分割し、3点円弧を連続させて 32本の連続円弧状態としています。そのため、細長い楕円の場合、綺麗にならなかったりします。また、楕円式ではないですから、本来の楕円と異なるため、楕円上の各点で誤差が出ます。交点は、楕円式での計算結果の交点ではなく、各補完円弧との交点となります。
実線以外の楕円の描画は、その連続円弧での描画になりますが、実線の楕円の描画は、DelphiXE4・FireMonkeyの描画命令で直接行っています。その方が若干高速であるからです。ですが、DelphiXE4・FireMonkeyの描画の各座標値は単精度実数であるため、どんどん拡大表示をすると誤差が目立ってしまいます。ですが、本ソフトでは、線幅をそのまんま表現してますので、拡大すれば線も太くなっていって、そういった状態で図面を描く事はほぼ無いでしょうから、このままにしてあります。

将来、楕円の弧長(周長)を計算する等の場合も、この連続円弧で計算しますので、本来の楕円での結果と若干違ってくると思います。

テスト・アップ034

というわけで 今 作ってる最中の
テストプログラムです。
http://afsoft.jp/test/p034.zip

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151124a
円弧 を追加しました。
その他、いろいろ微調整。

さて、次の楕円なんだけれども、どうしようかなぁ・・・と少し悩み中。

テスト・アップ031

というわけで 今 作ってる最中の
テストプログラムです。
<リンク先は削除しました>

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。
20151119a
円 を少し追加しました。
その他、いろいろ微調整。

テスト・アップ030

というわけで 今 作ってる最中の
テストプログラムです。
<リンク先は削除しました>

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151117a
円 を追加しました。

円はもう少し作ります。

久しぶりにアップップ

というわけで 今 作ってる最中の
テストプログラムです。
<リンク先は削除しました>

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151114d
正多角形、星型 を追加しました。

まぁ、ゆっくり 作ってます。

次は・・・ 円 かな?

これは 32bitアプリですが、コンパイル時に指定を変えれば、64bit版も、MacOSX版も 作れるはずです。

ひさしぶりにアップ

というわけで 今 作ってる最中の
テストプログラムです。
<リンク先は削除しました>

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151111a
修正やら何やらでなかなか前に進んでません。

まだまだ何もできませんけれど。
直線・ポリラインが描けるだけ。
まぁ、ゆっくり 作ってます。

これは 32bitアプリですが、コンパイル時に指定を変えれば、64bit版も、MacOSX版も 作れるはずです。

ひさしぶりにアップ

というわけで 今 作ってる最中の
テストプログラムです。
<リンク先は削除しました>

動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

20151030a
まだ何もできませんけれど。
直線が描けるだけ。
まぁ、ゆっくり 作ってます。

これは 32bitアプリですが、コンパイル時に指定を変えれば、64bit版も、MacOSX版も 作れるはずです。

画面イメージ・・・

とりあえずの画面のラフイメージ
20150112a
Windows版:http://afsoft.jp/test/p010_win32.zip(約3MB)
MacOSX版:http://afsoft.jp/test/p010_mac.zip(約4MB)
(※上記は何も出来ないただのテストです)
あ、メニューが無いな、メニューはつける予定。
画面右側は、操作パネルなイメージ
画面一番下は、ステータスバー、
その上に、コマンド入力欄、
その上に、ヘルプメッセージ欄、
という感じ。
ヘルプメッセージが邪魔だったら、リサイズして見えなくすればいい、みたいな。

フォーカスがあちこちに移動すると面倒臭いので、操作パネルにはフォーカス移動させないようにしようかと。だから普通のボタンとか、入力欄とか、を配置するつもりはないです。座標入力とかは、コマンド入力欄で打ち込み、みたいな感じ。

マウス操作は、
左クリック:座標指定
右ドラッグ:画面拡大縮小移動
中ドラッグ:画面移動
ホイール:画面拡大縮小
みたいな感じ。
スナップは、マウスを端点近くに移動したら、端点拾うぜ!マークが出て、クリックしたら端点を拾う、みたいにしたい。

タッチ操作は、
タッチ=左クリック、
長押しタッチ=右クリック、
なので、長押しをした状態でドラッグ操作をすれば
右ドラッグ操作になりますので、
そっちで画面拡大縮小移動は出来ますが、
2指操作での拡大縮小が、Win8・DelphiXE3・FireMonkeyで
実現できないため、対応させません。
また、タッチでのドラッグ画面移動も出来ません。
この辺、どうするか、ですが、
ドラッグ画面移動コマンドを用意して、左ボタンで
そういう操作を出来るようにするか、或いは、
Shift/Alt/Ctrl + 右ドラッグ って事にするか、
等については まだ余り考えてません〜

リボンインターフェイスは、やるつもりありません。
マイクロソフト社との云々が必要なので。

ツールバーは、DelphiXE3・FireMonkey(FMX)の場合
ドッキング&フロートを自動で行えるコンポーネントが
存在しないので、どうしようかは考え中。
多分、普通のフォームに ボタン乗せて、
それを表示・非表示させる程度に、なりそうな気はします。




しかし、Windows と MacOSX での挙動が結構違うので
結構難儀ですね。マウス操作とか。これは DelphiXE3 を
使っているせいなのかもしれないけど。特に、中ボタン。
OnMouseDown、OnMouseUp で 中ボタンを認識して
くれないので、中ボタンでのドラッグ画面移動を作る際
ちょっと煩雑なコードになってしまいました。

用紙

DelphiXE3・FireMonkey(FMX)で
俺はCADモドキを作る事が出来るか?ネタ

用紙。

SXF的には、A0〜A4・縦横、フリーサイズ、
となっているのは周知の通り。

Jw_cad では、
A0〜A4、2A,3A,4A,5A,10m、50m、100m
となっているけれども、
掲示板等では稀に、縦が欲しい、という話や
B系も欲しい、って話もあった。
私的には、建築・土木は知らないんで
2A,3A,4A,5A,10m、50m、100m
というのが必要なのかどうか?ってずっと思ってた。
任意サイズがあればいいんじゃなかろうか?みたいな。
ロール紙対応、というわけでもないし、
用紙枠外に描くのなら、用紙枠外に描けばいい、って
思ってたし、全体表示をしたら全部が見える、って事なのか?
2A=A0図面2枚/A1図面4枚 描けますよ、
3A=A0図面4枚/A1図面8枚 描けますよ、
みたいに、ページの代わりみたいなことであれば、
印刷範囲設定を複数持てるようにして、
連続印刷が出来るようにしたらいいのに・・・
とか思ってた。
特に、マークジャンプで複数記憶できるようになって
いるんだから、印刷範囲も・・・って思ってしまうんだけど。

それなら私的には、ページの概念を持ってる方が楽かなぁ?
みたいにも思ったっけ。
昔作った DOS版の CADモドキは、ページの概念を持って
いなかったけれども(DOSなので大容量メモリは使えなかったし
速度もそんなに速くなかったから、ってのもある)
昔作ったお絵描き的ドローソフトの「fg」ってのは、
ページの概念を持たせていた。

ページの概念は、まぁ、レイヤと同じく、データ項目を持たせて
表示・非表示のコントロールをすればいいだけだから、別に
難しくはないです。まぁ、速度アップのための最適化的な話で
特殊なテクニックを使う、みたいな話もあるかもしれませんが
それは置いといて。

おっと、話がそれた。

というわけで、用紙サイズは、
用紙サイズ
       X     Y
A0横    1189     841
A0縦     841    1189
A1横     841     594
A1縦     594     841
A2横     594     420
A2縦     420     594
A3横     420     297
A3縦     297     420
A4横     297     210
A4縦     210     297
A5横     210     148
A5縦     148     210
B0横    1456    1028
B0縦    1028    1456
B1横    1028     728
B1縦     728    1028
B2横     728     514
B2縦     514     728
B3横     514     364
B3縦     364     514
B4横     364     257
B4縦     257     364
B5横     257     182
B5縦     182     257
B6横     182     128
B6縦     128     182
任意サイズ

みたいな感じでいいかなぁ?

仮に、SXFで保存するんなら、A5、B〜は任意サイズになってしまうけれども。まぁ、そういうのはどうしようもないとして。

ちなみに、SXF的には、原点が左下なので、それにあわすつもりでいるから、作図の途中で用紙サイズを変える場合は、左下点が固定された状態で画面状態が変わる。 Jw_cad では原点が中央だから中央を基準に画面状態が変わるけれども。
あ、そういう場合は、図面枠・表題などは、テンプレートとして保存・呼び出しが出来るようになっていて、用紙サイズ変更時に それも変更できるようになっている方がいいのか〜。

あ、ページの機能は、あったほうが面白いかも、ですねぇ。でも、そうなると、ページ毎に用紙フィーチャが必要になるから、SXF仕様そのまんま、というわけにも行かなくなるのか。簡単に考え過ぎない方がいいかもしれない?

ラバーバンド(仮表示線)続

DelphiXE3・FireMonkey(FMX)で
俺は本当にCADモドキを作る事が出来るのか?ネタ

ラバーバンド(仮表示線)の続き

20150108a
というふうに、TImage コンポーネントの子になるように、TPath コンポーネントを配置し、位置・大きさを Image と同じにする。Path1 の位置 Position 値と、大きさ Width・Height 値を マウス位置や機能内容に応じて変えるっていうのは非常に面倒臭いため。
で、Path1 の HitTest プロパティを False にして(でないと Image がマウスイベント処理出来ないので)、WrapMode を ストレッチではなくオリジナルにする。でないと座標値指定にマウス座標をそのまま利用出来ないから。

ボタンに応じて、線、四角、円、のラバーバンドなテストをしてみた。

20150108b
          ↓
20150108c
          ↓
20150108d
          ↓
20150108e
          ↓
20150108f
          ↓
20150108g

なんかビミョーに位置がずれるような気がするけど、MouseDown ではなく、MouseUp で座標決定しているから、かもしれない。 クリック〜クリック〜 で描かせてるけど、ドラッグで描かせる方が お好きな方々も居るかもしれない。 ただ、ドラッグで描かせようとすると、作図しようとしてるときに、画面の拡大縮小移動が出来ないかもしれない、ってのはありますね。

ラバーバンド(仮表示線)

DelphiXE3・FireMonkey(FMX)で
俺は本当にCADモドキを作る事が出来るのか?ネタ

ラバーバンド(仮表示線)

画面拡大のときに表示される四角とか、線を作図するときに終点指定時に表示される線とか、あぁいうの。

VCLアプリケーションの場合は、
Pen.Mode で 通常作図の場合は pmCopy を指定するけれども、これに、pmXor を指定することで、同じ位置に2度描きすることで、背景はそのままの状態に保ちつつ、線を描いて、消す、ということが出来る。線を作図する前の背景画像を記憶し、線を消したあとに背景画像を書き直す、というような必要がない。ということで、高速にメモリ等を使用する事もなく、実現が可能で、DOS時代からよく利用されてきた機能です。

しか〜し、FireMonkey(FMX) には、それらしき機能が無い!

先日作った「JWV6」での画面拡大縮小時の四角は、[Shapes]内の TSelection コンポーネントを利用している。けれどもこれはあくまでも四角のみ。なので、Canvas にラバーバンド線を描かせる、のではなく、このように、別コンポーネントを使って画面に別個に描画させる、という手段を取らざるを得ないだろう。 線のときは、TLine、円のときは、TCircle、などではなくて、もっと一括で扱える手法のほうが、メモリ・リソース的には良いんかもしれない。そこで、TPath が使えないだろうか? というのを考え中。

うまくいけばいいんだけど・・・

線種

DelphiXE3・FireMonkey(FMX)で
俺はCADモドキを作る事が出来るのか?ネタ

線種。

DelphiXE3・FireMonkey(FMX)では、ImageやPaintBoxの
Canvas の Stroke.Dash に値を入れる事で、線種が
表現できる。
20150107e
破線のすき間は、線幅に比例して大きくなる。まぁ、それはいいんだけれども、
実線・破線をランダムで 10万本描画する例。
線幅:2のとき。
20150107f
線幅:4のとき。
20150107g
線幅:10のとき。
20150107h
太い方が、画面が混み入っていないから速い、って感じ?
2ドット線幅で描画することを考えた場合、単純に、線種指定時の描画がかなり遅くなります。VCLでの WindowsGDIでの描画の場合は、実線描画も破線描画も、それほど速度の差は無かったような気はします。しかし、ここまで違うとやはり考えてしまいます。
簡易描画=Stroke.Dashでの破線指定描画、詳細描画=プログラミングでの破線描画、というような区別はほとんど意味がありません。簡易描画にすれば速い、というメリットがあればいいですが、実質、簡易描画の方が遅い、という結果になりかねません。先に作った「JWV6」でも、簡易描画・詳細描画、という指定がないのは、簡易描画のほうが遅かったからです。

破線の設定は、
←   1ピッチ  →
━━━━━  ━  ━━━━━
線分長さ 空白長さ 線分長さ 空白長さ
 20mm   5mm   5mm   5mm
という感じで行いますが、
SXF的には、
1  continuous 実線 
2  dashed 破線 6,1.5
3  dashed spaced 跳び破線 6,6
4  long dashed-dotted 一点長鎖線 12,1.5,0.25,1.5
5  long dashed double-dotted 二点長鎖線 12,1.5,0.25,1.5,0.25,1.5
6  long dashed triplicate-dotted 三点長鎖線 12,1.5,0.25,1.5,0.25,1.5,0.25,1.5
7  dotted 点線 0.25,1.5
8  chain 一点鎖線 12,1.5,3.5,1.5
9  chain double dash 二点鎖線 12,1.5,3.5,1.5,3.5,1.5
10  dashed dotted 一点短鎖線 6,1.5,0.25,1.5
11  double-dashed dotted 一点二短鎖線 6,1.5,6,1.5,0.25,1.5
12  dashed double-dotted 二点短鎖線 6,1.5,0.25,1.5,0.25,1.5
13  double-dashed double-dotted 二点二短鎖線 6,1.5,6,1.5,0.25,1.5,0.25,1.5
14  dashed triplicate-dotted 三点短鎖線 6,1.5,0.25,1.5,0.25,1.5,0.25,1.5
15  double-dashed triplicate-dotted 三点二短鎖線 6,1.5,6,1.5,0.25,1.5,0.25,1.5,0.25,1.5
16  未使用 
17  ユーザー定義線種1

32  ユーザー定義線種16
となっていて、ユーザー定義線種は、
線種名・セグメント数(2,4,6,8)・各長さの指定、
となっています。

線のピッチは、用紙に対する長さ指定です。尺度には関係しません。

で、プログラムでは、各ピッチの長さの実線を画面に順番に描画していく、という感じです。連続線の場合には、前の線から引き継いで、線種が綺麗に見えるようにします。また、クリッピングで途中の部分だけが画面に見える状態も、整合性のあるように描画することにします。

線が
始点●━━━  ━  ━━━  ━  ●終点
となると、終点が見えていないのに、端点をスナップ、っていう事になると、正直、よく分からなくなると思うので線の長さとピッチの長さをあわせみて、
始点●━━━━━━  ━  ━━━━●終点
ピッチの前後にいくらか伸ばした感じで描画するようにして、破線部は、ピッチの途中で終わらない、っていう風にします。なので、短い線の場合(1ピッチ長+α 未満)は、破線で指定していても、実線で見えるって事になります。

円、円弧、楕円、楕円弧、曲線、については、連続する補間円弧状態にして、最終的には連続する補間直線状態にしてしまいます。部分図の状態によっては、円・円弧も変形されて楕円・楕円弧のように描画される場合もありますから、注意が必要かも?という気はします。各種計算は、補間円弧毎に行うようにしようかなと思っています。

線幅

DelphiXE3・FireMonkey(FMX)で
俺はCADモドキを作る事が出来るか?ネタ

線幅〜。

DelphiXE3・FireMonkey(FMX)では、ImageやPaintBoxの
Canvas の Stroke.thickness に値を入れる事で、線幅が
表現できる。 なぜか、Single型だけども、
実際に値を入れてみた結果は↓のような感じ
1
20150107a
2
20150107b
3
20150107c
4
20150107d

画像ソフトで拡大して見るとわかるけれども、
1→ 薄い2ドット
2→ 濃い2ドット
3→ 薄い4ドット
4→ 濃い4ドット
ということで、どうも、線幅は偶数単位らしい。
う〜ん・・・

小数点以下も指定出来るけれども、濃さで表現されるのであろう。

実際は、CADもどきでは mm単位で表現されるけれども、例によって、mm→ドットの換算を行ってから画面にドット指定で描画される。

SXF的には、線幅コード 1〜16 に実際の線幅値が割り当てられる。
1  0.13mm
2  0.18mm
3  0.25mm
4  0.35mm
5  0.5mm
6  0.7mm
7  1.0mm
8  1.4mm
9  2.0mm
10 (未使用)
11  ユーザー定義1
12  ユーザー定義2
13  ユーザー定義3
14  ユーザー定義4
15  ユーザー定義5
16  ユーザー定義6
というわけで、自由に指定出来る、という程でもないけれども、沢山指定しまくって、何が何やら分からなくなっても仕方無いし、細線・普通・太線くらいしか使い分けしないのなら、これでも多いくらい、かもしれない?
ユーザー定義は、0<長さ≦10^15 ってあるけど
10^15(10の15乗)なんて指定する奴なんか絶対に居ない。


古くは、DOS時代のCADなんかでは、色(ペン)にプロット時の線幅を割り当てて、色を指定すること=線幅を指定すること、みたいな感じがあった。線幅を忠実に画面に描画するのが難しい(出来たとしても相当遅くなる)というのはあったし、現実的に、プロッタが、そんな感じだったから、っていうのもありますね。
でもまぁ、Windows時代になると、画面描画で線幅を表現するっていうのは比較的簡単になりましたし(開発環境や状況によっては描画速度が遅くなるって場合もありますけど)、図面をカラーで線幅もつけて印刷したい、ってケースも増えましたから、色と線幅は別々に指定出来るようになりましたね。

なので、私のCADモドキも、色は色、線幅は線幅で、指定して描画して印刷する、って方向で行きたいと思います。そのほうが、ウィジウィグって感じだし。

レイヤ、色

DelphiXE3・FireMonkey(FMX)で
俺のCADモドキがこんなに笑えるわけがないネタ

レイヤは、SXF的には、最大256個まで、だけど
AutoCAD系を除き、最大256個まで、というCADは
結構多いと思うので、それでいいんじゃないかと思う。
(AutoCADでのレイヤ(画層)は、自由に好きなだけ作れる)

SXF的には、
レイヤ名(最大256バイト)、表示・非表示フラグ、
があるだけ、だけども、
表示はするけれども要素検索させないフラグ、とか、
このレイヤには書き込み出来ませんフラグ、とか、
そういうのは あっても良さそう。
あと
AutoCAD的な、ByLayer みたいなのも
出来る方がいいかもね? という気はする。
色・線種・線幅・文字フォント。

色等での、ByBlock もいいと思うけれども、
ややこしくなるので別に無くてもいいかもしれない。


次に色。
SXF的には、
既定義色:1〜16
ユーザー定義色:17〜256
の色コード番号が使えます。
既定義色には、名前はふられていますが、色もそれに固定、と考えるのが普通。ユーザー定義色には、名前というのは無いですね。R,G,B 各値を指定するっていうだけ。という事で、色名というのは別段、要らないでしょう。色コード番号と、実際の色値、というだけの管理で良いと思います。

あと、せっかくだから、DelphiXE3・FireMonkeyでは
透過色が使えますので、透過色(α値)も使えるようにします。
SXFでのデータ交換時には、無視すればいいでしょう。
20150106a

20150106b

DelphiXE3・FireMonkeyでの透過は、コンポーネントのプロパティでの指定、描画メソッド実行時での指定(Opacity)というのもありますが、そういうのは使用せず、色値で指定することとします。

上記の画面では、ユーザー定義色のデフォルト値はランダムですけれども、デフォルトは全部黒とか、AutoCADっぽい配色にするとか、なんかいろいろと考えられそうだけども、パレットデータとして一括で自由に入れ替え出来るようにしておくってのもいいかもしれないですね。まぁ、設定や入れ替えをすると、現在の図面の色(ユーザー定義色のトコロ)もごろっと変わるって事になるんだろうけれども。
Recent Comments