AFsoft World

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

プログラミング

エンバカデロ日本法人設立15周年

だそうな
https://s608.t.en25.com/e/es?s=608&e=6685370&elqTrackId=6885354059e54edea4eb60a2b7602cba&elq=5bd9d4a61103483e9e25ef3ecfc1c46c&elqaid=50713&elqat=1

一番よく利用してたのは
Delphi 1.0J、Delphi 4、Delphi 6、Delphi 7J
ってアタリでこれは
エンバカデロ社以前の話だなぁ

その次に
Delphi XE3、XE4
かな?

Delphi 10、Delphi 11、は仕事では使ってないです
Delphi 11 に至っては全然触ってすらいないw
なのでもう、サブスクは次回 しない方向です
ま、今年は完全に赤字だし
Delphi 11 Proもこれ以上 すんばらしい発展ってのも
無さそうだし
結局 VCLも、標準で DirectX 対応コンポーネントや各処理、みたいなのも未だに出て来ないし、OpenGL等も本見て手入力って事なら出来るけど標準コンポーネントとか無いし、FMXでMacアプリやモバイルアプリ開発も結局どうなん?って感じもするしw

当方 Jww_rel は Win11では動作不可

当方のフリーウェアコーナーに置いてあるツール
「JWW関連付け Jww_rel」
を Windows11 にて動作させてみましたが、正常動作出来ませんでした。
という訳で御報告です。

現在、Windows11 での関連付け等についての調査等は出来ておりませんので、このツールは Windows11〜では動作させないで下さい。

よろしくお願いいたします。

AF3D Ver.0.05

昨年末から作り始めてる3Dなテストプログラムの現状報告です

まぁ、相変わらず全然進んでませんが 取りあえず
AF3D Ver.0.05
http://afsoft.jp/test/af3d_005.zip
基本的には、3Dモデルを 2Dドローソフトのように作れるアプリを目指しています。

ZIP圧縮していますので、ダウンロード後、
ZIP解凍(展開)を行って、
〜.exe ファイルをエクスプローラのプロパティで[ブロック解除]して下さい。

設定ファイルは仕様変更してますので
以前の設定ファイル(af3d.dat)は削除して下さい。

Ver.0.05 2023/06/01 更新
・基準点作図・面取得で楕円面対応をし忘れていたため追加
・X軸方向点・Y軸方向点を小さく変更
・データ仕様に基準点追加
・表示|プロパティ画面、
 編集|切り取り、コピー、貼り付け、削除、
    1図形選択、連続線選択、範囲選択、全選択、選択解除、
    端点変更、延長短縮、トリミング、面取り、丸め、部分削除 追加
・編集機能はほぼほぼ2D的なものです

最悪・・・

いつものように朝から Delphi 10.4.2 Proにて
プログラミング作業をしていたのですが
・・・・・
突然、Delphi がフリーズし
作業中のコードが きれいさっぱり
消えてしまいました
・・・・・
あ”〜〜〜〜〜〜〜

え?これ また プログラミングし直し?

う”〜〜〜〜〜〜〜

最悪・・・・・

作業中だから保存もしてないし実行もしてない
自動保存フォルダは? と思って見たら
あった! と思って開いても
中身が見れないので 一旦 Delphi を閉じたら
自動保存ファイル?は 勝手に 削除された
・・・・・

ショックショック ダブルショック!

自動保存フォルダ内にファイルが残ってたら
即 エクスプローラでどこかにコピーして
退避しないといけなかったのか・・・
やられた・・・

・・・・・

取りあえず 全て やる気が消滅

取りあえず サンドバッグを思い切り
叩け! 叩け! 叩け〜〜〜!!

Delphi 10.4.2 は これまでも時折
フリーズしたりしたけど
今回のような悲惨な事は 初めてかも
(大抵、ビルド→実行→フリーズ で
 ビルド時に保存されてたから)

あ”〜〜〜〜〜〜〜

AF3D Ver.0.04

という訳で 5月になりましたぁ!
昨年末から作り始めてる3Dなテストプログラムの現状報告です

まぁ、相変わらず全然進んでませんが 取りあえず
AF3D Ver.0.04
http://afsoft.jp/test/af3d_004.zip
基本的には、3Dモデルを 2Dドローソフトのように作れるアプリを目指しています。

ZIP圧縮していますので、ダウンロード後、
ZIP解凍(展開)を行って、
〜.exe ファイルをエクスプローラのプロパティで[ブロック解除]して下さい。

Ver.0.04 2023/05/01 更新
・右クリックで 3D空間での交点検索を追加(同一平面上2線の交点検索が可能)
・3D View画面で色が分かりにくい為、ライトを平行投影から点光源に変更
・作図|曲線 追加
・設定|座標測定、距離測定、角度測定 追加
・作図|三角面・四角面 を 作図|面|内に移動
・作図|面|長方形、正多角形、星形、円、
      ドーナツ形、扇形、弓形、円外側、楕円形、追加
・作図|接線|点から円へ、角度指示、円から円へ、円上点から 追加

AF3D Ver.0.03

という訳で 4月中盤になりました!
昨年末から作り始めてる3Dなテストプログラムの現状報告です

まぁ、相変わらず全然進んでませんが 取りあえず
AF3D Ver.0.03
http://afsoft.jp/test/af3d_003.zip
基本的には、3Dモデルを 2Dドローソフトのように作れるアプリを目指しています。

ZIP圧縮していますので、ダウンロード後、
ZIP解凍(展開)を行って、
〜.exe ファイルをエクスプローラのプロパティで[ブロック解除]して下さい。

設定ファイルは仕様変更してますので
以前の設定ファイル(af3d.dat)は削除して下さい。
(今後もそんな感じになりますが、色設定・レイヤー設定は当面変更は無しです)

Ver.0.03 2023/04/16 更新
・[取得]→[面取得] に変更 [高さ取得] 追加
 面取得がうまく行っていなかったため修正
・作図|点|基準点 追加
・作図|連続線|折線、HV連続線、長方形、正多角形、星形 追加
・作図|円|円、2点円、3点円、多重円、円弧、円弧2、3点円弧 追加
・作図|楕円|楕円(2・3)、楕円弧(2・3) 追加

AF3D Ver.0.02

という訳で 4月になりました!
昨年末から作り始めてる3Dなテストプログラムの現状報告です

まぁ、相変わらず全然進んでませんが 取りあえず
AF3D Ver.0.02
http://afsoft.jp/test/af3d_002.zip
基本的には、3Dモデルを 2Dドローソフトのように作れるアプリを目指しています。

設定ファイルは仕様変更してますので
以前の設定ファイル(af3d.dat)は削除して下さい。
(今後もそんな感じになりますが、色設定・レイヤー設定は当面変更は無しです)

データは以前の「点・線・三角面・四角面」に加えて「2点分割点」を追加しました。
座標入力欄の追加、点・線分コマンドを色々追加しました。

DXF/STL/OBJ/DAE の保存も出来るようにしていますので、これで絵を描いて DXFやDAEでスケッチアップ等に渡して云々とか、出来ると思います。

Jw_cad設定初期化 JwwInit

当方のサイトのフリーウェアコーナーで
「Jw_cad設定初期化 JwwInit」
というツールを公開しました

Jw_cad レジストリ設定を初期化(削除)するツール。Jw_cad Ver.8.25a ではアンインストール・PC再起動してもレジストリ設定が初期化されないため作成しました。このツールを実行後、Jw_cad を起動すると、Jw_cad 自身が初期設定を行います。
レジストリ変更を行うので Vista以降では「管理者として実行」で実行して下さい。


うちのサイトのフリーウェアコーナーでダウンロードして
ZIP解凍(展開)して、エクスプローラで exeファイルを右クリックし
プロパティで[ブロックの解除]をしてから使って下さい。


勿論、Windowsのレジストリエディタを利用し、手動で削除等を行う事は出来ます。このツールは、ボタンを押せば Jw_cad レジストリ設定を初期化(削除)しますので、誰でも簡単にできると思います。ですので間違って設定を消してしまわないよう御注意下さい。

AF3D Ver.0.01

という訳で 3月も既に半ば
昨年末から作り始めてる3Dなテストプログラムの現状報告です

まぁ、全然進んでませんが 中途半端ですが 取りあえず
AF3D Ver.0.01
http://afsoft.jp/test/af3d_001.zip
基本的には、3Dモデルを 2Dドローソフトのように作れるアプリを目指しています。

設定ファイルは仕様変更してますので
以前の設定ファイル(af3d.dat)は削除して下さい。
(今後もそんな感じになりますが、色設定・レイヤー設定は当面変更は無しです)

データは以前と同じく点・線・三角面・四角面だけですが(今後増やしていく予定)、ラバーバンド表示・アンドゥ・リドゥは追加しましたし、DXF/STL/OBJ/DAE の保存も出来るようにしていますので、これで絵を描いて DXFやDAEでスケッチアップに渡して云々とか、出来ると思います。

次は 4/1公開を目指しますw


ん? 別PCで動かすと音がなんかおかしいなw

図形配置の際の倍率と角度の一覧

JWクリボスに 倍率・角度の指示欄を付けて
指示した場合は、その倍率と角度を掛けた状態にして
クリップボードを送って Jw_cad で作図する〜
みたいなことはできないかな?
と安易に考えて
少し作業しようと仕掛けて しんどくなって辞めたw

ま、そゆ需要は無いかな?w

AF3D_TEST

という訳で 今年も既に3月に入り
昨年末から作り始めてる3Dなテストプログラムの
現状報告ですw
まぁ、全然進んでませんが 中途半端ですが 取りあえず
AF3D_TEST
http://afsoft.jp/test/af3d_test.zip
基本的には、3Dモデルを 2Dドローソフトのように作れるアプリを目指しています。
メイン画面では面は半透明化して表示し、陰線処理・陰面処理はしてません。
断面=現在2Dビュー面での断面表示
投影=現在2Dビュー面への投影表示
投影+=現在2Dビュー面への+側部分の投影表示
投影−=現在2Dビュー面への+側部分の投影表示
赤色=X軸、緑色=Y軸、青色=Z軸、を想定しています。ダイヤルは表示軸の回転ではなく、現在表示ビュー画面での回転となります。(回転中心点はモデル中心原点)
3Dビュー画面では、点・線の表示は行いません。面のみです。Delphi FMX の 3D Shapeコンポーネントに点や線が無い、というのもありますが、最終的に STL・OBJ で出す際には面だけになりますからこれでもいいと思ってます。メイン画面で作図編集を行った内容はリアルタイムで反映されません。[更新]をクリックする必要があります。現在のオブジェクトを全部クリアしたあとに再生成してますが、データが多くなると遅くなりますのでどうしようかと考え中です。

作図時の右クリックはデータ端点の3D点を読み取り、左クリックはデータ端点をビュー面へ投影した点を取得、無ければ、目盛表示時は目盛点、目盛非表示時は任意点、となります。オフセット指示はビュー面でのX/Y/Z量ではなく、3D点に変換した後の実点でのX/Y/Z量となります。でないとおかしくなるので。

しかし・・・ラバーバンドとアンドゥ・リドゥがないと、作図出来ないなコレwww

面は、左回りで上方向が表面となります。

なんか上手く動かないなぁ〜と思ったら・・・

Delphi でプログラミングしてて
なんか うまく動かないなー???
と思ってたんだけど
んーー
再度チェックしてみると・・・

線を描いてるルーチン内で
 変換を掛けて線を描画
ってやってるのに(作ってる時は、その方が便利だろーとか思ってた)、変換してるのを忘れてて、変換を掛けてそのルーチンに飛ばしてた・・・
つまり
 2回変換を掛けて線を描画
みたいな事をしてた・・・

あーーー こりゃマトモに動く訳 無いわw


あと、逆行列の計算でガウスの消去法(掃き出し法)を使っていたけど、これもなんか変だなぁ?と思ってたら、ループのカウンタの変数が間違ってた・・・ というのも以前は、連立方程式の解を求めるために使っていて、横の数=縦の数+1 だったんだけど、逆行列を出す場合は、横の数=縦の数×2 になるので当然、ループカウンタに注意が必要だったんだ・・・

テストで計算結果を表示させて、う〜ん、おかしいな〜、なんでだろう?なんでだろう? とか思ってたけど、原因はソレだった・・・ そのルーチンを作ったのも20年位前の話だからすっかり忘れているってのもwww

しかし 動かす毎に挙動が変わる?みたいな怪動作は無くなったんだけれども、そもそも、なぜ、動かす毎に挙動が変わったのだろうか? ・・・ 謎だ・・・www

逆行列

ちょっとプログラムで逆行列を算出したい
どうやるんだっけ?
たすき掛け? 忘れたw
でも3次・4次だとどうするんだっけ? 忘れたw

そういえば補間のスプライン曲線を出すとき
確か、連立方程式を解くのに掃き出し法(ガウスの消去法)を
使ってたよなー あったあった これこれ
これ 逆行列を出すのも出来るかな?
値を入れてと・・・ あ、出た出たw これでいいやw


本日は今年のゴミ最終日
寝るのがヒジョーに遅かったため、起きれるかどうか?
というかなかなか眠れなかったんですが
なんとか無理矢理起きて、水やりのあと、ゴミ出し〜

缶の中の使用済油(※何度か使用した)を紙に吸わせて
捨てたんですが、その缶が結構汚れていたので
その缶の掃除に 1時間位 掛かってしまいましたw
取れない錆みたいなのはあるけど
うん、そこそこ綺麗になったかな?

開発(動作)環境は提示してほしい

アプリを公開する人には
開発環境を提示して欲しいと思います
(出来れば動作環境も、ですが、どうしてもという訳ではありません。動作環境だけ提示するってのもアリだと思います。)

私はエンバカデロ社の「Delphi」という開発環境を利用していますが、現在、
(PC-A)
・Delphi 11.2
・Delphi 10.4.2
(PC-B)
・Delphi XE4
・Delphi 7
の4種類が使える状態なのですが、最新である「11.2」だけを利用すれば良いのでしょうけれども、悲しいかな、出来ません。というのも、これで作成した Androidアプリは、所持している8インチタブレット(Android 6)では動作出来ないからです。そのため今でも「10.4.2」を利用しています。

Delphi 10〜で作成したプログラムは、基本的に Windows Vista以降対応となりますし、実行ファイルのファイルサイズもかなり大きくなってしまいます。そのため、対応OSは 2000/Xp以降〜で ファイルサイズを小さくしたい、という場合に Delphi 7 を利用する場合が多いです。

Delphi XE〜・10〜 では 作ったプログラムが動作出来るOSのバージョンが限定されてしまう為、結構難儀しています。Macはほとんど全く使わないため、さっぱり分かりませんw そういう意味で、今現在よく利用されている Android のバージョンはどれなのだろう? 最低限サポートすべきバージョンはどれなのだろう?と考えると実際問題、よく分からんとゆーかw 中古では未だに 4.4 のタブレットも売ってるしー

みたいな感じですが
スクリプト系の awk とか ruby とか
私は全く勉強してないんで全く分からないんですが、色々な種類・バージョンがあって、それによって微妙に違ってくる場合が多くて、動作する・動作しない、ってことがあると思います。
近い例として、awk ですが
これまでよく利用されてきた WILLs氏の「gawkm115」は非公開状態となって、現行、Bruce.氏の「gawk 3.1.5 for Windows」が利用される状態になるのでしょうけれども、やはり異なる部分があって、そのまま動作するスクリプトと、そのまま動作しないスクリプトが出てると思います。
ruby でも
Jw_cad 外部変形では 1.8系がよく利用されてきましたが、1.9.2 ではそのまま利用出来ない、って事がすぐに出てきましたし、Ver.2〜、Ver.3〜、と出てきて当然、仕様は変更追加されてるでしょうから、やっぱり、「ruby 2.2で作成しています」とかは書いて欲しいです。

ソフトウェア使用ライセンス

プログラミングを行う際、開発用ソフトウェアや開発環境等が OSに組み込まれていて、そのOSを利用している場合には実質的に無料で自由利用出来る、という場合があります。例えば
sun の「cc」、昔のMS-DOSの「masm」や「symdeb」等(「MASM」は後に別パッケージソフトとして有料化)
フリーウェアやGNU等で無料のソフトが提供されているのは今さら言うまでもありません。

で、ソフトウェアの規模が大きくなっていくと、○○を行うプログラム/ルーチン、△△を行うプログラム/ルーチン、と分割して作ってまとめたりするようになりますが、別途、目的別に開発され配布・販売されているモジュールプログラム=ミドルウェアを利用したくなる場合も出てきます。例えば、帳票用、画像処理用、等があり、プログラマーがそういうのが苦手だけれども必要だからという事でそういったミドルウェアを利用する場合も多くなっています。Delphi で言えばサードパーティ製のコンポーネントです。有料なものもあれば無料なものもあります。Delphi 内では「Indy」とか「TeeChart」とか「FastReport」とか最初から入ってますが、「FastRepot」の上位版は有料ソフトとして販売されてます。この上位版が欲しい開発者は、そのライセンス料を支払って入手し利用して自分のソフトウェアに組み込む訳ですが、その作成したソフトを利用する側は、その「FastReport上位版」の料金を別途支払う必要はありません。現行「ランタイムフリー」と明記されているからです。(そのソフトの料金内に含まれていると考える事もできます)
ミドルウェアのライセンスは、基本的に、
 ・開発者用ライセンス
 ・配布用(ランタイム)ライセンス
があります。
ソフトウェアによっては配布用ライセンスが有料のものもあります。
例えば、ニュートン社の場合です。
https://www.newtone.co.jp/license.html

例えばデータベース(DB)ソフトウェアを開発する際、Delphi開発者がデータベースエンジンに何を利用するのか?で考えないといけない事がいくつか発生します。
まず、PC単体でDBを使う場合(スタンドアロン)、昔であれば、Borland Paradox(BDE)を使ったり、Microsoft ACCESSを使ったり、したでしょうけれども今では、SQLite 等も利用できます。次に、C/S型DBの場合は、MS SQL Server や Oracle 等もありますが、Delphi開発者であれば、Interbase (IB) を利用するケースもあるでしょう。この場合、Delphi 内に IB用コンポーネントが標準搭載されていて便利だからというのもありますし、開発用の無料の Interbase Edition もあります。ですがその作成したアプリのユーザーは、Interbase Server とクライアント(端末PC)台数分のライセンスが必要となります。パフォーマンスは多少落ちると思いますがフリーの「Firebird」というものもあります。

こういった内容は、当然ながら、ソフトウェア開発者側は抑えた上で、ミドルウェアを使用する・しない、どんなミドルウェアを使用するか、その際のランタイムライセンスはどうなっているか、を把握した上で利用し、利用者にその旨を伝えます。例えば、別途費用が必要なのであれば、それを明示する、という感じです。そんなのは当たり前の話です。

従って、有料無料に関わらず、ソフトウェアを利用する場合、それそのものの費用と、付随するものの費用があるのなら、それが提示されているでしょうから、それに納得出来れば利用すれば良いし、納得出来なければ別のソフトウェアを利用すれば良いと思います。

そのソフトウェアや開発者や提示内容等が信用できなければ、そのソフトウェアを利用しない方が良いです。この日本はなんだかんだ「信用社会」で成立しているのですから。特に最近は、特殊詐欺というのがどんどん多くなっているようなので、注意するに越した事はありません。

Ruby 本を購入

Ruby の簡単な紹介本ってのは1冊持っているんですが、ま、暇な時にでも眺めようかな?というわけで、Ruby 本を1冊購入しました。

これ

う Amazon 超安いなw

これまた ボンビーなので 古本での購入です

今は新版がありますね


窓の位置・サイズ

Windowsアプリにおけるウインドウの位置制御は
フツーは、Windows任せ、開発環境任せ、ではなく
基本的に、アプリ任せです。

Windowsでの位置指定は通常、
1024×768 解像度の場合、ウインドウ左上の座標は
0,0 〜 1023,767 の範囲を取りますが
アプリが起動時に自分の位置を指定しない場合
Windows任せとなって、アプリを起動するたびに
位置が変わってしまう場合があります。
それではユーザーの意図に反する場合が多いので
一般的には、アプリ終了時に前回の位置・サイズを記憶し
次回起動時にはその位置・サイズで表示する、という事になります。

記憶場所は一般的に、.iniファイル(プロファイルファイル)、
レジストリ、専用のデータファイル、というのが多いです。
Jw_cad の場合はレジストリに記憶されます。

次に
マルチモニタを利用する場合、ですが、この場合
アプリでどのように対処するのか?は アプリ作成者が決めます。
1)プライマリモニタ(メインモニタ)に対する指定
2)特定モニタに対する指定
3)気にしない指定・全モニタを1枚のモニタと見なす指定
3の場合は、座標値にマイナスがつくこともありますし、かなり巨大な値になることもあります。Windowsのモニタのレイアウトに依ります。なのでメインが右側でサブが左側だとすると、サブのほうはX座標がマイナス値になります。その状態でアプリを動かし終了するとアプリのウインドウをサブ側に置いた場合、マイナス値の座標になります。そのあと、Windowsの設定でメインモニタを左側にすると、メインモニタもサブモニタもプラス値の座標になりますが、アプリを起動すると、前回位置=マイナス値の位置で表示され、画面には見えなくなる、という事になります。

ただし、アプリ側で、ウインドウ位置が
全モニタの座標範囲内に無い場合は、モニタ範囲内にせよ、
とプログラミングされている場合には
画面が表示されないって事にはならないです。
しかし
そんな判定・対処をしているアプリが
この世に一体どれだけあるのだろうか? というのは謎ですw

Delphi 10.3.3 FMX で OpenGL描画?

というわけで やってみようとしたけど論外状態でしたw
もう完全に忘れているんで
「Script!3D」のコードをコピペしようとしたんですが
FireMonkey(FMX)では、何それ?状態で蹴られまくりでしたw
従来同様な VCL では問題無くOK

FMXでも 何か特別なことをすれば可能になる、んかもしれないけど
(※Mac用・Android用でのOpenGLオーバーライドをしたい訳ではありません)
まぁいいか、普通に 3Dアプリにしろって事だろうな

ところで OpenGLで
カメラ(視点)移動って、それ単体で出来なかったっけ?
どうもうまく行かず結局、カメラ(視点)移動して描画して、って事をして思ったように?動きました。しかしやっぱり、100万点をグリグリ動かすってのはかなり無理があるようでしたw(まぁノートパソコンのマザーオンチップだから元より無理だわw)

今後のプログラミングは、FireMonkey(FMX) でやっていくとして
FMXで OpenGLを使うって事は出来ない様子だから
FMXの 3D関連のコンポーネントを使う以外に無い訳で
(或いは他社製コンポーネント?)
う〜ん・・・

AutoEnter

CubePDF 等で印刷〜PDF保存をする際、
出力先の画面が表示されて[変換]をクリック([Enter]キー)
しますが、連続で複数の印刷をする際
何度も[変換]をクリックするのが 超めんどくせぇ〜
という場合、
「AutoEnter」ってツールを事前に動かし[開始]しておけば
勝手に[Enter]キーを送信して
クリックする手間を省こう〜 って
たわいもないツール(フリーウェア)を作ってみたw

うちのサイトのフリーウェアコーナーでダウンロードして
ZIP解凍(展開)して、エクスプローラで exeファイルを右クリックし
プロパティで[ブロックの解除]をしてから使って下さい。
設定ファイルやレジストリは使いません
(前回値の記憶・呼び出しは行いません)

CubePDF で PDF保存先を事前に設定保存し
20220714a
そのフォルダ内は 空っぽにしてから
本ツールを動かしてください

でないと、ファイルを上書きしますか?のメッセージが
何度も出て これまた 超めんどくせぇ〜 となりますんで

なお、たまに「漏れ」が出ることがあるみたいで
その場合は、マウスで[変換]をクリックして下さい。


追記:
CubePDF 最新バージョン 2.0.2 (64bit版) を入れて試してみました。
本アプリを実行・開始してから連続印刷を行うと「漏れ」が出る確率が上がったような感じがします。それを防ぐには、アプリで連続印刷を行ったあと、画面に CubePDF画面がたくさん出た状態で、本アプリを実行・開始するのが確実性が高いと思われます。

Delphi での TModel3D が超ウザい件について 3rd.

というわけで Delphi 10.3.3 FireMonkey(FMX)にて
3D描画をさせるのに TModel3D コンポーネントを
使おうとしているんですがー

いや〜 やっぱり TModel3D は使えない、という事で終了かな

試しに、TMesh と TColorMaterialSource を 1000個ずつ
動的に生成して、ランダムな位置・ランダムな色で
四角面を作図するようにしてみましたが、ふつうに
描画出来ました

次に1万個 四角面を作図するようにしてみましたが
まぁ時間は掛かりますが、それなりに、描画出来ました

というわけで、結果、TModel3D は使いものにならない、
各コンポーネントを動的に生成して配置し描画する方が
遥かに高速だ、という結論となりました

Delphi での TModel3D が超ウザい件について 2nd.

というわけで Delphi 10.3.3 FireMonkey(FMX)にて
3D描画をさせるのに TModel3D コンポーネントを
使おうとしているんですがー

いや〜 なんかもうマジでウザいなーww

取りあえず軸は
   Z
   |
   |
  / \
 /   \
X     Y
って表示したいんだけどー

Model3D1.WrapMode := TMeshWrapMode.Fit;
Model3D1.RotationAngle.X := 270;
Model3D1.RotationAngle.Y := 0;
Model3D1.RotationAngle.Z := 0;
Model3D1.Scale.X := 1;
Model3D1.Scale.Y := 1;
Model3D1.Scale.Z := -1;
とやるんですがー う〜ん なんかおかしい動きするなー?
とか思ってたら やっぱり

Model3D1.Clear;
Model3D1.WrapMode := TMeshWrapMode.Original;
Model3D1.RotationAngle.X := 0;
Model3D1.RotationAngle.Y := 0;
Model3D1.RotationAngle.Z := 0;
Model3D1.Scale.X := 1;
Model3D1.Scale.Y := 1;
Model3D1.Scale.Z := 1;
Model3D1.LoadFromFile(〜〜);
みたいに初期化・ファイル読み込みをしてからでないと安定してくれなくて まいっちんぐ

なんかもう、よく分かりませんw


ちなみに、何がしたいのかというと
各コンポーネントを Create して画面上に配置していって3Dブツを描画する、のではなく、独自の面データ作成→DAEファイル作成→TModel3Dで読み込み→3Dブツを描画する、というようなことをしたいと思って作業をしています。
ファイルを仲介するのでその分、時間は掛かるだろうけど、まぁそれはそれで色々と便利で面白げなものが出来るんではないかと思っています。

DAEファイル=COLLADAファイルについては、ネットで検索すればすぐにドキュメントは見つかります。

昔、Delphi6 で「Script!3D」というツールを作っている時に DAEファイル出力を作ってましたのでそれを再利用しようとしましたが結構修正が色々あってドタバタwww


追記:
四角面を1000個描かせてみました
・・・カクカク
・・・
・・・えぇ? 1000個しかないのに、カクカク? ひでぇwww

四角面を10000個描かせてみました
・・・動かねぇ
・・・
・・・えぇ? たった1万個で動かない? 最悪www

LoadFromFile も遅いし、描画も遅い
安価なノートパソコンとはいえ、ここまで遅いとは・・・www


ダメですね、TModel3D 遅すぎて使い物にならないです
たぶん OpenGL で描かせた方が遥かに高速描画出来ると思います

TMeshを1万個Createして描画させた方が速いかもしれないですね

Delphi での TModel3D が超ウザい件についてw

というわけで Delphi 10.3.3 FireMonkey(FMX)にて
3D描画をさせるのに TModel3D コンポーネントを
使おうとしているんですがー

いちおー このコンポーネントは
ASE、OBJ、DAE(COLLADA)をサポートしてるらしいですが、うちの Script!3D で出力した DAEファイルを読み込もうとしても、線が出ないんですよね〜 どうも、面(Mesh?)にしか対応していないらしい
しかも、プロパティで「□TwoSide」にチェックを入れても、裏面が描画されない どーなってんねん?

さらに、デザイン時にファイルを開くことは出来るんだけど、実行時にファイルを開くことができない
 どーなってんねん?

もちろんヘルプには一切、記述無し
安定しとるなー
マジ 引くわー・・・



あちこち探して結局、サンプル見てようやく分かった・・・
uses節に
FMX.ASE.Importer
FMX.OBJ.Importer
FMX.DAE.Importer
を追加しなければならない

で、Model3D1.LoadFromFile(ファイル名) という感じ

えっと、これ、X/Y/Z軸 どーなってたんだっけ?w
忘れたw

TwoSideの件は
表裏ともに面を描くってのはダサいので止めるとして
結局
for i:=0 to Length(Model3D1.MeshCollection)-1 do
 if Model3D1.MeshCollection[i] is TMesh then
  TMesh(Model3D1.MeshCollection[i]).TwoSide := True;
とやることで
なんとか解決したよーです・・・

・・・疲れた・・・

たみくさw

先ほど、
アニメ「パリピ孔明」9話「たみくさのために」
を見ましたw

やはり、これ でしょうw

何のためにやるのか?

収入云々、生きていけるかどうか、色々あるけど

自分らしく 自分のやりたい事を 自分のため、そして
自分のコンテンツによって喜怒哀楽してくれる皆のため
自分の全てをこめ、全力を尽くす!

たみくさ、だね?www


う〜ん、感動だわこのアニメw めっちゃ面白いw

アーティストやクリエイターの基本、だよなw

結果なんかは、後で 付いてくるさ・・・たぶんw

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

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

疲れた・・・

というわけで昨晩から今日に掛けて結局、全く眠れず、
布団の中で体を休めていましたが耐えられずに
午前5時頃に起きて ネット確認して
頼まれ仕事を開始

当初のメールでの指示は、「AFJWV」と同じように
印刷できるプログラムを作ってくれ、との事でしたが
それだったら そんなに時間はかからないかな?
(流用できるだろうし)
などと思っていたら、やっぱり今回も後から
追加仕様、というか、全く別仕様に変更、ということを
やっちゃってくれまして・・・
Jw_cad と同じような画面・操作でできるようにしてくれ
とか・・・

全然 違うやんけ! マジか!?www

というわけで、早朝からひたすらプログラミング・・・
だんだん眠たくなるし、寝てないから頭も動かなくなってくるし
頭痛や耳鳴り
パソコン画面をずっと見てると目も痛くなるし肩も凝るw
う〜ん 精神的にも 肉体的にも 持たない

1日で出来るやろ〜などと軽く考えたのが大失敗でした。

さすがに昼食は取りましたが〜 いや〜
マジで 厳しかったw

午後3時過ぎに くたばった頭の休憩に
ちょい 株式チェックしたら おや〜
今日はそこそこ反発して 少しマシになってました。
でもまだまだ マイナス状態w
明日からどうせまた落ちるだろーしなーww
でも今日も急落してたら、ほんとヤバかったかも

とゆーわけで先ほど何とか形になったので
メールしました。14時間 ほぼ ぶっ続け。
死ぬわマジでw

SHIFT-JIS と Unicode

文字をコンピューターで扱う場合、コンピューターは基本、0 と 1 の世界→2進数→16進数、10進数、という事で文字も数値で表す必要はありますが、ASCIIコード表というものに従って ANK文字(A:アルファベット、N:数字、K:カナ)や記号文字は、0〜255 の数値として扱います。数値の前半は改行コード等のコントロールコード値があり、途中の部分には定義されていない部分があります。8bitパソコン等ではそこにグラフィック文字等が割り当てられていました。

昔はプログラムコード内に漢字等を入れる事は出来なかったのですが、グラフィック画面に漢字を描画する事は出来るパソコンも増えていきました。PUTKANJI命令でその際には JISコードで指定していました。

そのうち、プログラムコード内にも漢字等を使いたい、という事になりますが、JISコードは2バイトなので、第1バイト、第2バイト、と続けるにしても、通常の ASCIIコードと区別がつかなくなりますのでそのままでは扱えません。ですので、ASCIIコードで定義されていない部分に、コードをずらして、一緒くたに扱えるようにしましょう、と決められたのが、SHIFT-JIS です。

しかし、Windowsが流行し、いろんな国で、いろんな言語で使われるようになって、文字コードも拡張する必要性が出てきて、Windows2000辺りから Unicode というコード体系が言われるようになってきました。実際に実用されたのは WindowsXp からだとは思います。
Unicodeは、1文字のコードを最大21bit(最大3バイト)で表すようですが、プログラミング言語処理系の内部ではどのように扱うかはそのシステムに依るようです。テキストファイルとして扱う場合には、UTF-8、UTF-16 等に符号化されますが、文字によってバイト数が異なってきます。そのため、プログラミング言語で Unicode 文字を扱う場合は、バイト数で扱うのではなく、文字数で扱う事になっています。

これまでの SHIFT-JIS で扱うプログラミングでは、2バイト系文字の第1バイトがソレであるかどうかを確認し、ソレであれば次の文字を第2バイトとして扱う、という具合のプログラミングとなります。例えば、文字列の1文字1文字を表示するプログラムは
  i:=0
  while (i < Length(s)) do begin
   c := s[i];
   if (c が2バイト系文字の第1バイトの場合) then begin
    Inc(i);
    c := c + s[i];
   end;
   (文字 c を表示)
   Inc(i);
  end;
等のようになりますが、Unicodeで扱うプログラミングの場合、バイト単位で扱うのではなく、文字単位で扱う事になりますので、
  i:=0
  while (i < Length(s)) do begin
   c := s[i];
   (文字 c を表示)
   Inc(i);
  end;
のようになります。
簡単になるのですね。しかし文字を扱う部分全てにこの修正を行う必要があります。1からプログラミングする際には、楽になりますが、既存のプログラムを修正する場合は、結構な作業量が必要になります。

ファイル保存する場合には、UTF-8やUTF-16等に符号化を行ってから文字出力を行う必要があり、ファイルから開く場合は、逆符号化を行って文字入力を行う必要があります。プログラミング手法によっては、エンコード方式を指定するだけで良い場合もあります。

あと注意する点は、Unicode文字を扱うと、SHIFT-JISで使ったようなバイト数での半角か全角かの判別方法が使えません。文字比較をするって感じでしょうか。また、画面に表示する場合には、半角の横幅は全角の半分、というような処理も使えません。そもそも Windowsでは、文字1文字1文字の幅はそれぞれ異なる、という扱いをせねばなりません。日本語の文字以外の海外の文字も扱う事になりますから特にそうです。
ですので、日本国内製のCADで、文字横幅 半角:全角=1:2 として扱っているものは、Unicode対応をするのであれば、この手法を再度1から考え直しをして、実装せねばなりません。勿論、半角文字は半角、それ以外は全角、として従来手法で行くのもそれはそれで1つの手法です。

国内用途なのだからガラパゴス結構、とするか
時代はグローバル化、とするかは
開発者次第

N88BASIC・・・

「N88-BASIC」は、みなさん御存知
NEC から 1981年に発売された 8bit-PC「PC-8801」に
搭載された ROM内のシステムでありますw

その前作に名機「PC-8001」という8bit-PC があって
それに搭載されたのが「N-BASIC」でしたから
その PC-8801版BASIC だから「N88-BASIC」ですね。

PC-8801 の後に 5インチ 320KB-FDD が搭載された「PC-8801mk2」が登場し、その後、グラフィックとサウンドが強化された「PC-8801mk2SR」が登場します。フロッピーディスクを扱う為の命令セットが追加された「N88-DiskBASIC」(FD)が添付されています。そしてプログラミング中に日本語を扱えるようになった「N88-日本語DiskBASIC」は後続の「PC-8801mk2FR」「PC-8801mk2MR」から添付されています(FRは 320KB-FDD、MRは 1MB-FDD)。

で、PC-8801の兄貴分、というか、ビジネス用に使えるようなPC、という事で、16bit-PC「PC-9801」が1982年に登場します。ディスプレイとプリンタを一緒に買うと100万円位しました。これに搭載されたROM-BASICは「N88-BASIC(86)」となっています。N88-BASIC を 8086-CPU用に拡張されたもの、という感じでしょうか。その後、E/F/M という版が出て(F:320/640KB-FDD、M:1MB-FDD)、F/Mにはフロッピーディスクを扱う為の命令セットが追加された「N88-DiskBASIC(86)」(FD)が添付されます。その後、V30-CPUで高速化された VMシリーズ、80286-CPUで高速化された VX/UXシリーズ(UX:3.5インチFDD)辺りから実際にビジネスシーンでよく利用されるようになったと思います。

で、8bit-PC では、DiskBASICに代わるシステムとして、OS「CP/M」が登場します。この「CP/M」上で色々なプログラミング言語が使えるようになる、というもので、C言語、Fortran言語、COBOL言語、Pascal言語、等ありましたが、まぁ一部のマニアや大学のクラブ内での使用が主だったように思われます。16bit-PC では、8086用の「CP/M86」、680x0用の「CP/M68K」というものもあります。ただ、8086用として「MS-DOS」(「PC-DOS」)が登場し、これが流行する事になります。

で、PC-9801用の「MS-DOS」上で動作できる「N88-BASIC(86) (MS-DOS版)」(DOS版BASIC)が出ます。基本的にはインタープリタです。「コンパイラ」っていうのもありましたが、これはコンパイル=機械語化して高速化するものではなく、DOS版BASICのシステムに代わるランタイムライブラリを一緒に使用するもので、多少のコード化は行われますが、さほど速くはなりません。
その他、DOS上で動かせるBASICコンパイラシステムとして、Quick-BASIC や MS-BASIC、というものも出ました。コーズシステム設計から「BASIC/98」が登場しインタープリタ/コンパイラのシステムで中々良かったと思います。

で、Windows3.1が登場し、Windows95 が出ますが、NECは PC-9801/9821路線を撤退しPCソフト開発もしなくなりました。IBM PC/AT互換機的な PC-98NXシリーズを出して現在に至ります。WindowsでのBASIC環境としては、MS の Visual BASIC が席巻しています。コーズシステム設計が無くなり後を引き継いだ?電脳組が Windows用の「BASIC/98」(インタープリタのみ)を出しています。富士通の「F-BASIC」は既に開発終了となっているようです。


ちなみに私は DOS-BASIC+機械語を長らく使っていて、Windows3.1 が出て Visual BASIC V2を使っていたけれども、Delphi 1.0J を使うようになってそれにハマり、今に至りますw 前の前の仕事場で VBは 4,5,6 と使いましたけれども、Delphiで十分だっていう事で、終了しました。

ぶる〜〜〜とぅ〜す・・・

という訳で先日、Delphi 10.3.3 Cmt-Edt. にて
添付サンプルの BlueTooth のプログラム実行は出来たのですが
中を見ると Delphi の [System]内の TBluetooth コンポーネントを使っていませんでしたので、これだと使い難いし、正直何が何だか分からないのでw このコンポーネントを使って 訳分かんないヘルプとそのサンプルを見ながら 取りあえずテキトーに作っていたのですが、、、

いや〜〜 訳が分からないwww

相変わらずのクソヘルプ!(失礼〜)
Ctrl+C でコピーしろやマジで!!
概要だけかよ? 何の説明も無いやんけ!
等と叫びつつwww
サンプルを見比べつつ

何とか隣のPCと(Windows10同士)文字データのやり取りが出来ました。はぁ、しんどw まぁ、文字読み込みボタンを押さないと読み込まないので、逐次チェックをしないとチャットにはならないけれども、まぁ取りあえずいいや、という訳でw

・・・疲れたw

Delphi 10.3.3/Android で Imageにお絵描き

先日購入した ASUS Androidタブレットを
Delphi 10.3.3 Cmt-Edt. で使ってみようネタ

次に、画面にボタンとイメージコンポーネント(TImage) を貼り付けて、ボタンをクリックしたらイメージに絵を描くってケースです。

これまで Windowsでは

procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Bitmap.Create(Round(Image1.Width),Round(Image1.Height));
 with Image1.Bitmap.Canvas do begin
  BeginScene;
  Clear($FF00FF00);
  EndScene;
 end;
end;

みたいな事を平然とやってて実際正常に動作するし、10.3.3 でも Windowsでは普通に正常動作するのですが、Android でビルド・配置・実行をすると、エラーします。IDE では「Segmentation fault (11) を送出しました」という実行時エラーが表示され、Android画面では、「アドレス〜でアクセス違反が発生しました」というエラーメッセージが多発します。ですのでこういうプログラミングをしてはいけません。これは

procedure TForm1.Button1Click(Sender: TObject);
var
 bm : TBitmap;
begin
 bm := TBitmap.Create(Round(Image1.Width),Round(Image1.Height));
 with bm.Canvas do begin
  BeginScene;
  Clear($FF00FF00);
  EndScene;
 end;
 Image1.Bitmap := bm;
 bm.Free;
end;

という風に書き換える必要があります。こうすれば Windowsでも Android でも正常動作させる事が出来ます。なお、ビットマップ生成時にサイズを指定しないと実行時エラーになります。Android(多分 iOSも)の場合は特に、画像はマルチレゾリューションなのが当たり前、という事でメモリ管理が厳しくなっているのではないかと想像します。
あと、
TImage の WrapMode にも要注意・・・ デフォルトの fit になっていると自動的に絵が拡大表示されてしまいますので・・・

いやぁ・・・これになかなか気づかず昨日はかなりの時間を消費してしまいましたww

Delphi 10.3.3/Android で 画面サイズ取得

先日購入した ASUS Androidタブレットを
Delphi 10.3.3 Cmt-Edt. で使ってみようネタ

取りあえず、画面サイズを見てみよう
という事で
スペック的には、1280×800 だそうなのだけど
フォームにパネル TPanel を Align=Client(全画面フィット)で貼って、Screen.Width、Screen.Height、Panel1.Width、Panel1.Height を表示させてみました。すると
縦置状態
Screen.Width   600
Screen.Height  913
Panel1.Width   601
Panel1.Height  889
横置状態
Screen.Width   961
Screen.Height  552
Panel1.Width   962
Panel1.Height  529
フォームの Qualityプロパティを HighQuality にしても同じ、ビューで Android 7インチ、Android 10インチ、等を追加しても同じ、という結果でした。はい、ダメですねw ビュー作ると、それ専用のフォームが出来てしまうので、意図的に全く異なる画面レイアウトをする場合はともかく、同じ画面レイアウトを PC でも スマホ/タブレットでも使おうという場合にはビューは無意味ですね。ビューを使う事によって本来の解像度でそのまま描画出来る、というのであれば、それはそれで利用価値があると思いましたが残念。
Recent Comments