<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0"><channel><title>あしたから本気出す 工作</title><link>http://grafz.net</link><description>あしたから本気出す 工作</description><pubDate>Fri, 17 Feb 2006 09:10:52 +0900</pubDate><item><link>http://grafz.net/c_article_d021.html</link><title>新・自作キーボード</title><description><![CDATA[自作キーボードの真骨頂を求め、より大きいサイズに挑戦。<br />縦横4×21、計84個のキーを配置してみる。キースイッチは、半田付けが可能なメカニカルキースイッチをジャンクから回収して使いまわしたもの。いま主流のメンブレン式のキーボードは、残念だけど容易には改造できない。Ｍキーはその点、改造で遊べるからありがたい。<br /><br />まず、完成写真はこのような感じ。<br /><a href="http://grafz.net/grafz/img/diyKey0.jpg"><img src='http://grafz.net/grafz/img/diyKey0.jpg' alt="diyKey" width="400" height="300" border="0" /></a><br /><br /><a href="http://grafz.net/grafz/img/diyKey1.jpg"><img src='http://grafz.net/grafz/img/diyKey1.jpg' alt="diyKey" width="400" height="300" border="0" /></a><br /><br />キーの色とサイズが統一されていないのはもちろん計画通り(嘘)。<br />構造躯体はスチロール樹脂のプラ棒を、半田ごてで溶接。スケルトン仕様にしてみた。<br />ちょっと間違ったら空を飛べそうなくらい軽量。<br /><br />裏面の回路は、このような感じで、無理矢理感たっぷりに仕上がった。<br /><a href="http://grafz.net/grafz/img/diyKey2.jpg"><img src='http://grafz.net/grafz/img/diyKey2.jpg' alt="diyKey" width="400" height="300" border="0" /></a><br /><br />頭脳となるマイクロコントローラは、PIC18F2550で、製作の時点で最も入手しやすかったUSB対応のマイコン。そいつを中央に鎮座させ、生基板から作った自作回路(作り方は<a href="http://grafz.net/c_article_d014.html">こちら</a>)にセット。<br /><a href="http://grafz.net/grafz/img/diyKey3.jpg"><img src='http://grafz.net/grafz/img/diyKey3.jpg' alt="diyKey" width="400" height="300" border="0" /></a><br /><br /><a href="http://grafz.net/grafz/img/diyKey4.jpg"><img src='http://grafz.net/grafz/img/diyKey4.jpg' alt="diyKey" width="400" height="300" border="0" /></a><br />パソコンとの接続は、画面右に見えるUSB miniB端子にケーブルを差せばＯＫ。 <br /><br />マイコンに焼いたプログラムは、前回までとほぼ同じ。見たい人は以下からどうぞ。<br /><a href="http://grafz.net/c_article_d015.html">テンキーを自作キーボードに改造する（ファームウェア編）</a><br /><br />今日もなんとか生きてる。あしたから本気出す。]]></description><pubDate>Mon, 6 Sep 2010 03:37:00 +0900</pubDate></item><item><link>http://grafz.net/c_article_d020.html</link><title>Jw_cadの外部変形の作り方2</title><description>&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;&lt;img src=&apos;http://grafz.net/grafz/img/gaihen0.jpg&apos; alt=&quot;Jw_cadの外部変形の作り方&quot; width=&quot;433&quot; height=&quot;97&quot; style=&quot;margin-top:20px; margin-bottom:20px;&quot; /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt; ぽやっとしているまに冬が終わってしまった。この冬の思い出といえば、正月に貧血で卒倒したことくらいしか思い出せない。お父さんお母さん、僕は歳をとってしまっただよ。&lt;br /&gt;&lt;br /&gt;さて、&lt;a href=&quot;./c_article_d019.html&quot;&gt;&lt;u&gt;前回&lt;/u&gt;&lt;/a&gt;の約束のとおり、線を描画するJw_win用の外部変形をVC++で作成してみよう。&lt;br /&gt;さっそくソースコードを。&lt;br /&gt;&lt;br /&gt;randomCircle.cpp&lt;div class=&quot;box&quot;&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;    &lt;tr&gt;      &lt;td width=&quot;24&quot; align=&quot;right&quot; valign=&quot;top&quot; class=&quot;boxLeft&quot;&gt;&lt;pre&gt;1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:&lt;/pre&gt;&lt;/td&gt;      &lt;td valign=&quot;top&quot; class=&quot;boxRight&quot;&gt;	  &lt;pre&gt;&lt;font color=&quot;#0000ff&quot;&gt;#pragma&lt;/font&gt; comment(lib, &lt;font color=&quot;#808080&quot;&gt;&quot;winmm.lib&quot;&lt;/font&gt;)&lt;font color=&quot;#0000ff&quot;&gt;#include&lt;/font&gt; &lt;font color=&quot;#808080&quot;&gt;&amp;lt;windows.h&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;#include&lt;/font&gt; &lt;font color=&quot;#808080&quot;&gt;&amp;lt;mmsystem.h&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;#include&lt;/font&gt; &lt;font color=&quot;#808080&quot;&gt;&amp;lt;string&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;#define&lt;/font&gt; MAX_BUFFER 256std::string strFilename = &lt;font color=&quot;#808080&quot;&gt;&quot;JWC_TEMP.TXT&quot;&lt;/font&gt;;&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt; main(&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt; argc,&lt;font color=&quot;#0000ff&quot;&gt;char&lt;/font&gt; *argv[]){    &lt;font color=&quot;#008000&quot;&gt;//コマンド引数&lt;/font&gt;    &lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt; nParam = atoi(argv[1]);    FILE *fp = fopen(strFilename.c_str(),&lt;font color=&quot;#808080&quot;&gt;&quot;r&quot;&lt;/font&gt;);    &lt;font color=&quot;#0000ff&quot;&gt;if&lt;/font&gt;(!fp)&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; 0;    &lt;font color=&quot;#0000ff&quot;&gt;char&lt;/font&gt; strBuffer[MAX_BUFFER];    std::string strLine;    &lt;font color=&quot;#0000ff&quot;&gt;while&lt;/font&gt;(fgets(strBuffer,MAX_BUFFER,fp) != NULL){        strLine = strBuffer;        &lt;font color=&quot;#0000ff&quot;&gt;if&lt;/font&gt;(strLine.find(&lt;font color=&quot;#808080&quot;&gt;&quot;hp1&quot;&lt;/font&gt;,0) != std::string::npos){            &lt;font color=&quot;#008000&quot;&gt;//指定点座標に該当するとき。座標を実数で取得。&lt;/font&gt;            std::string str2 = strLine.substr(3);            &lt;font color=&quot;#0000ff&quot;&gt;while&lt;/font&gt;(str2.at(0) == &lt;font color=&quot;#808080&quot;&gt;&apos; &apos;&lt;/font&gt;)str2 = str2.substr(1);            std::string strX = str2.substr(0,str2.find(&lt;font color=&quot;#808080&quot;&gt;&quot; &quot;&lt;/font&gt;,0));            std::string strY = str2.substr(str2.find(&lt;font color=&quot;#808080&quot;&gt;&quot; &quot;&lt;/font&gt;,0) + 1);            &lt;font color=&quot;#0000ff&quot;&gt;double&lt;/font&gt; nX = atof(strX.c_str());            &lt;font color=&quot;#0000ff&quot;&gt;double&lt;/font&gt; nY = atof(strY.c_str());            fclose(fp);            &lt;font color=&quot;#008000&quot;&gt;//出力&lt;/font&gt;            fp = fopen(strFilename.c_str(),&lt;font color=&quot;#808080&quot;&gt;&quot;w&quot;&lt;/font&gt;);            &lt;font color=&quot;#008000&quot;&gt;//擬似乱数により半径を計算&lt;/font&gt;            timeBeginPeriod(1);            srand((&lt;font color=&quot;#0000ff&quot;&gt;unsigned&lt;/font&gt;)timeGetTime());            &lt;font color=&quot;#0000ff&quot;&gt;double&lt;/font&gt; nRadius = nParam + nParam * (0.01 * (rand() % 100));            timeEndPeriod(1);            &lt;font color=&quot;#008000&quot;&gt;//円を出力する&lt;/font&gt;            sprintf(strBuffer,&lt;font color=&quot;#808080&quot;&gt;&quot;ci %lf %lf %d 0 360 1 0\n&quot;&lt;/font&gt;,nX,nY,nRadius);            fputs(strBuffer,fp);            fclose(fp);            &lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; 0;        }    }    &lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; 0;}&lt;/pre&gt;	  &lt;/td&gt;    &lt;/tr&gt;  &lt;/table&gt;&lt;/div&gt;システムのミリ秒を乱数の種に使っているので、winmm.libをリンクしている。&lt;br /&gt;外部変形の実行に必要なbatファイルの内容は以下。&lt;br /&gt;&lt;br /&gt;trandomCircle.bat &lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;box&quot;&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;    &lt;tr&gt;      &lt;td width=&quot;24&quot; align=&quot;right&quot; valign=&quot;top&quot; class=&quot;boxLeft&quot;&gt;&lt;pre&gt;1:2:3:4:5:6:&lt;/pre&gt;&lt;/td&gt;      &lt;td valign=&quot;top&quot; class=&quot;boxRight&quot;&gt;&lt;pre&gt;@REM ランダムな大きさの円を描画&lt;br /&gt;REM #jww&lt;br /&gt;REM #1&lt;br /&gt;REM #hr&lt;br /&gt;REM #e&lt;br /&gt;randomCircle.exe 100&lt;/pre&gt;      &lt;/td&gt;    &lt;/tr&gt;  &lt;/table&gt;&lt;/div&gt;&lt;span class=&quot;read&quot;&gt;6行目の末尾の数値は、半径（単位：メートル）で、コマンド引数として実行ファイルに渡す。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;/span&gt;&lt;span class=&apos;oCol1Blue&apos;&gt;&lt;a href=&quot;http://grafz.net/c_download_top.html&quot;&gt;ダウンロードページ&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;「あしたから本気出す」オリジナル外部変形&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&apos;oCol1Blue&apos;&gt;&lt;a href=&quot;http://grafz.net/c_rss_top.html&quot;&gt;RSS：記事の購読&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;RSSリーダー等で記事をご購読できます。&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;p&gt;これからもどんどん面白くなるGRAFZ.NETをよろしくお願いします。&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;</description><pubDate>Thu, 4 Mar 2010 11:39:00 +0900</pubDate></item><item><link>http://grafz.net/c_article_d019.html</link><title>Jw_cadの外部変形の作り方</title><description>&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;&lt;img src=&apos;http://grafz.net/grafz/img/gaihen0.jpg&apos; alt=&quot;Jw_cadの外部変形の作り方&quot; width=&quot;433&quot; height=&quot;97&quot; style=&quot;margin-top:20px; margin-bottom:20px;&quot; /&gt;&lt;br /&gt;&lt;p&gt;&lt;span class=&quot;st&quot;&gt;Jw_cad、外部変形とは何か&lt;/span&gt;&lt;br /&gt;Jw_cadは根強いシェアを誇るフリーのCADソフトウェアで、ホビー用途からプロまで幅広く支持されている。ちなみに僕の実家は造園設計屋なのだが、DOS版までさかのぼると15年近く商売道具として利用しているようだ。多くの他のソフトウェアと同じく、機能拡張のために様々なプラグインを利用することができる。Jw_cadではプラグインは「外部変形」という名前で呼ばれている。&lt;/p&gt;&lt;p&gt;Jw_cad単体でも直感的で優れた操作性を備えたすばらしいソフトだが、外部変形を利用することで図形の描画や処理の自動化など、ユーザーごとの細かい要求に手が届くようになっている。外部変形の開発に必要なSDKは公開されていて、既に数多くの秀逸なプログラムが無償で公開されている。&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;st&quot;&gt;外部変形を作る意義&lt;/span&gt;&lt;br /&gt; Jw_cadを掃除機に例えるのはひょっとしたら僕が人類初かもしれないのだが、もし先をゆく者がいたらメールをください。人類初を泣く泣く譲らねばならないので。話をもどそう。Jw_cadが掃除機だとしたら外部変形はノズルであり、自分の部屋の隅にフィットしたノズルは自分で作ろうと思えば不可能ではない。テキストファイルをプログラムで操作するスキルさえあれば、RubyでもCでもVBでも、プログラムの種類関係なく開発可能である。&lt;/p&gt;&lt;p&gt;外部変形で何が出来るのか。さすがに自分の代わりに仕事をしてもらい、空いた時間を腹筋の強化に当てるというのは難しいかもしれない。がしかし、いちおう無限の可能性を秘めており、例えば特定の長さの線分のみを選択状態にしたり、位置を指定するだけでマンホールの絵を自動で描いてくれたりする。外部変形を自作できれば、CADオペレータである親戚のおじさん(もしそういう人がいれば)にそれをプレゼントし、見返りとして5万円くらいの小遣いをゲットできるかもしれない。おっと、執筆者の汚い一面が見えてしまったので金の話はこのくらいにしておこう。&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;st&quot;&gt;C++で作る&lt;/span&gt;&lt;br /&gt;  先にも触れた通り、外部変形はテキスト操作ができればプログラムの種類は問われない。これはどういう仕組みなのか。実は、外部変形が実行されるとJw_cadがテキストファイルを出力すると同時に、それを処理する実行ファイルを実行するのである。そのテキストには図形データが含まれていて、実行ファイルは必要に応じてそれを編集し、あるいは新しいデータを追加し、上書きをする。そのタイミングでJw_cadがテキストを改めて読み、外部変形の処理内容を反映してくれる、という仕組みである。プラグインの実装方法は他にDLLなどがあるが、外部変形のようにテキストファイルを介したものは、柔軟性があって仕組みとしてユニークである。&lt;/p&gt;&lt;p&gt;今回はC++で外部変形の最小のプログラムを作成することにした。C++を選んだしっかりとした理由は無いけれど、あえてメリットを挙げるとすれば、OSとの親和性が良くて処理も速い。では、具体的な手順を・・。&lt;/p&gt;&lt;p&gt;コンパイラはVisual Studio .NETを使用する。新しいプロジェクトを作成し、 Win32プロジェクトを選択。次に、プロジェクトを作成するディレクトリを指定する(ディレクトリの場所は任意)。アプリケーションの設定でコンソールアプリケーション、空のプロジェクトを選択する。ここまでが下ごしらえ。&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;st&quot;&gt;肝心のソースコードを書く&lt;/span&gt;&lt;br /&gt;プロジェクトにソースファイルを追加し、それにコードを書いていきます。ファイル名は「helloworld.cpp」としておきます。&lt;/p&gt;「helloworld.cpp」&lt;div class=&quot;box&quot;&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;  &lt;tr&gt;    &lt;td width=&quot;24&quot; align=&quot;right&quot; valign=&quot;top&quot; class=&quot;boxLeft&quot;&gt;1:&lt;br /&gt;2:&lt;br /&gt;3:&lt;br /&gt;4:&lt;br /&gt;5:&lt;br /&gt;6:&lt;br /&gt;7:&lt;br /&gt;8:&lt;br /&gt;&lt;/td&gt;    &lt;td valign=&quot;top&quot; class=&quot;boxRight&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(){&lt;br /&gt;&lt;div class=&quot;srcIndent&quot;&gt;	if(FILE *fp = fopen(&quot;JWC_TEMP.TXT&quot;,&quot;w&quot;)){&lt;br /&gt;&lt;div class=&quot;srcIndent&quot;&gt;		fputs(&quot;ch 0.0 0.0 100 0 \&quot; hello world!\n&quot;,fp);&lt;br /&gt;		fclose(fp);&lt;/div&gt;	}&lt;/div&gt;}&lt;/td&gt;  &lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;span class=&quot;read&quot;&gt;全部で8行と短いコードになりました。4行目でオープンしているJWC_TEMP.TXTというテキストファイルが、Jw_cadが吐き出した図形情報です。5行目で、座標(0,0)に文字「hello world!」を追加するための記述をしています。文字列冒頭の「ch」は横文字の文字列、という意味です。&lt;br /&gt;      &lt;br /&gt;  テキストファイルの書式については、&lt;br /&gt;  &lt;/span&gt;&lt;span class=&apos;oCol1Blue&apos;&gt;&lt;a href=&quot;http://sendai.cool.ne.jp/mintleaf/cad/jwc_temp.html&quot; target=&quot;_blank&quot;&gt;Daisy Daisy「jwc_temp.txtの解説」&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;  にて詳しい説明がされています。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;read&quot;&gt;実行ファイルをビルドし、それをJw_cadをインストールしたフォルダにコピーします。&lt;br /&gt;  外部変形の実行には、他にバッチファイルが必要で、今回は以下のような記述です。&lt;/p&gt;    &lt;br /&gt;  「helloworld.bat」&lt;span class=&quot;read&quot;&gt;&lt;div class=&quot;box&quot;&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;    &lt;tr&gt;      &lt;td width=&quot;24&quot; align=&quot;right&quot; valign=&quot;top&quot; class=&quot;boxLeft&quot;&gt;1:&lt;br /&gt;        2:&lt;br /&gt;        3:&lt;br /&gt;        4:&lt;br /&gt;        5:&lt;br /&gt;        6:&lt;br /&gt;&lt;/td&gt;      &lt;td valign=&quot;top&quot; class=&quot;boxRight&quot;&gt;@REM 外部変形のハローワールド&lt;br /&gt;        @echo off&lt;br /&gt;        REM #jww&lt;br /&gt;        REM #h0&lt;br /&gt;        REM #e&lt;br /&gt;        helloworld.exe&lt;/td&gt;    &lt;/tr&gt;  &lt;/table&gt;&lt;/div&gt;1行目はコメントであり、続いて順に、「命令はプロンプトに非表示にし、」「DOS形式ではなくWINDOWS形式の出力で、」「データ選択はせず、」「設定終了」最後に実行ファイル名、という内容です。このバッチファイルも同じフォルダに保存します。では、実行してみましょう。&lt;br /&gt;&lt;br /&gt;「その他」＞「外部変形」＞「helloworld.bat」を選択します。&lt;br /&gt;&lt;img src=&apos;http://grafz.net/grafz/img/gaihen1.jpg&apos; alt=&quot;Jw_cadの外部変形の作り方&quot; width=&quot;500&quot; height=&quot;332&quot; /&gt;&lt;br /&gt;座標(0,0)に「hello world!」という文字が追加されます。&lt;p&gt;次回は図形を選択し、それを元に何らかの線を描画する外部変形を作る予定です。&lt;/p&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;/span&gt;&lt;span class=&apos;oCol1Blue&apos;&gt;&lt;a href=&quot;http://grafz.net/c_download_top.html&quot;&gt;ダウンロードページ&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;「あしたから本気出す」オリジナル外部変形&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&apos;oCol1Blue&apos;&gt;&lt;a href=&quot;http://grafz.net/c_rss_top.html&quot;&gt;RSS：記事の購読&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;br /&gt;RSSリーダー等で記事をご購読できます。&lt;/span&gt;&lt;span class=&quot;read&quot;&gt;&lt;p&gt;最後までお読みいただきありがとうございました ＜(_ _)＞&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;</description><pubDate>Wed, 2 Sep 2009 08:19:00 +0900</pubDate></item></channel></rss>