Das ConnectionObject ist mit Vorsicht zu genießen. U.a. weil Connection.Create() selbst zwar (mindestens) eine erzeugt, als Returnwert aber immer die ID eines NetSegments liefert ;-) Wenn du also unmittelbar nach dem Create() mit IsValid() abfragst, ob eine Valid oder eine Invalid-Connection entstanden ist, dann wird immer "Invalid" geliefert weil das Objekt selbst gar nicht initialisiert wurde.
Hintergrund dieser etwas verwirrenden Technik ist wohl das Wesen der Connections in E³: Es handelt sich hier nicht nur um gezeichnete Verbindungen sondern ganz allgemein um Verbindungen, die z.B. auch durch Drähte (egal ob sie schon im Plan verlegt sind oder noch nicht) realisiert sind. Die Unterscheidung zwischen "Valid" und "Invalid" bezieht sich lediglich auf die Eindeutigkeit einer Zweipunkt-Verbindung.
Beispiel: Angenommen, du hast von 4 Pins schon jeweils zwei durch eine normale Verbindungslinie verbunden. prj.GetConnectionIds() wird dann zwei Valid-Connections liefern (weil beide eindeutig sind). Verbindest du dann die beiden Verbindungslinien jeweils von Mitte zu Mitte (keine Wurzel-Verdrahtungen), das wird prj.GetConnectionIds() nur noch eine Invalid-Verbindung liefern weil innerhalb des einen Netzes keine eindeutigen Ziele mehr erkennbar sind.
Wenn du deine Verbindungslinien immer sauber mit Wurzeln zeichnest, dann werden auch in einem Netz, an dem mehrere Pins angeschlossen sind (Ketten- oder Ring-Verdrahtungen) eindeutige Zweipunkt-Verbindungen erkannt und entsprechend viele Valid-Connections geliefert.
Zurück zu deinem Problem: Du kannst jederzeit mit Connection.Create() neue Verbindungslinien erzeugen. Dabei entstehen aber möglicherweise mehrere richtige Connections oder es verschwinden sogar welche wie eben beschrieben weshalb diese Funktion selbst keine eindeutige Connection-ID liefert.
Connection.Create() erzeugt aber immer ein NetSegment, auf das du wie folgt zugreifen kannst:
Code:
nsid = Connection.Create(...)
ns.SetId nsid
Diese Netzsegmenten kann man dann auch mit ns.SetSignalName() ein Signal zuordnen. Das hat nichts mit der Eigenschaft "Valid" oder "Invalid" einer Connection zu tun. "Invalid" Connections können Signale tragen und "Valid" Connections können auch ohne Signal existieren.In diesem Zusammenhang aber noch ein Tipp: Es ist oft besser, den zu verbindenden Pins zuerst Signale zu verpassen weil dann bei der Erzeugung der Verbindungslinien automatisch schon die interne Kurzschluss-Prüfung aktiv ist. Pins mit verschiedenen (anwenderdefinierten) Signalen dürfen weder interaktiv noch per Script miteinander verbunden werden. Wenn deine Verbindungsliste, die du anhand deines Scripts wohl einliest also Fehler enthalten sollte (warum auch immer), so wird das automatisch erkannt und bei Connection.Create() abgelehnt (und liefert dann eine 0). Das Signal der Pins "fließt" bei erfolgreichem Connection.Create() natürlich in die Verbindung ein so dass ein ns.SetSignalName() nicht mehr notwendig ist.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP