ページ「KiCad」と「Xamarin.Mac/NSApplicationのサブクラスを使う」の間の差分

提供: MonoBook
(ページ間の差分)
ナビゲーションに移動 検索に移動
imported>MikeCAT
(:s/ペイントソフト/お絵かきソフト)
 
(153.174.184.145 (トーク) による版 6178 を取り消し)
 
1行目: 1行目:
'''KiCad'''とは、ドロー系[[お絵かきソフト]]の1つで、特に[[回路図]][[基板]]の絵を描くのに適している。
+
[[MonoMac]]および[[Xamarin.Mac]][[AppKit]]のNSApplicationのサブクラスを利用したい場面もあることだろう。多くの場合はNSApplicationDelegateで事足りるだろうが、稀にすべてのイベントをトラップしたい場面などではNSApplicationのサブクラスを作る必要がある。
  
== 入手 ==
+
==実装1==
KiCadは[[GPL]] v2の[[フリーソフト]]である。
+
===NSApplicationのサブクラスを作る===
 +
Register属性で指定した名前は後ほどInfo.plistで利用される。凄く重要。クラス名と同じにしておくと紛らわしくないと思われる。
  
* [http://iut-tice.ujf-grenoble.fr/cao/ 安定版]
+
NSApplicationがデフォルトコンストラクタを持たない関係でサブクラスにもコンストラクタがないと[[コンパイル]]が通らないが、[[デバッガ]]で追ってみた限りでは呼ばれている気配はない。そのためAwakeFromNibメソッドをオーバーライドして初期化している。これでいいのかは知らん。
* [http://kicad.nosoftware.cz/ 最新版]
+
<source lang="csharp">
 +
    using System;
  
== 使い方 ==
+
    using Foundation;
 +
    using AppKit;
  
=== 回路図を描く ===
+
    [Register("App")]
# KiCadを起動する。
+
    public class App : NSApplication
# Eeschemaを起動する。
+
    {
# 使いたい[[コンポーネント]](部品)が無ければ、描いて[[ライブラリ]]に登録する。
+
        public App(IntPtr handle) : base(handle) {}
# コンポーネントや電源ポートをいい感じに配置する。
 
# 配置したコンポーネントの端子をいい感じにワイヤでつなぐ。
 
# コンポーネントの値やリファレンスなどをいい感じに設定する。
 
  
=== 基板の絵を描く ===
+
        public App(NSCoder coder) : base(coder) {}
# Eeschemaでネットリストを出力する。
 
# 利用したいフットプリントが無ければ、Pcbnewを起動し、フットプリントを作成してライブラリに登録する。
 
# CvPcbを起動し、コンポーネント(回路図上の部品)とフットプリント(基板上の部品)を対応付ける。
 
# Pcbnewを起動する。
 
# 出力しておいたネットリストを読み込む。部品が画面に投入される。
 
# いい感じに部品を配置する。
 
# [[ツールバー]]の「トラック モード:自動配線」をONにし、画面を右クリックして「自動配線→全てのモジュールを自動配線」で勝手に配線を行ってくれる。配線を最初から考えず調整するだけでよくなるので、手間が減る。
 
# [[3D]]表示もできる。楽しい。
 
  
=== その他の図形を描く ===
+
        /// <summary>
# 最初からPcbnewを起動する。回路図やネットリストは必要ない。
+
        /// 初期化はAwakeFromNibのタイミングでいいのか?
# 右上の[[コンボボックス]]で"Edge.Cuts"を選択する。これは本来は基板の外形を描く場所であるが、様々な[[図形]]を描ける。
+
        /// 調査中
# [[線分]]や[[円弧]]、半角[[英数字]]・記号の[[テキスト]]を組み合わせて描きたい図形を描く。
+
        /// </summary>
# 描いた図形を[[印刷]]したい場合は、あらかじめ[[ページ設定]]で適切な[[紙]]の大きさを指定しておく。[[デフォルト]]ではA3になっているので注意。
+
        public override void AwakeFromNib()
 +
        {
 +
            base.AwakeFromNib();
 +
            this.Delegate = new AppDelegate();
 +
        }
  
== 外部リンク ==
+
        /// <summary>
* [http://www.kicad-pcb.org/display/KICAD/KiCad+EDA+Software+Suite KiCad EDA Software Suite - Kicad EDA - KiCad EDA]
+
        /// こいつをオーバーライドすればほぼ全てのイベントが取れる
* [https://sites.google.com/site/vita0117kicad/ KiCadチュートリアル]
+
        /// </summary>
* [https://twitter.com/kicad_jp kicad.jp(@kicad_jp)さん | Twitter]
+
        /// <param name="theEvent">The event.</param>
 +
        public override void SendEvent(NSEvent theEvent)
 +
        {
 +
            base.SendEvent(theEvent);
 +
        }
 +
    }
 +
</source>
  
== 関連項目 ==
+
===Info.plistに「Principal class」を設定する===
=== お絵かきソフト ===
+
Info.plistを開き、Xamarin Studio下部の「ソース」タブを選択する。Info.plistがない場合はファイルを追加する(新規追加ダイアログでは「Application Manifest」という名称になっているはず)。
* [[OpenOffice.org]] Draw
 
* [[LibreOffice]] Draw
 
* [[Inkscape]]
 
* [[AR_CAD]]
 
* [[Microsoft Word]]
 
* [[Microsoft Excel]]
 
  
=== 回路設計ソフト ===
+
プロパティの一覧が列挙されるので、プロパティ「Principal class」に「String」型で前述のRegister属性で付けた名前を入力する(この例であれば「App」)。プロパティ「Principal class」がない場合はリスト下部の「Add new entry」を選べば新しい行が追加される。
* [[PasS]]
+
 
* [[源内CAD]]
+
===エントリポイントを書き換える===
* [[LTspice]]
+
Xamarin Studioで「空のプロジェクト」を作ると初期値でこんな感じになっている。
* [[CircuitLab]]
+
<source lang="csharp">
 +
    static class MainClass
 +
    {
 +
        static void Main(string[] args)
 +
        {
 +
            NSApplication.Init();
 +
 
 +
            var application = NSApplication.SharedApplication;
 +
            application.Delegate = new AppDelegate();
 +
            application.Run();
 +
        }
 +
    }
 +
</source>
 +
 
 +
 
 +
これを以下のように書き換える。なお「空のプロジェクト」ではなく「Cocoa」を選ぶと最初からこうなっている。
 +
<source lang="csharp">
 +
    using System;
 +
    using AppKit;
 +
 
 +
    static class MainClass
 +
    {
 +
        static void Main(string[] args)
 +
        {
 +
            NSApplication.Init();
 +
            NSApplication.Main(args);
 +
        }
 +
    }
 +
</source>
 +
 
 +
==関連項目==
 +
 
 +
==参考文献==
 +
{{reflist}}
 +
 
 +
{{stub}}
 +
 
 +
[[category:Xamain.Mac]]
 +
[[category:MonoMac]]

2015年4月20日 (月) 07:35時点における版

MonoMacおよびXamarin.MacAppKitのNSApplicationのサブクラスを利用したい場面もあることだろう。多くの場合はNSApplicationDelegateで事足りるだろうが、稀にすべてのイベントをトラップしたい場面などではNSApplicationのサブクラスを作る必要がある。

実装1

NSApplicationのサブクラスを作る

Register属性で指定した名前は後ほどInfo.plistで利用される。凄く重要。クラス名と同じにしておくと紛らわしくないと思われる。

NSApplicationがデフォルトコンストラクタを持たない関係でサブクラスにもコンストラクタがないとコンパイルが通らないが、デバッガで追ってみた限りでは呼ばれている気配はない。そのためAwakeFromNibメソッドをオーバーライドして初期化している。これでいいのかは知らん。

    using System;

    using Foundation;
    using AppKit;

    [Register("App")]
    public class App : NSApplication
    {
        public App(IntPtr handle) : base(handle) {}

        public App(NSCoder coder) : base(coder) {}

        /// <summary>
        /// 初期化はAwakeFromNibのタイミングでいいのか?
        /// 調査中
        /// </summary>
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();
            this.Delegate = new AppDelegate();
        }

        /// <summary>
        /// こいつをオーバーライドすればほぼ全てのイベントが取れる
        /// </summary>
        /// <param name="theEvent">The event.</param>
        public override void SendEvent(NSEvent theEvent)
        {
            base.SendEvent(theEvent);
        }
    }

Info.plistに「Principal class」を設定する

Info.plistを開き、Xamarin Studio下部の「ソース」タブを選択する。Info.plistがない場合はファイルを追加する(新規追加ダイアログでは「Application Manifest」という名称になっているはず)。

プロパティの一覧が列挙されるので、プロパティ「Principal class」に「String」型で前述のRegister属性で付けた名前を入力する(この例であれば「App」)。プロパティ「Principal class」がない場合はリスト下部の「Add new entry」を選べば新しい行が追加される。

エントリポイントを書き換える

Xamarin Studioで「空のプロジェクト」を作ると初期値でこんな感じになっている。

    static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();

            var application = NSApplication.SharedApplication;
            application.Delegate = new AppDelegate();
            application.Run();
        }
    }


これを以下のように書き換える。なお「空のプロジェクト」ではなく「Cocoa」を選ぶと最初からこうなっている。

    using System;
    using AppKit;

    static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();
            NSApplication.Main(args);
        }
    }

関連項目

参考文献