<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>BVE-I-WEB</title>
    <description>BVEの個人的な技術備忘録です。
いつか誰かの役に立てば幸いです。
</description>
    <link>http://bveiweb.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>C++向けAtsプラグイン作成方法その1</title>
      <description>今回は1年間私が作成してきた、Atsプラグインの作成方法を備忘録としてこちらにまとめておきたいと思います。&lt;br /&gt;
&lt;br /&gt;
今回は基本構造的なC++の知識を必要とします。そこまでの基礎的な知識は書店等でのC++の初心者向けの方を半分程度学ぶことをおすすめします(私も同じようなことをしましたが、途中でコードをいじることで学んだので、すべてやる必要は特段必要ないかもしれません)&lt;br /&gt;
&lt;br /&gt;
基本的に必要とされるのは、プラグラミング能力というより、「どのように再現をするのか」再現の構造を想像することが必要とされます。&lt;br /&gt;
&lt;br /&gt;
ベースとして私はTn_E235様の&lt;a href=&quot;https://hackmd.io/@Nepia/Hk6Owd4RU&quot; title=&quot;&quot;&gt;「ATSプラグイン制作メモ」&lt;/a&gt;を基にプラグインを作ってきました。&lt;br /&gt;
&lt;br /&gt;
基本的には前述のページの通り進んでいただければ大丈夫です。&lt;br /&gt;
&lt;br /&gt;
0.VisualStudioをダウンロードしてメモの&lt;a href=&quot;https://hackmd.io/@Nepia/Hk6Owd4RU#%E6%BA%96%E5%82%99&quot; title=&quot;&quot;&gt;「準備」&lt;/a&gt;、&lt;a href=&quot;https://hackmd.io/@Nepia/Hk6Owd4RU#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A&quot; title=&quot;&quot;&gt;「プロジェクトの設定」&lt;/a&gt;からVisualStudioの環境を整える&lt;br /&gt;
1.&lt;a href=&quot;https://bvets.net/jp/edit/formats/&quot; title=&quot;&quot;&gt;BVEの公式ページ&lt;/a&gt;の保安装置ページからats1-2.zipをダウンロードする&lt;br /&gt;
2.メモの&lt;a href=&quot;https://hackmd.io/@Nepia/Hk6Owd4RU#%E3%81%BB%E3%81%BC%E7%A9%BA%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AB%E3%81%99%E3%82%8B&quot; title=&quot;&quot;&gt;「ほぼ空のプログラムにする」&lt;/a&gt;を参照して制作のベースを整える&lt;br /&gt;
3.メモの&lt;a href=&quot;https://hackmd.io/@Nepia/Hk6Owd4RU#%E3%81%BB%E3%81%BC%E7%A9%BA%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AB%E3%81%99%E3%82%8B&quot; title=&quot;&quot;&gt;「ほぼ空のプログラムにする」&lt;/a&gt;の7.の38から46行目を削除し、かわりに
&lt;pre&gt;&lt;code class=&quot;c+&quot;&gt; g_output.Brake = g_brakeNotch; &lt;/code&gt;&lt;/pre&gt;
を記述してください&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://bveiweb.blog.shinobi.jp/Entry/4/&quot; title=&quot;&quot;&gt;次(その2)&lt;/a&gt;</description> 
      <link>http://bveiweb.blog.shinobi.jp/pulgin-for-cpp/c--%E5%90%91%E3%81%91ats%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95%E3%81%9D%E3%81%AE1</link> 
    </item>
    <item>
      <title>C++向けAtsプラグイン作成方法その2</title>
      <description>&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/dracula.min.css&quot; /&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
C++の基本的な部分について説明します。&lt;br /&gt;
&lt;br /&gt;
.hファイルには変数(値を入れる箱)を定義します。&lt;br /&gt;
変数にはいくつか種類があり&lt;br /&gt;
bool型:trueとfalseつまり0と1しか扱うことができません&lt;br /&gt;
int型:整数を扱うことができます。小数を入れると切り捨てられます&lt;br /&gt;
double型、float型:基本的にこの２つは小数を扱うことができます。&lt;br /&gt;
.cppファイルにはどのように実行するのかの命令を書きます。 .cppファイルの中にはいくつかの関数があります。&lt;br /&gt;
関数の役割は様々なページで紹介されていますが、こちらでも紹介させていただきます。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;BOOL APIENTRY DllMain&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
はDLLファイル出力についての処理が記述されています。基本的にこの部分を削除してしまうとDLLファイルの出力がうまく行かずエラーが出てしまいます。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API int WINAPI GetPluginVersion&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
は0x00020000という数字を返します。 使用用途は不明です。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI SetVehicleSpec&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
はparameter.txtに記述されている車両情報を取得します。ノッチ段数やATS確認最小ノッチ、両数を取得できます。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI Initialize&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
は駅ジャンプ時やロードされたときに呼び出される関数です。主に初期化に使います。 コラム:値系の代入はinitで行うと、変な値を引っ張ってしまうので、initでは行わず、initでtrueにした変数を用いてElapseで値を代入して変数をfalseに戻すと変な値を取得することが少なくなります。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API ATS_HANDLES WINAPI Elapse&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
毎フレーム呼び出される関数です。基本的な処理はここで行われます。 たとえば
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;sound[0] = ATS_PLAY_LOOPING;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
と入れるとsoundの0番をずっとループ再生するコードになります。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI SetPower&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
は力行ノッチが変化したときに呼び出される関数です。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI SetBrake&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
は制動ノッチが変化したときに呼び出される関数です。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI SetReverser&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;はレバーサーが変化したときに呼び出される関数です。 コラム:レバーサーの情報はdetailmanagerで先に読み込まれたプラグインによって書き換えられている可能性があります。(ドア開扉時に切になる) 一番最初に読み込まれたプラグインが正しく情報を取得できるので、レバーサーに関与するプラグインは最初に読み込ませるほうが良いです。&lt;span style=&quot;text-decoration: line-through;&quot;&gt;(具体的な解決策が見つけられてないので情報ある方はご教授ください)&lt;/span&gt;&lt;/p&gt;
AtsExプラグインを併用することによって解決できます。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI KeyDown&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
はキーを押されたときに呼び出される関数です。Bveの設定のAts部分のキーアサインに記述されているキーに限り情報を取得することができます。(Atsのキーアサイン以外のキー情報を取得する情報は後日記載します。)
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI KeyUp&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
はキーを離したときに呼び出される関数です。Bveの設定のAts部分のキーアサインに記述されているキーに限り情報を取得することができます。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI HornBlow&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
は警笛を扱われたときに呼び出される関数です。警笛を取り扱い始めたときしか取得できないので、用途はEBスイッチぐらいしかありません。(警笛をAtsプラグイン側で鳴らす方法は後日記載します。)
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI DoorOpen&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
ドアが開いたときに呼び出される関数です。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI DoorClose&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
ドアが閉まりきったときに呼び出される関数です。(ドアの閉まり始めはAtsExプラグインによって取得する方法は後日記載します。)
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI SetSignal&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
現示が変化するときに呼び出される関数です。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI SetBeaconData&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
地上子を踏み越えたときに呼び出される関数です。 &lt;br /&gt;
beaconData.Type:int型で地上子の種類を取得します。 &lt;br /&gt;
beaconData.Signal:int型で対になる信号機の現示を取得します。(地上子を超えた段階での現示しか取得できないので、現示アップしても先行現示の情報は取得できない)&lt;br /&gt;
beaconData.distance:float型で次の現示までの距離を取得します。(signalまでの距離ではなくsectionまでの距離なのが注意) &lt;br /&gt;
beaconData.Optional:int型で地上子のsendDataの情報を取得します。&lt;br /&gt;

&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI Load&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
はプラグインが読み込まれたときのみ呼び出されます。駅ジャンプ時などには呼び出されないので読み込まれたときだけ初期値を代入するなどで使うことができます。
&lt;pre&gt;&lt;code class=&quot;c++&quot;&gt;ATS_API void WINAPI Dispose&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
はプラグインが読み込み解除されたときのみ呼び出されます。</description> 
      <link>http://bveiweb.blog.shinobi.jp/pulgin-for-cpp/c--%E5%90%91%E3%81%91ats%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95%E3%81%9D%E3%81%AE2</link> 
    </item>
    <item>
      <title>私的完璧路線制作のコツ</title>
      <description>&lt;span style=&quot;color: #333333;&quot;&gt;どうも。&lt;/span&gt;&lt;br style=&quot;color: #333333;&quot; /&gt;&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;BVE_I_です。&lt;/span&gt;&lt;br /&gt;
&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;ブログの本更新第一回目にして、個人的に少し思ったことをまとめていきます。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;とある日某氏に&lt;/span&gt;&lt;br /&gt;
&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;「そんな見えないところを作ったって意味がないよ」&lt;/span&gt;&lt;br /&gt;
&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;と言われたのですが(下記画像のように)&lt;/span&gt;&lt;br /&gt;
&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;&lt;img src=&quot;//bveiweb.blog.shinobi.jp/File/f9676699.png&quot; alt=&quot;&quot; /&gt;私は一概に意味がないとは言い切れないと考えています。&lt;/span&gt;&lt;br /&gt;
&lt;span color=&quot;#333333&quot; style=&quot;color: #333333;&quot;&gt;例えば下記画像のように基準地点を決めて路線を作れば&lt;img src=&quot;//bveiweb.blog.shinobi.jp/File/176deb73.png&quot; alt=&quot;&quot; /&gt;(ここでは$standardH13が変数としてそれを基準に路線を作っています。)&lt;br /&gt;
&lt;/span&gt;+と-を入れ替えるだけで上下線を簡単に再現できると考えています。&lt;br /&gt;
(厳密にいえばstructuresを載せているtrackを0であるというのはあまりよくないのでそれを変更すればよさそう)&lt;br /&gt;
現に逆方向をむいて走行してみると動画のようになるのです。&lt;br /&gt;
&lt;iframe width=&quot;600&quot; height=&quot;338&quot; src=&quot;https://www.youtube.com/embed/3EH7ut4ajts&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
(逆方面のホームをまったく作っていないのはご愛敬です。)&lt;br /&gt;
&lt;br /&gt;
私的には逆方面などを制作する拡張性を大事にしてこのように作っているのですが、みなさんはどのように作られているのでしょうか。&lt;br /&gt;
&lt;br /&gt;
私には到底想像もつきませんが、あくまで上下線再現する上ではこのような手法でつくるとなるとある程度この手法は楽なのかなと思いました。&lt;br /&gt;
&lt;span style=&quot;text-decoration: line-through;&quot;&gt;(なお上下線をつくる将来性は当方にはないので完全に無駄)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;もしどなたかの参考になっていただければ幸いです。&lt;br /&gt;
&lt;br /&gt;
補足&lt;img src=&quot;//bveiweb.blog.shinobi.jp/File/81315021.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
BVEを作るうえでこれは絶対にやめた方がいいことがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;strong&gt;structurekeyをすべて番号管理するのは絶対にやめましょう！&lt;br /&gt;
&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;私はこれで痛い目を見ているので絶対にお勧めしません。&lt;br /&gt;
わかりにくくて結局どんな&lt;/span&gt;&lt;/span&gt;structureか説明するものをつける羽目になるので絶対にやめましょう&lt;br /&gt;
&lt;br /&gt;
関係サイト&lt;br /&gt;
&lt;a href=&quot;http://bveiweb.aikotoba.jp/&quot; title=&quot;&quot; target=&quot;_self&quot;&gt;HP&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/BVE_i_&quot; title=&quot;&quot; target=&quot;_self&quot;&gt;twiiter&lt;/a&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/@BVE_i_/&quot; title=&quot;&quot; target=&quot;_self&quot;&gt;youtube&lt;br /&gt;
&lt;/a&gt;コメントは当方の独断により削除される場合があります。ご了承ください。</description> 
      <link>http://bveiweb.blog.shinobi.jp/%E5%82%99%E5%BF%98%E9%8C%B2/%E7%A7%81%E7%9A%84%E5%AE%8C%E7%92%A7%E8%B7%AF%E7%B7%9A%E5%88%B6%E4%BD%9C%E3%81%AE%E3%82%B3%E3%83%84</link> 
    </item>
    <item>
      <title>諸情報</title>
      <description>どうも。&lt;br /&gt;
BVE_I_です。&lt;br /&gt;
個人的にBVEの技術的+表現方法の備忘録が欲しかったので、ブログという形で立ち上げました。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-decoration: line-through;&quot;&gt;(もしtwiiterの方が死んだらこちらで主に活動するかもしれません。)&lt;br /&gt;
&lt;img src=&quot;//bveiweb.blog.shinobi.jp/File/Bve_trainsim_5_2023_06_06_22_51_44.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;関係サイト&lt;br /&gt;
&lt;a href=&quot;http://bveiweb.aikotoba.jp/&quot; title=&quot;&quot; target=&quot;_self&quot;&gt;HP&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/BVE_i_&quot; title=&quot;&quot; target=&quot;_self&quot;&gt;twiiter&lt;/a&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/@BVE_i_/&quot; title=&quot;&quot; target=&quot;_self&quot;&gt;youtube&lt;br /&gt;
&lt;br /&gt;
&lt;/a&gt;コメントは当方の独断により削除される場合があります。ご了承ください。</description> 
      <link>http://bveiweb.blog.shinobi.jp/%E3%81%9D%E3%81%AE%E4%BB%96/%E8%AB%B8%E6%83%85%E5%A0%B1</link> 
    </item>

  </channel>
</rss>