wireviz / WireViz

Easily document cables and wiring harnesses.
GNU General Public License v3.0
4.32k stars 220 forks source link

feature: different gauges and different lengths in connections #268

Open daixtrose opened 2 years ago

daixtrose commented 2 years ago
kvid commented 2 years ago

This could be one way to show these values in a diagram: issue268 gv txt This is the manually edited Graphviz file, based on tutorial08.gv, that created the image above: issue268.gv.txt

Halfwalker commented 2 years ago

I would VERY much like to have different gauges per cable. For doing an automotive harness there are always multiple different wire sizes, and wire types within the harness. The view above would work very well.

If the different lengths facility above were to show up, I could definitely make use of that ...

kvid commented 2 years ago

The two feature requests in this issue are independent and can be implemented independently of each other - maybe in two different PRs, but @formatc1702 wants to finish and merge PR #251 before any other PR that change code for diagram nodes. It seems he has not been able to work much on this project the last months, so it might take a while.

Anyone of us are free to create a PR based on the current dev at any time, but it would involve rebasing and re-adapting the code again after #251 is merged before any such new feature can be merged.

kvid commented 2 years ago

I would also like to get more feed-back on how the new features should look like. The gauges feature is the easiest to implement, and should perhaps be done first. My suggestion above includes a summary of gauges for all wires just to the right of the wire count, but I have changed my mind, and I now suggest removing that because the same information is shown for each wire below.

Halfwalker commented 2 years ago

I kind of like the summary of gauges - it serves as a checkpoint. Handy to verify things, especially if you have a bundle of a LOT of wires. For example, the automotive wiring harness I'm working on has one section with 49 wires, and the main trunk with 86 wires.

Unfortunately, such large wire bundles get ... cumbersome. So I was thinking of another boolean flag for a Wire object compact_view. With that set to true, the wire object would not be expanded to show every wire inside, just the information blocks. All the wires entering would collapse down to a much smaller point, and exit the other side from a similar smaller point.

kvid commented 2 years ago

@Halfwalker wrote:

I kind of like the summary of gauges - it serves as a checkpoint. Handy to verify things, especially if you have a bundle of a LOT of wires. For example, the automotive wiring harness I'm working on has one section with 49 wires, and the main trunk with 86 wires.

Your view is valuable input to how this proposed feature should work. Maybe such a summary should be optional? I would guess there are also cases where a summary doesn't add any insight, and the user might then prefer to avoid bloating the bundle object with repeated information.

Unfortunately, such large wire bundles get ... cumbersome. So I was thinking of another boolean flag for a Wire object compact_view. With that set to true, the wire object would not be expanded to show every wire inside, just the information blocks. All the wires entering would collapse down to a much smaller point, and exit the other side from a similar smaller point.

Please elaborate. A sketch would also help. Is this new feature something similar to a bus of wires that are often viewed in other drawing tools as a thick line that splits into a set of thin wire lines at both ends? However, I suggest you create a new issue for this as it seems not direcly related to the original issue.

Halfwalker commented 2 years ago

Yup, definitely optional. A simple flag would work, and in fact I would both use it and not use it. Heh, I mean I would do one render with it turned off, for an overview type view of the harness, and one with it turned on for the full detail to be used while building or verifying the harness.

The same would apply for the compact_view flag mentioned above. I think conceptually the view could be considered as a virtual junction point for all the wires coming in from a connector. With the flag off, each wire goes into the wire object individually, as usual image Whereas with the flag ON, each wire would go into the wire object to a single point, much like the blue wires for the ferrule-crimp here image Hrm, we could even get fancy ... Instead of a single point for every wire in the bundle, perhaps have a group-membership property for each wire. For example, all the power and GND wires could go into a POWER group, left side of engine go into a LEFT group and so on. Each group would have it's own single point in the wire object.

That group property could be specified at either the connector or the cable object in the yml file. I think at the connector is probably better, though perhaps both ? With one taking priority if both are defined.

connectors:
  EA2:
    hide_disconnected_pins: true
    pincount: 5
    pincolors: [BK, BKRD, IV, WH, BKRD]
    pinlabels: [Starter relay pin 5, EFI main relay OUT pin 5, NC, 7.5A Alt-S fuse, EFI relays]
    groups: [RELAYS, RELAYS, , POWER, RELAYS]
    pn: 90980-11413
    image:
      src: Supra_EA2.png

cables:
  Fusebox-cabin1: &template_main
    gauge: 20
    length: 2
    colors: [WHGN, GY, BU, BKRD, VTWH, GNYE, BK]
    groups: [SENSOR, SENSOR, POWER, POWER, RELAYS, RELAYS, POWER]

If this all makes sense and you think it worth doing, then I'll create a new issue

martinrieder commented 4 months ago

@Halfwalker, have a look at my comment on the suggested twisting of wires: https://github.com/wireviz/WireViz/issues/3#issuecomment-2109969132

The compact_view that you suggested could be done in the same fashion for either cables or connectors (and splices). They can both be hidden and shrunk using the fixed size tweak.

If you are to use the grouping on independend nodes (such as "virtual splices") then simply put them into a cluster. I would like to mention that Graphviz node attributes also offer a kind of grouping that would also impact edge layouting. It may be the better option, but I have not tried this yet.

I could think of use cases that combine both of these ideas. You could enforce some grouping through hidden connectors or hidden wire bundles. Additionally put them into a cluster, in order to align them in the layout. This really helps to get some nice looking results.

It would of course be nice to have this kind of grouping implemented, which needs to be discussed in a separate issue.

kvid commented 2 months ago

@akikinho wrote in #378 about different lengths and gauges per wire:

I really hope in the future update the team implements it as it will be really helpful.

In my opinion, both (length: <int/float>[ ])and (gauge: <int/float/str>) should be of type List?

Originally posted by @akikinho in https://github.com/wireviz/WireViz/issues/378#issuecomment-2158594797

martinrieder commented 2 months ago

It seems that the implementation of both, wire gauge and length is becoming too complex. We should rather split up this issue into separate ones.

What needs to be discussed though, is how the suggested "grouping" would relate to the above. It might need to be implemented first if the other features depend on it. Or should it also be treated as an independent issue?

kvid commented 2 months ago

@martinrieder wrote:

It seems that the implementation of both, wire gauge and length is becoming too complex. We should rather split up this issue into separate ones.

I agree. The three (or four) issues you list below seems quite independent of each other.

  • Individual wire gauges

As I've written earlier, this is probably the easiest to implement, by optionally accepting a list value for the existing gauge attribute, but implementing inserting the values for each wire should wait until #251 is merged into dev, or be prepared to rework the HTML generating code before a merge-in after #251.

  • Individual wire lengths

This requires some coordination with #306 and a new ‎NumberAndUnit‎ type added in #251, and perhaps with some ideas for #296.

We probably need to define a CableLength dataclass with a base length plus attributes for left and right ends accepting lists of the wire specific values. All the different values might optionally have different tolerances and possibly units (or require all values to use the same unit as the base length). We then need to define concise rules on how to map string values of length with simplified syntax into the dataclass attributes, so we still can support space separated base length and unit (as today) and most of the suggestions in #306, so only the advanced use cases need to specify such CableLength attributes individually.

  • "compact_view"

As I've written earlier, this is clearly a separate issue, and it might even be in conflict with the others, as it's not clear to me how to render the information that differ between wires with such a feature activated.

What needs to be discussed though, is how the suggested "grouping" would relate to the above. It might need to be implemented first if the other features depend on it. Or should it also be treated as an independent issue?

It depends on how many new and existing features should be affected by such a grouping. There are many features that need some kind of grouping of wires:

It has also been discussed if cables/bundles should have been defined as a hierarchical structure that could contain groups of other cable/bundles. That would probably be a major rewrite of the basic data structure, but it could solve many of the grouping needs. Update: It might also be combined with the designator dot syntax to allow both named and unnamed groups and multiple instances of the same group.

Grouping of pins in a connector might also be a future need, so it'll be nice to have in mind that a grouping feature might later become common for both connectors and cables.

martinrieder commented 2 months ago

Note that the following suggestion would be in conflict with strict hierarchical structures:

YAML itself is well suited for hierarchical structures, but keep in mind that it limits flexibility when they are strictly enforced. WireViz already breaks the hierarchy by employing designators to link connectors and wires though connection sets. This non-hierarchical feature enabled some interesting additions like auto-generation and arrows.