質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2985閲覧

C#またはQtで電子回路エディタ機能を実装したい

butt5192

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

2クリップ

投稿2016/03/30 05:31

編集2016/04/04 02:17

Windowsのデスクトップアプリで、電子回路エディタ機能を実装したいのですが、
良い方法が思いつきません。

使用している環境はVS-C#2015、またはQt5.4です。
電子回路エディタ機能をまとめたフレームワークなどご存じないでしょうか?

または、こういった切り口で捉えたら良いというヒントでも結構ですので、
ご教示いただけると助かります。

[2016/03/31追記]
・実現したいことは大きく分けて2つあります。
1.テキストで表現された回路をGUIで表現し直す機能
2.GUIで表現された回路図をテキストに直す機能

「テキストで表現された回路」とは、下記のような形式で表現されています。

[構成]
INPUT---R0---R1-+-R4---OUTPUT
|
R2
|
R3
|
GND
[テキスト表現]
S(P(S(R0,R1),S(R2,R3)),R4)

テキスト表現では、S(p1,p2)と表記した場合p1とp2が直列であることを示します。
P(p1,p2)と表記した場合は、並列接続であることを示します。
それぞれのカッコの中の引数は必ず2つです。

1に関しては、従来の製品の入出力フォーマットがCUIで、テキスト回路表現のみサポートしているので、それに対応するために1の機能が必要です。
私が最初考えたのは、先頭から文字列を読みながら多分木に変換して、(x,y)の論理座標をそれぞれのノードに与え、そこからGUIに転写する方法でした。

先頭から多分木に変換することはできたのですが、X,Yの座標を与えるルーチンでつまづいて困っています。

例えば上の例だと、ノード名(x,y)と座標を示すとして、
R0(0,0) R1(1,0) R4(2,0) R2(1,1) R3(1,2)
と座標を振りたいのですが、深さ優先で潜った時に縦の深さでYを
増やしていくルーチンがうまく行きません。

回路の形は、並列でつながっている素子に更に並列という構成も
あるので、その場合を考えると再帰が組みにくくて悩んでいます。

2.に関しては、1で読み込んだ回路を編集する機能に当たります。

1,2ともに簡単に解決する方法を求めて、電子回路CADのフォーマットに
テキスト回路を中間ファイルとして変換するのが簡単では?と考え、
電子回路CADのフレームワークを探していました。

自前実装の場合のGUIは、ユーザーが自由に素子の位置を移動させるのではなく、
多分木への追加・削除・移動を指定するウィンドウからCUIチックに行うことを
考えています。
例えば、R1,R2にR3を直列に追加する、といったような操作を提供します。

上記のような処理を行いたいのですが、もっと良い方法があるのではないかと
考えなおしているところで、何かヒントを得られたら、、と質問をさせていただきました。

[2016/03/31] -> 回路AAの並列接続点がずれていたため修正

[2016/04/04]
直接的な解決にはまだ至っていませんが、要求仕様が技術的に高いというアドバイスを頂けたので解決済みとさせていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ps13zier

2016/03/30 10:39

電子回路エディタといっても色々要素を含むと思うのですが、どういった部分の実現方法に悩まれているのでしょうか?差し障りがなければ、具体的に問題を抱えている箇所を示すことで、欲しい情報が得られるかもしれませんよ?
guest

回答2

0

ベストアンサー

これは大変難しいものに挑戦していますね。以下、感覚的な話も含んでいるので申し訳ないのですが、ヒントになればと思い回答しておきます。

###1. テキストで表現された回路をGUIで表現し直す機能

自力で処理しようとすると、並列する箇所が連続して複数出てくる回路を単純に展開しようとしても、どうしても衝突が起こるでしょうから、平面展開した時にそれまでの部品と互いに重なっていないかどうか?衝突判定と配置の調整処理が(部品の増減毎に)必要になりそうですね。

マス目にブロックを置いていく感覚で整合性が取れている箇所をグループとして扱い、配置を調整するようなロジックになりそうな気がしますが、私はここに対しての明確な答えは持っていません。単純に難しいということだけは理解できます。

また、配線に関しても気を使わないといけないのでしょうか?配線同士が交差してもよいのか?部品の下をくぐってもよいのかどうか?といった判定や、縦横以外の角度を持った線として処理するのであれば、線分の交差判定なんかも必要になるかもしれませんね。(この辺は見下ろし型のシューティングゲームなんかの衝突判定が具体的な参考例として使えるでしょうか?)

おそらく、最小単位の部品にしても、縦横の大きさや接点の箇所をこだわりたくなるでしょうし、回路のバージョンアップ的な部品の増減を行った時に既存の部品の配置には影響を出さないで欲しい。なんて要望もありそうです。あと、部品によっては3点以上の接点を持つ事や、循環するような構造を持つ回路もあると思うのですが、これらを全て自動で実現するためには頭の痛くなる細かい課題がまだまだ出てきそうですね。

悩んでいる部分を解決しているソフトが世の中にあったとして、ノウハウの塊になるでしょうから、企業が作っている場合はなかなか公開される事は少ない気がします。テキスト表現の公式のフォーマット名がその界隈で有名なのであれば、そのフォーマットをキーワードとして世界中で探してみると、補助的なライブラリやらツールなど参考にできるものが利用者の側から公開されているかもしれません。

あと、見方を変えると、この手の効率の良い自動配置や調整方法は、ソフトウェア工学など学問の研究対象として挑まれている研究者が居るかもしれません。もし、こういった研究対象の分類とか名称とかが解れば、その方面の論文から参考にできる考え方や、実際に使えるアルゴリズムそのものを探してみるのも手でしょう。もし、これを見ていてキーワードを知っている方が居られましたら補足の回答なりをしていただけると幸いです。

###2. GUIで表現された回路図をテキストに直す機能

内部データの扱いをテキスト表現を基準にした形にしていれば、単純に変換だけの話となるため、テキスト化自体は簡単だと思います。ただし、1 と 2 の相互変換をした場合に、自動配置のアルゴリズムにも左右されるとは思うのですが、確実に可逆になることを保証したいのであれば、補助的な(配置や配線の補正)情報が必要になるのではないでしょうか?

独自フォーマットを作るのが手堅いでしょうが、互換性を重視するならば、テキスト表現に(コメントが書けるのであれば)コメントとして補助情報を埋め込んだり、別途補助情報だけを出力可能にするなどの策を用意すべきかもしれません。

何にしても内部で回路を表現するデータ構造そのものが重要になるのは間違いないでしょう。

以上、ご参考になれば幸いです。

投稿2016/03/31 07:49

ps13zier

総合スコア433

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

butt5192

2016/04/01 00:39

ps13zier様 的確なご指摘、アドバイスありがとうございます。 なるほど、テキストから回路図に変換するアルゴリズムの難易度は、客観的に見ても難しかったのですね。私の能力が足りてないのかと思っていました。 CUI->リスト構造&座標管理->GUI描画という流れが難易度的に高いということも理解しました。重ならない経路探索みたいなアルゴリズムになるかと思います。 いっそまるっきり下位互換を切り捨てて、純粋な回路エディタを実装し、既存回路を書きなおしXMLで構造を吐き出す形にしたほうが早く開発が終わるかも、、と考え始めています。 実はこの機能、アプリケーションの一部で、アプリの肝は回路解析になるのですが、なかなかそこを開発できなくてやきもきです。精進します。 ご回答ありがとうございました。
guest

0

こんにちは。

フレームワークは把握していませんが、ちょっと探してみたら、オープンソースの回路図エディタがありました。

水魚堂の回路図エディタ

2条項BSDライセンスと言うことなので、ご自身のソフトへの組み込みも許諾されているようです。

もし、フレームワークがあればその方が良いと思いますので、見つからなかった時の参考に。

投稿2016/03/30 06:05

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

butt5192

2016/03/30 07:03

Chironian様 早速のご回答ありがとうございます。 BSchのご紹介ありがとうございます。 最終手段はソースを読んで回路編集部分の最適化をしつつ自分の環境へ実装し直すしかないかなと思っているのですが、いろんな実装案を試しては捨て試しては捨てしています。 多分木のデータ構造で回路を扱えば割りと簡単そうと思っていたのですが、並列接続部に更に並列接続部がある場合を考え出すと、無限回廊を歩いている気分です。 一縷の望みを掛けて、引き続きフレームワークを探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問