Author Topic: Kicad - GUI is Horrific!  (Read 61029 times)

0 Members and 3 Guests are viewing this topic.

Online nctnico

  • Super Contributor
  • ***
  • Posts: 26910
  • Country: nl
    • NCT Developments
Re: Kicad - GUI is Horrific!
« Reply #300 on: May 04, 2023, 01:46:57 pm »
Yes, it's a dismissal -- of one specific idea/request, that KiCad should require explicit user action to "connect" or "disconnect" things in the netlist rather than retaining the ability to make connections by moving/placing objects.
You missed the point where Kicad can infer the intend of the user perfectly fine. For example: when the user selects the function to draw connections or delete connections, it is obvious that the user is going to make/break connections. However in other modes (like dragging components / wires around, changing symbols) it would be nice if there is a safeguard that helps the user to maintain integrity of the schematic. I know CAD packages like Orcad and Altium don't work that way but I can definitely see the advantage for people working on more complex designs where a mistake can be costly.

IOW: There really is no need for the user to select between connection / formatting modes.
« Last Edit: May 04, 2023, 01:49:14 pm by nctnico »
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 
The following users thanked this post: propellerhead

Offline propellerhead

  • Regular Contributor
  • *
  • Posts: 96
  • Country: ca
  • Give me Robertson or give me death.
Re: Kicad - GUI is Horrific!
« Reply #301 on: May 04, 2023, 01:49:28 pm »
Yes, it's a dismissal -- of one specific idea/request, that KiCad should require explicit user action to "connect" or "disconnect" things in the netlist rather than retaining the ability to make connections by moving/placing objects.

In case there's any misunderstanding here, we're not talking about the user performing "netlist operations"
such as connecting and disconnecting.  At no time have we discussed direct user manipulation of the netlist.
What this is about is the schematic editing operations being reflected in the netlist, and conversely,
the netlist affecting the behaviour of schematic capture and the data presented to the user.  Otherwise it's
simply too easy for schematic capture to present a deceptive picture to the user, which is no help at all.

Quote
There are many other ideas in this thread that are not really related to this specific idea (for example, realtime ERC) that I'm not dismissing.

This discussion (and previous ones) goes nowhere if people continue to assume that the KiCad developers just don't understand something -- the way KiCad works here is an intentional choice and we really do understand the alternatives that some other software tools use.  If you accept that, we welcome suggestions and feature requests that would improve KiCad within this paradigm.

Perhaps, then, you'll go a step further than dismissal and the insistence that there's some mysterious
paradigm at work here, and explain why you think this is correct and desirable behaviour.
 

Online 2N3055

  • Super Contributor
  • ***
  • Posts: 6666
  • Country: hr
Re: Kicad - GUI is Horrific!
« Reply #302 on: May 04, 2023, 01:51:13 pm »
Yes, it's a dismissal -- of one specific idea/request, that KiCad should require explicit user action to "connect" or "disconnect" things in the netlist rather than retaining the ability to make connections by moving/placing objects.

There are many other ideas in this thread that are not really related to this specific idea (for example, realtime ERC) that I'm not dismissing.

This discussion (and previous ones) goes nowhere if people continue to assume that the KiCad developers just don't understand something -- the way KiCad works here is an intentional choice and we really do understand the alternatives that some other software tools use.  If you accept that, we welcome suggestions and feature requests that would improve KiCad within this paradigm.

I didn't say you dismiss everything. Far from it. Kicad itself is proof how far it improved in last few years. I'm really impressed and full of praise for people that made it happen.  Amazing work. But most of Kicad "problems" are not people writing bad code, but wrong, incomplete or misguided goals... The statement that is the problem is "intentional choice".. Well, some of the choices are not good..
I say that with complete honesty and with full respect that there are many choices that are right. Just not all of them.

That statement means :"we welcome all suggestions except those we already made up our mind about..". Which is fine but people will call bullshit when they see one, no matter how much it was "deliberate choice".

That person never said he wants to manipulate netlists directly. In fact he specifically said that he understands that netlist is something internal.
He posited that CONNECTIONS user makes in GUI instruct GUI to create netlist entries (as it does) but GUI itself is not doing any checks that subsequent GUI operations might make hidden changes in SCHEMATIC that are in contrary to what user wanted (user not wanting to make changes to CONNECTIONS but only to graphical layout of schematic... And since connectivity is explained with netlist he kept repeating that word. But it is about GUI changing connections (schematics) sometimes on some operations without any warning. And since GUI has internal netlist it could easily detect ERC violation... Hence mentioning of netlist.

To me a pin on schematic symbol is exactly that: a pin connected to internal net in device.
So if I connect wire to pin 3, go change symbol that pin 3 is few millimeters to the right, wire end should follow it to where it moved. I did not make a connection to a point in air that accidentally coincides with device pin..
Schematic diagramming tool is not a Photoshop. Those are not graphic lines in ACAD. Those are WIRES that CONNECT PINS on COMPONENTS...
The way I see it Kicad has 90% of functionality for this already implemented. It has all the data and awareness.

Again, I thank you guys for your amazing efforts.
 
The following users thanked this post: propellerhead, shapirus

Offline craftyjon

  • Newbie
  • Posts: 7
Re: Kicad - GUI is Horrific!
« Reply #303 on: May 04, 2023, 03:21:57 pm »
Really, I do understand what is being proposed.  KiCad makes an intentional choice to allow users to modify the connectivity of the schematic by moving items around, rather than assuming that once an initial connection has been made to a pin, that connection should be preserved through all other editing operations except ones that explicitly "disconnect" the pin.

In general, KiCad has two tools to change the position of items interactively: moving and dragging.  Moving does not, and will not, attempt to preserve connectivity.  Dragging does.  We welcome suggestions for how dragging can work better (there are certainly cases where a drag can accidentally result in connectivity changes today), but we're not going to get rid of moving.

As for the OP's original scenario of wanting to edit a symbol in the symbol editor and have its pins stay connected the way they used to be: realistically I don't see that happening, not because of technical limitations but because it is not the kind of "magic" we want.  However, a reasonable workaround that we could have in KiCad is to allow the user to drag around symbol pins directly on the schematic canvas (and drag operations should preserve connectivity).  This fits a lot better with KiCad's workflow.

A realtime ERC and/or other mechanisms to warn about or prevent accidental changes to connectivity while dragging are also in scope for KiCad.  For these and all other feature requests, the next step is to open an issue on GitLab describing them.

If you think our goals are "wrong and misguided" for wanting to preserve the editing workflow where you can change the connectivity by moving things if you want to, sorry, we just will have to agree to disagree on that.

Quote
Perhaps, then, you'll go a step further than dismissal and the insistence that there's some mysterious paradigm at work here, and explain why you think this is correct and desirable behaviour.

I tried this with you already on the other forum.  You weren't interested in hearing other points of view then, and you don't seem to be now.  If you can't accept that your concept of how an EDA tool should work is not the only correct one, I don't think you'll ever be happy with KiCad.
« Last Edit: May 04, 2023, 03:28:39 pm by craftyjon »
 
The following users thanked this post: Monkeh, tooki, Fgrir, bpiphany

Offline propellerhead

  • Regular Contributor
  • *
  • Posts: 96
  • Country: ca
  • Give me Robertson or give me death.
Re: Kicad - GUI is Horrific!
« Reply #304 on: May 04, 2023, 03:26:52 pm »
Really, I do understand what is being proposed.  KiCad makes an intentional choice to allow users to modify the connectivity of the schematic by moving items around, rather than assuming that once an initial connection has been made to a pin, that connection should be preserved through all other editing operations except ones that explicitly "disconnect" the pin.

In general, KiCad has two tools to change the position of items interactively: moving and dragging.  Moving does not, and will not, attempt to preserve connectivity.  Dragging does.  We welcome suggestions for how dragging can work better (there are certainly cases where a drag can accidentally result in connectivity changes today), but we're not going to get rid of moving.

This is the sound of people pulling the wool over their own eyes.

You're talking about "preserving [a] connectivity" that does not, in practical terms, exist.

A "connection" that isn't a real (that is, as represented in a live netlist) connection remains
a nonconnection regardless of whether you "move", "drag", or "juggle" it.  This is ridiculous.
 

Online 2N3055

  • Super Contributor
  • ***
  • Posts: 6666
  • Country: hr
Re: Kicad - GUI is Horrific!
« Reply #305 on: May 04, 2023, 03:58:01 pm »
Really, I do understand what is being proposed.  KiCad makes an intentional choice to allow users to modify the connectivity of the schematic by moving items around, rather than assuming that once an initial connection has been made to a pin, that connection should be preserved through all other editing operations except ones that explicitly "disconnect" the pin.

In general, KiCad has two tools to change the position of items interactively: moving and dragging.  Moving does not, and will not, attempt to preserve connectivity.  Dragging does.  We welcome suggestions for how dragging can work better (there are certainly cases where a drag can accidentally result in connectivity changes today), but we're not going to get rid of moving.

As for the OP's original scenario of wanting to edit a symbol in the symbol editor and have its pins stay connected the way they used to be: realistically I don't see that happening, not because of technical limitations but because it is not the kind of "magic" we want.  However, a reasonable workaround that we could have in KiCad is to allow the user to drag around symbol pins directly on the schematic canvas (and drag operations should preserve connectivity).  This fits a lot better with KiCad's workflow.


And this here is deliberate ignoring of what I explained.

I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".
Absolutely wires have to stay attached to the pins EXCEPT when I deliberately perform operation that severs the connection.

No electrical engineer thinks in terms of "connectivity by moving things around".

If you don't see this then this is one of those "opinions" of Kicad team that is not in line with intended audience.
If it is too much work or requires too much changes to the engine just say so..
Even if not perfect it is still going to very useful, and then with addition of few ERC tools to remind you of potential problems it's going to be OK.

Don't defend it by claiming "trust me, these are not the droids you're looking for". We know better and are only trying to help.. At least me.. I for one would like good PCB CAD that doesn't require king's ransom...

 
The following users thanked this post: nctnico, KE5FX, Jacon, propellerhead

Offline craftyjon

  • Newbie
  • Posts: 7
Re: Kicad - GUI is Horrific!
« Reply #306 on: May 04, 2023, 05:41:07 pm »
I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".
Absolutely wires have to stay attached to the pins EXCEPT when I deliberately perform operation that severs the connection.

No electrical engineer thinks in terms of "connectivity by moving things around".

If you don't see this then this is one of those "opinions" of Kicad team that is not in line with intended audience.

I've been an electrical engineer and PCB designer for longer than I've been a KiCad developer.  Speaking in absolutes about how people think, and telling me you know better, doesn't really help move a conversation forward.  I get it: you disagree with me about this.  But you can disagree without insisting that your way is the only correct way.

By the way, I think there is a bit of misunderstanding here, as we don't disagree about everything.  I'm in full agreement that ERC tools to remind you of potential problems are a good idea.
 
The following users thanked this post: Monkeh, Wolfram, tooki, JohnG, bpiphany, 2N3055

Offline propellerhead

  • Regular Contributor
  • *
  • Posts: 96
  • Country: ca
  • Give me Robertson or give me death.
Re: Kicad - GUI is Horrific!
« Reply #307 on: May 04, 2023, 05:44:55 pm »
By the way, I think there is a bit of misunderstanding here, as we don't disagree about everything.  I'm in full agreement that ERC tools to remind you of potential problems are a good idea.

And yet you have "dismissed" (your word) the implementation of the simplest, most front-end, user-friendly,
meaningful, interactive ERC that your (potential) users want.  I presume this means you'll do ERC the way
you're doing netlisting now - after the schematic is done; that is, too late.
 

Online tooki

  • Super Contributor
  • ***
  • Posts: 11563
  • Country: ch
Re: Kicad - GUI is Horrific!
« Reply #308 on: May 04, 2023, 05:57:53 pm »
I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".

No electrical engineer thinks in terms of "connectivity by moving things around".
How do you presume to know how ALL EEs think? Clearly they do not all think alike, or else this discussion wouldn’t be taking place.

I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".
Huh?

Everyone knows that clean schematic design is really important. There’s a huge graphical component to that. 

Don’t forget that a schematic is not only a stepping stone PCB layout. The schematic is where and how you work out the circuit design, so while it’s a prerequisite for a DRC-supported PCB layout, the schematic is simultaneously also a goal in and of itself.

No electrical engineer thinks in terms of "connectivity by moving things around".
But there has to be some way to tell the EDA software your intent. In a program with a GUI, moving things around and connecting them is a very established model for entering and editing your intent.
 

Online tooki

  • Super Contributor
  • ***
  • Posts: 11563
  • Country: ch
Re: Kicad - GUI is Horrific!
« Reply #309 on: May 04, 2023, 06:00:21 pm »
By the way, I think there is a bit of misunderstanding here, as we don't disagree about everything.  I'm in full agreement that ERC tools to remind you of potential problems are a good idea.

And yet you have "dismissed" (your word) the implementation of the simplest, most front-end, user-friendly,
meaningful, interactive ERC that your (potential) users want.  I presume this means you'll do ERC the way
you're doing netlisting now - after the schematic is done; that is, too late.
You haven’t succeeded in coherently articulating what you actually want, never mind a cogent interaction model for it.
« Last Edit: May 04, 2023, 06:13:10 pm by tooki »
 
The following users thanked this post: craftyjon

Online 2N3055

  • Super Contributor
  • ***
  • Posts: 6666
  • Country: hr
Re: Kicad - GUI is Horrific!
« Reply #310 on: May 04, 2023, 06:05:41 pm »
I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".
Absolutely wires have to stay attached to the pins EXCEPT when I deliberately perform operation that severs the connection.

No electrical engineer thinks in terms of "connectivity by moving things around".

If you don't see this then this is one of those "opinions" of Kicad team that is not in line with intended audience.

I've been an electrical engineer and PCB designer for longer than I've been a KiCad developer.  Speaking in absolutes about how people think, and telling me you know better, doesn't really help move a conversation forward.  I get it: you disagree with me about this.  But you can disagree without insisting that your way is the only correct way.

By the way, I think there is a bit of misunderstanding here, as we don't disagree about everything.  I'm in full agreement that ERC tools to remind you of potential problems are a good idea.

Thank you for ongoing discussion (and for keeping it very civilized).
My point is exactly the same as yours and I will quote you :"  I get it: you disagree with me about this.  But you can disagree without insisting that your way is the only correct way." I assure you there are many out there that think like I do. Unfortunately many people that could contribute to discussion just have no interest in Kicad. They are busy using their expensive paid for tools at work and in free time fish or do something else...

As I said, I defer to your decision because it is not me who is doing the work and I have no intention to "request the feature". But I am as I am and had say my thing.. If Kicad is equipped (with time) with some ERC tools to help manage potential problems that stem from this design decision it will probably make things very OK. It is just that my instinct is to solve problems at source, removing potential for data errors by design and then cope with "pretty parts" rather than vice versa..

There are no tools without quirks, eventually we learn to live with it if otherwise tools is good and productive.. 
Thank you for you contribution to the world...
 
The following users thanked this post: craftyjon

Offline propellerhead

  • Regular Contributor
  • *
  • Posts: 96
  • Country: ca
  • Give me Robertson or give me death.
Re: Kicad - GUI is Horrific!
« Reply #311 on: May 04, 2023, 06:27:56 pm »
You haven’t succeeded in coherently articulating what you actually want, never mind a cogent interaction model for it.

To the contrary, I've repeatedly offered a clear and concise model for exactly what schematic
capture should be doing.  If you haven't read it, it's not because I haven't (coherently) articulated it. 
But for your benefit I'll do it one more time:

1. When you connect something, it's connected.  Not only is it visually connected, but the connection is
entered (by the schematic capture) into the netlist it maintains.

2. When you disconnect something, it's disconnected, and that disconnection is similarly reflected in the
netlist - again, transparently to the user.

3. The software may not make or break connections as the result of moves, symbol edits, etc.  Only the user
can change connections.  If, as a result of moves, edits, etc., entities in the schematic intersect such that they
create the appearance of connections (that haven't been explicitly created by the user), they are flagged
as warnings to the user.

Under no circumstances should the software permit faux connections, that is, elements of the drawing
that appear to visually represent connections yet aren't properly represented in the netlist.  This is what #3
is meant to prevent.  It's also apparently the only kind of "connection" presently supported by KiCAD.

Could that possibly be clearer or more coherent?
« Last Edit: May 04, 2023, 06:53:51 pm by propellerhead »
 

Online 2N3055

  • Super Contributor
  • ***
  • Posts: 6666
  • Country: hr
Re: Kicad - GUI is Horrific!
« Reply #312 on: May 04, 2023, 06:38:49 pm »
I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".

No electrical engineer thinks in terms of "connectivity by moving things around".
How do you presume to know how ALL EEs think? Clearly they do not all think alike, or else this discussion wouldn’t be taking place.

I assure you no PCB designer thinks in terms of graphical design and they absolutely think in terms of  "this wire to this PIN".
Huh?

Everyone knows that clean schematic design is really important. There’s a huge graphical component to that. 

Don’t forget that a schematic is not only a stepping stone PCB layout. The schematic is where and how you work out the circuit design, so while it’s a prerequisite for a DRC-supported PCB layout, the schematic is simultaneously also a goal in and of itself.

No electrical engineer thinks in terms of "connectivity by moving things around".
But there has to be some way to tell the EDA software your intent. In a program with a GUI, moving things around and connecting them is a very established model for entering and editing your intent.

I said EE, not graphical designers. When you are designing new "electronic contraption" you are compiling a set of components  (passive, active and parasitic) and their interconnections. Schematic is human friendly, graphical netlist+BOM. Nothing more. Everything else on schematic is organizational data, revisions, manufacturing data etc....
You don't draw a line between two little circles, you are connecting two connector endpoints with a wire. By drawing a line between two little circles. According to a predefined graphical language that was standardized by convention for that purpose.
Clean and clear "look" is certainly a large part of well done schematic layout. But, funny enough, it is not mandatory, and during years I've seen both exceptional and horrible ones. That both created exceptional PCB layout.

You move things around to organize layout and functional groups. That is important, but connections between components are THE SCHEMATIC. Other stuff is only how it looks and consequently how nice is to read.

As you absolutely correctly stated, it is where circuit design happens. By adding things, deleting them, moving them, rotating them, mirroring them. All the time. As you add things you see this would be better if drawn left here etc.
And many of these things newest versions of Kicad do very well. What is left open to "unpredictable results" is component mirroring and changes to component symbol after the fact. If you mirror pins left and right on symmetric layout component will scramble where inputs and outputs connect... Without warning... That is potential source of error... That would not exist if Kicad was remembering connection to pin which had coordinate , instead remembering connection to arbitrary coordinate in coordinate space that happen to coincide with coordinate of pin of a (whatever) component that happen to be on that position...

That is all.
 
The following users thanked this post: propellerhead

Offline KE5FX

  • Super Contributor
  • ***
  • Posts: 1894
  • Country: us
    • KE5FX.COM
Re: Kicad - GUI is Horrific!
« Reply #313 on: May 04, 2023, 06:51:34 pm »
Quote
You haven’t succeeded in coherently articulating what you actually want, never mind a cogent interaction model for it.

For all the grief that EAGLE gets, much of it deserved, the netlist model is one thing they got 100% right.  That's what allows them to maintain strict consistency between the layout and schematic. 

So, do what EAGLE does.  :box:
 
The following users thanked this post: 2N3055, propellerhead

Online nctnico

  • Super Contributor
  • ***
  • Posts: 26910
  • Country: nl
    • NCT Developments
Re: Kicad - GUI is Horrific!
« Reply #314 on: May 04, 2023, 07:04:13 pm »
No electrical engineer thinks in terms of "connectivity by moving things around".
But there has to be some way to tell the EDA software your intent. In a program with a GUI, moving things around and connecting them is a very established model for entering and editing your intent.
IMHO several peope brought up some good examples where moving/dragging things or changing symbols causes problems that may go unnoticed:

- Dragging a component can result in creating new connections that may not be wanted. Especially true when dragging a larger piece of circuitry. Personally I have always found this a tricky & cumbersome operation in Orcad as you need to keep a really close eye on what is going on exactly.

- Changing a symbol where pins end up on other locations could go unnoticed as well. Especially when working on a design in a team.

All in all this thread suddenly has made me feel I have been kind of making do with Orcad (for several decades already!) which simply leaves a lot of schematic integrity checking tasks to the user. To be honest I never really gave this much thought until now.
« Last Edit: May 04, 2023, 07:06:41 pm by nctnico »
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 
The following users thanked this post: 2N3055, propellerhead

Offline propellerhead

  • Regular Contributor
  • *
  • Posts: 96
  • Country: ca
  • Give me Robertson or give me death.
Re: Kicad - GUI is Horrific!
« Reply #315 on: May 04, 2023, 07:56:27 pm »
Other than to show up and criticize those who are arguing for positive change to KiCAD, I have no idea why you're here.

Those who have actually been engaged in this conversation know exactly what we're talking about, and do not require
that anyone get out their box of crayons to illustrate it.
« Last Edit: May 04, 2023, 08:14:16 pm by propellerhead »
 

Offline ebastler

  • Super Contributor
  • ***
  • Posts: 6512
  • Country: de
Re: Kicad - GUI is Horrific!
« Reply #316 on: May 04, 2023, 08:15:46 pm »
A "connection" that isn't a real (that is, as represented in a live netlist) connection remains
a nonconnection regardless of whether you "move", "drag", or "juggle" it.  This is ridiculous.

Sorry, I thought for a while that I had understood your point, but now you have lost me again.

(a) I fully understand the desire for a set of commands which manipulate the schematic while keeping all connections intact. KiCad has those: You can drag a part or a wire, including rotating and mirroring the part, and keep all connections in place.

(b) I kind of understand the preference that commands which break connections should not be available at all, or should be well-hidden in a way where you do not use them unintentionally. Kicad does not do that by default, it makes the connection-breaking Move, Rotate etc. commands easily available. But that is a very superficial change which you can make on the user level: Just assign exotic hotkeys (or none at all) to these commands you don't want. And I see the developers' point that other users will have different workflows and styles and want to use these commands regularly.

(c) What I do not understand is your insistence that a "proper internal netlist" representation is the only path to happiness. That seems dogmatic. From a user perspective, why should I care how Kicad works internally -- as long as it offers (a), and for those so inclined enables (b)?

Thanks for clarifying!
 

Offline baldurn

  • Regular Contributor
  • *
  • Posts: 189
  • Country: dk
Re: Kicad - GUI is Horrific!
« Reply #317 on: May 04, 2023, 08:33:13 pm »
First I want to say I am happy with KiCAD and not complaining at all. But if this is a user survey (and everyone should have one of those regularly) I will say there is some merit to this thread. I don't want the schematic editor to change by alot but it really could handle connections in a more sane way. And without needing two edit modes or anything like that.

I have not checked the source code but I did check the save files. I don't like that wires seem to be indexed by coordinates. From a data science point of view this so wrong. Instead we should have points of interconnect defined with uuid and coordinates. A wire is then a connection between point uuid A and point uuid B or a pin uuid C. That way the point can be moved but the connection never breaks unless intended. And we will not have unintended connections not even if some bug caused the coordinates to be the same.

It means the GUI code needs to be explicit about when to break connections. Yes we can still have "move" that breaks connections but the code behind would need to explicitly break those connections and not have it happen as a side effect. This would then enable the GUI to discover possible unintended (dis)connections and put up a warning dialog.

For example mirroring a symbol causing disconnects on one side and reconnect to random stuff on the other side is probably very rarely intended and should display a dialog to which the user can select ok/cancel. And if editing a symbol can not use "grap" semantics but needs to use "move" then I am ok with it causing disconnections but NOT that it might cause random connections.

TLDR I feel the data model is wrong and it causes errors. It could be fixed without changing the look and feel of the GUI.
 
The following users thanked this post: nctnico, KE5FX, 2N3055, propellerhead

Offline propellerhead

  • Regular Contributor
  • *
  • Posts: 96
  • Country: ca
  • Give me Robertson or give me death.
Re: Kicad - GUI is Horrific!
« Reply #318 on: May 04, 2023, 08:48:08 pm »
Sorry, I thought for a while that I had understood your point, but now you have lost me again.

Probably not.  Don't overthink it!  It's simpler than it sounds!

Quote
(a) I fully understand the desire for a set of commands which manipulate the schematic while keeping all connections intact. KiCad has those: You can drag a part or a wire, including rotating and mirroring the part, and keep all connections in place.

Almost, except for the part about "keeping all connections intact".  My overarching point is that they
aren't actually "connections" - they just look like connections.  If they were real connections you
would not, for example, require a "drag" (which maintains the faux connections) vs. a "move",
which just lets things reveal their true nature and fall apart.

Quote
(b) I kind of understand the preference that commands which break connections should not be available at all, or should be well-hidden in a way where you do not use them unintentionally. Kicad does not do that by default, it makes the connection-breaking Move, Rotate etc. commands easily available. But that is a very superficial change which you can make on the user level: Just assign exotic hotkeys (or none at all) to these commands you don't want. And I see the developers' point that other users will have different workflows and styles and want to use these commands regularly.

No, you're imagining something complicated and useless.  You have to be able to disconnect with
the same ease and consistency of use as you had when you connected.  Nothing hidden, nothing
asymmetric.  A "connect" function and a "disconnect" function, both doing exactly that, and retaining
the awareness of what each means, which is actual connectivity vs. faux connectivity.

Quote
(c) What I do not understand is your insistence that a "proper internal netlist" representation is the only path to happiness. That seems dogmatic. From a user perspective, why should I care how Kicad works internally -- as long as it offers (a), and for those so inclined enables (b)?

Internally to the software, I couldn't give a single shit in a million years how it's done - or what it's called. 
So there's no dogma to be found here, nor for that matter catmas or mousemas.  The schematic capture needs
to maintain some kind of internal database in order to keep track of valid connections, otherwise it has no
way of distinguishing the valid connections (the ones you made) from the faux connections and other errors it
needs to bring to your attention.  In this context, the conventional name for a database such as this is a "netlist".
If you'd prefer some other term, feel free to proffer it.  If it's a functional equivalent, I can't see having a problem
with it.  Let's not get hung up on the language if we're trying to come to agreement on functionality.

Quote
Thanks for clarifying!

Thanks for giving a damn and asking!

 

Online nctnico

  • Super Contributor
  • ***
  • Posts: 26910
  • Country: nl
    • NCT Developments
Re: Kicad - GUI is Horrific!
« Reply #319 on: May 04, 2023, 08:57:42 pm »
First I want to say I am happy with KiCAD and not complaining at all. But if this is a user survey (and everyone should have one of those regularly) I will say there is some merit to this thread. I don't want the schematic editor to change by alot but it really could handle connections in a more sane way. And without needing two edit modes or anything like that.

I have not checked the source code but I did check the save files. I don't like that wires seem to be indexed by coordinates. From a data science point of view this so wrong. Instead we should have points of interconnect defined with uuid and coordinates. A wire is then a connection between point uuid A and point uuid B or a pin uuid C.
Interesting. When I export an Orcad schematic to XML (as the native format is binary), the wires are children of a net instance.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline delfinom

  • Regular Contributor
  • *
  • Posts: 133
  • Country: 00
Re: Kicad - GUI is Horrific!
« Reply #320 on: May 05, 2023, 01:31:17 am »
First I want to say I am happy with KiCAD and not complaining at all. But if this is a user survey (and everyone should have one of those regularly) I will say there is some merit to this thread. I don't want the schematic editor to change by alot but it really could handle connections in a more sane way. And without needing two edit modes or anything like that.

I have not checked the source code but I did check the save files. I don't like that wires seem to be indexed by coordinates. From a data science point of view this so wrong. Instead we should have points of interconnect defined with uuid and coordinates. A wire is then a connection between point uuid A and point uuid B or a pin uuid C. That way the point can be moved but the connection never breaks unless intended. And we will not have unintended connections not even if some bug caused the coordinates to be the same.

It means the GUI code needs to be explicit about when to break connections. Yes we can still have "move" that breaks connections but the code behind would need to explicitly break those connections and not have it happen as a side effect. This would then enable the GUI to discover possible unintended (dis)connections and put up a warning dialog.

For example mirroring a symbol causing disconnects on one side and reconnect to random stuff on the other side is probably very rarely intended and should display a dialog to which the user can select ok/cancel. And if editing a symbol can not use "grap" semantics but needs to use "move" then I am ok with it causing disconnections but NOT that it might cause random connections.

TLDR I feel the data model is wrong and it causes errors. It could be fixed without changing the look and feel of the GUI.

FYI, Altium has the exact same data model. The wire is stored simply as endpoints.

EAGLE otoh does stored them under a net object but nets in EAGLE are definitely a different beast

Really what matters is how the app processes said netlist once loaded. It's possible to warn about breaks during a drag/change without storing the relations.
« Last Edit: May 05, 2023, 01:36:19 am by delfinom »
 

Online nctnico

  • Super Contributor
  • ***
  • Posts: 26910
  • Country: nl
    • NCT Developments
Re: Kicad - GUI is Horrific!
« Reply #321 on: May 05, 2023, 09:29:08 am »
Just thinking out loud: wouldn't it be more efficient to store the wires as being part of a net when the design is saved to a file? That way the software doesn't need to extract connections from the schematic every time it is loaded. A really large schematic may load faster that way.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Online tooki

  • Super Contributor
  • ***
  • Posts: 11563
  • Country: ch
Re: Kicad - GUI is Horrific!
« Reply #322 on: May 05, 2023, 12:26:51 pm »
You haven’t succeeded in coherently articulating what you actually want, never mind a cogent interaction model for it.

To the contrary, I've repeatedly offered a clear and concise model for exactly what schematic
capture should be doing.
You have repeatedly offered explanations, but they have not been clear and concise. That you think it was clear and concise doesn't mean it actually was. As others have pointed out, you have made contradictory explanations that have prevented people from having a clear idea of what you want. And your very rigid, yet unconventional, use of terminology has also made it harder to understand what you mean.


If you haven't read it, it's not because I haven't (coherently) articulated it. 
I have read it, which is why I know it's not been coherent.

1. When you connect something, it's connected.  Not only is it visually connected, but the connection is
entered (by the schematic capture) into the netlist it maintains.
Which it does.

2. When you disconnect something, it's disconnected, and that disconnection is similarly reflected in the
netlist - again, transparently to the user.
Which it does.

3. The software may not make or break connections as the result of moves, symbol edits, etc.  Only the user
can change connections.
So which manipulations do allow connections to be made or broken? It's a graphical editor, so the schematic diagram is how the user makes and breaks connections (that is, that is the mechanism for conveying user intent to the software).

If, as a result of moves, edits, etc., entities in the schematic intersect such that they
create the appearance of connections (that haven't been explicitly created by the user), they are flagged
as warnings to the user.
The connections created during those operations are real connections.

Saying "the appearance of connections that haven't been explicitly created by the user" implies that those connections aren't being made, but that it nonetheless appears that they are. But that's not the case, they are being made.

You can see #1-3 in action: in KiCad, click a wire in the schematic and the status bar tells you the net name (under "connection name").

Under no circumstances should the software permit faux connections, that is, elements of the drawing
that appear to visually represent connections yet aren't properly represented in the netlist.  This is what #3
is meant to prevent.  It's also apparently the only kind of "connection" presently supported by KiCAD.
"Faux" means fake, non-real. But they are real connections, and they are represented in the netlist.

So what you really mean, if I understand you correctly, is that you don't want unwanted connections to be created. Is this correct?

The challenge, from an interaction design standpoint, is knowing what is and isn't wanted. Sometimes it will be completely unambiguous, but other times, it will be fuzzier, and you have to design the software to handle every one of those cases in some way or another. And you want the decision logic to seem obvious to the user (or to be precise, you want it to feel transparent, like it just magically "knows" what you meant). This is really, really hard to get right: witness how people swear at MS Word for it doing "unwanted" things (because the intent inference logic didn't do what they wanted). And those moments are frustrating. What people don't realize is how often it gets it right, because those moments are transparent. Only when you go back to an early version that didn't have that particular logic do you realize how much it's been doing for you.

I understand well the problems of 1) unwanted connections being created during certain drag operations, rotates/flips, etc, and 2) of existing connections getting made/broken when editing a symbol after it's been placed and connected. (Altium, my primary EDA program, has both of these issues, so I am completely familiar with them, and the frustration they can cause.)

So how do we:
a) prevent that from happening,
b) differentiate between wanted and unwanted connection changes,
c) provide real-time feedback during the edit, so the user knows exactly what the result will be,
d) provide the user a real-time mechanism for influencing the end result, and
e) provide recovery in case the result isn't what the user wanted?

Let's look at problem 1 only.

For the purposes of this discussion, please accept as a given that the internal representation (which we can call the netlist) at any given moment is always coherent with the schematic as displayed. Let's also work from the assumption that schematic wires can cross, but that wires that cross without a dot are not connected to each other, so wires only connect to each other when a dot is shown.

One solution, which we know the KiCad team expressly does not want, is to have explicit connect/disconnect commands or modes. But my hunch is that you probably don't actually want that, either.

Another approach would be to only allow some operations to create connections, like adding wires. Some example questions:
Does only the end of a wire create a connection?
What about if some point along the wire lands on a pin? Does it depend on whether the wire is already connected to something else?
Does dropping a component onto a wire (such that a pin is on the wire) create a connection or not? What if it's just one pin? What if it's multiple? Does it depend on pin functions (input, output, power source, etc)?

For the sake of the next step, let's assume we've made decisions on all those things, and we have a coherent, happy mechanism for creating new connections and breaking existing ones. Now we move onto making changes to a schematic.
What happens when we drag a component, and it is now in a position that could add connections? Do you make the connections, or do you require the user to make them separately?
Does it depend on whether that component has any other connections yet? (That is, do you treat a "virgin" component differently from one that's already got a few connections? What are the criteria?) Does it depend on what kind of component it is? (For example, do we treat connectors differently, since there, the likelihood that the symbol layout actually corresponds to the physical layout is much higher?)
Do we handle it differently when flipping or rotating?

Bear in mind that I'm not asking you to answer these questions -- they're simply to give you an inkling of just how much thought has to go into program logic, of all the decisions the user interface designer has to make regarding how a program works. (I have worked in UX, so I am used to thinking about these types of questions.)


So let's look at another aspect.
What I think we all agree on is that what we don't want is for attached wires to drag along with the component and add additional connections of their own. I know I have been in the situation where, for example, I would have loved to be able to select one or more components and drag them to a totally different area of the schematic, and know that every single connection is exactly as I created it -- none added, none removed.

One idea would be to use the netlist as it existed when the drag operation began to perform real-time comparison with the "future netlist" that would result if you were to release the mouse now, and give feedback/warnings. But if you're doing that, you could just as well use that logic to avoid netlist changes to begin with, by using autorouter-like wire layout logic to move wires around more intelligently by avoiding short circuits between nets, by scooting (or meandering) other wires and parts out of the way. (If memory serves me correctly, I actually saw a video from a KiCad developer back in the version 4 or 5 days, showing an experimental schematic editor change that kinda worked this way. I was unable to find that post now.)
Other than being more computationally expensive than "dumber" logic, I don't see any real problems with this. (I don't know how much it would slow it down. But given how fast the push-and-shove logic is in PCB editors, I can't imagine it being problematic on modern hardware.) With flips and rotates, it could result in some visually really messy schematics, but as long as it scoots wires out of the way so that no unconnected wires land on pins, that remains a cosmetic problem only, since wires can be crossing each other without connecting.

For the situation I described a paragraph ago, that would work great.

How about if you want to make or break connections while dragging? Well, breaking is easy (at least to break all of them at once) since that's the "move" command. But suppose you have a typical dual-row header for an IDC connector, for ribbon cable where you want every other wire in the ribbon to be a ground. Well, that's connecting ground to every even pin, or every odd pin, i.e. all the pins on one side or the other of the symbol. You've wired up your signals, now you need to add the ground. Do you force the user to manually wire each one? Do you allow the user to draw a long-enough wire, then drag the connector symbol so that all of the pins on one side land on that wire? Does that connect them, or does the wire scoot out of the way to prevent adding new connections? Do we only scoot the wire away for pins that already have something on them? Do we treat GND differently from other already-connected pins? Do we treat connectors differently from other components? Do we have different modes that behave differently? Are those modes separate functions, or are they modes of one function (like how Altium's PCB editor lets you enable or disable the component reconnector while dragging a component)?


Could that possibly be clearer or more coherent?
Yes. Your terminology in particular is really problematic.

Quote
(a) I fully understand the desire for a set of commands which manipulate the schematic while keeping all connections intact. KiCad has those: You can drag a part or a wire, including rotating and mirroring the part, and keep all connections in place.

Almost, except for the part about "keeping all connections intact".  My overarching point is that they
aren't actually "connections" - they just look like connections.  If they were real connections you
would not, for example, require a "drag" (which maintains the faux connections) vs. a "move",
which just lets things reveal their true nature and fall apart.
You are operating from a dichotomy that does not exist. There aren't "real" and "faux" connections. Every connection you see is a real connection, they're the only thing that exists.

(As an aside, bear in mind that the "move" command is essentially just shorthand for "cut and paste": it's removing the symbol (and nothing else) from one spot and pasting it back in somewhere else, as opposed to relocating it in situ. I think "move" vs. "drag" is awful UI terminology, but many EDA programs use it.*  )

What I think you seem to want (or seem to think exists already) is some kind of authoritative "shadow netlist" that remembers your original intent, and then works to preserve that intent against future graphical modification. KiCad (like many other EDA programs) does not work this way: there is ONE netlist, which is always equivalent to the schematic as displayed. Your approach would require the program to know the intended connections, but then also track which of those have and have not been made in the schematic. That would require it to somehow be able to display those intended-but-unmade connections, and give you some way to edit them, since your intent can change, too.

I don't know for certain whether the dual-netlist approach is or isn't good. But what I am sure of is that "real" vs. "faux" is certainly not a sensible way to describe it, because both the "intent" netlist and the "actual connections" netlist would be equally real. Neither one has a "true[r] nature" than the other, they'd just be different aspects of the design.


A usability concern I'd have is whether it would add unnecessary complexity to the PCB layout process: we already have the "intent vs. actual connection" dichotomy in layout programs, in that the schematic captures the intent, and the PCB layout captures the embodiment of that intent. Real-time and batch DRC work to enforce that intent. You'd be adding a second layer of intent, resulting in "intended intent", "actual intent", and then embodiment.


Rather than this, I think that adding limited "smarts" to the schematic and symbol editors, giving them the ability to retain or transfer aspects of your original intent through certain types of edits, is probably smarter.




* I did the German-to-English translation of a substantial desktop application, which meant writing literally thousands of on-screen text strings, including hundreds of names for  menus, commands, buttons, etc, as well as of error and status messages and the like. It takes real work to come up with concise, memorable, self-explanatory and distinct names for commands. "Move" vs. "drag" totally fail the "distinct" and "self-explanatory" tests, because it is in no way obvious what the difference between them is. Never mind that "drag" shouldn't even be a command, since "drag" means "move the mouse with the button held down".)
« Last Edit: May 05, 2023, 12:29:23 pm by tooki »
 
The following users thanked this post: delfinom

Online tooki

  • Super Contributor
  • ***
  • Posts: 11563
  • Country: ch
Re: Kicad - GUI is Horrific!
« Reply #323 on: May 05, 2023, 12:32:52 pm »
No electrical engineer thinks in terms of "connectivity by moving things around".
But there has to be some way to tell the EDA software your intent. In a program with a GUI, moving things around and connecting them is a very established model for entering and editing your intent.
IMHO several peope brought up some good examples where moving/dragging things or changing symbols causes problems that may go unnoticed:

- Dragging a component can result in creating new connections that may not be wanted. Especially true when dragging a larger piece of circuitry. Personally I have always found this a tricky & cumbersome operation in Orcad as you need to keep a really close eye on what is going on exactly.

- Changing a symbol where pins end up on other locations could go unnoticed as well. Especially when working on a design in a team.

All in all this thread suddenly has made me feel I have been kind of making do with Orcad (for several decades already!) which simply leaves a lot of schematic integrity checking tasks to the user. To be honest I never really gave this much thought until now.
I'm fully aware of those issues, and understood that.

That doesn't change the fact that in graphical schematic capture software, the graphical representation is how we convey our intent to the software.
 

Online tooki

  • Super Contributor
  • ***
  • Posts: 11563
  • Country: ch
Re: Kicad - GUI is Horrific!
« Reply #324 on: May 05, 2023, 12:38:52 pm »
Just thinking out loud: wouldn't it be more efficient to store the wires as being part of a net when the design is saved to a file? That way the software doesn't need to extract connections from the schematic every time it is loaded. A really large schematic may load faster that way.
It's entirely possible that some programs do cache the compiled netlist. But I suspect that it's computationally so trivial that there isn't much point in doing so, and runs the risk of the schematic and netlist getting out of sync. If one makes the reasonable assumption that the schematic is only saved when in a stable state (i.e. all operations performed to it are atomic, and have been completed or rolled back), then opening it shouldn't require all that much computation.

My hunch is that caching the netlist wouldn't make any appreciable difference in performance, in that I suspect that other things (like loading symbols) probably take much longer, and wouldn't be affected by a cached netlist.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf