Autor
|
Thema: Schleife VBScript (1755 mal gelesen)
|
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 10:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Ich habe per Skript alle Bauteile auf meine Plan gefunden. Nun möchte ich nur die Bauteile -I1 bis -In per Schleife durchlaufen und ihre Position speichern. Kann mir jemand sagen wie ich das hinbekomme. Ich kann mir nicht ganz vorstellen wie ich das z.B. mit einer For-Schleife realisieren soll. Meine Lösung ist noch recht unschön. Bis jetzt mache ich es so: Prj.GetAllDeviceIds devIds 'alle Bauteile auf dem Plan for d = 1 to Ubound(devIds) Dev.SetId devIds(d) If dev.getname = "-I1" Then ' Gehe jedes Bauteil mit IF durch End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 10:11 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
|
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 10:25 <-- editieren / zitieren --> Unities abgeben:
|
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 10:26 <-- editieren / zitieren --> Unities abgeben:
Ist es auch möglich nun von den Bauteilen die Position in einem Array zu speichern? Also am besten Name mit der dazu gehörigen Position im Array speichern [Diese Nachricht wurde von Daudi2010 am 16. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 10:45 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
Ja klar geht das, da geht zumindest einiges. Im .Net würde ich das allerdings per kaskadiertem Dictionary lösen. Das geht in VBScript allerdings leider nicht... Was genau meinst du übrigens mit Position? Die Position des Symbols auf dem Blatt? Wenn ja, dann musst erstmal alle relevanten Bauteile auslesen und in ein Array schreiben. Danach alle Symbole (Blatt oder Projekt?) auslesen und prüfen, ob das Symbol zu einem deiner Bauteile gehört, wenn ja, dann davon die Position mit dem entsprechenden Bauteilnamen und evtl weiteren Informationen abspeichern. Das kann ich dir aber nicht mal eben alles blind bzw. ohne Musterbeispiel schreiben. Das ist sicherlich kein Akt, aber mal eben so auch nicht gemacht. Was genau hast du denn vor? ...denn das wäre schon wichtig zu wissen, wie die Daten zur Verfügung stehen sollen. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 10:51 <-- editieren / zitieren --> Unities abgeben:
Also die -I1 bis -In Bauteile sollen alle im Array mit ihrer Position (x,y Werte auf dem Blatt, Symbolposition auf dem Blatt.) gespeichert werden damit an ihre Position falls nötig andere Bauteile/Symbole gesetzt werden können. So, dass man dann im Array nachschauen kann wo ein gewisses Bauteil auf dem Blatt plaziert war um dort dann ein anderes hinzusetzen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
Zitat: Original erstellt von Daudi2010: So, dass man dann im Array nachschauen kann wo ein gewisses Bauteil auf dem Blatt plaziert war um dort dann ein anderes hinzusetzen.
Da bist du aber fehlgeleitet. Das Objektmodell von E3 sieht vor, dass nicht das Bauteil platziert ist, sondern das Symbol. Das Symbol wiederum referenziert dann zum Bauteil. Demnach musst du die Symbole abfragen. Als was soll die Liste denn gespeichert werden? Oder geht das Programm dann entsprechend weiter? ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 11:25 <-- editieren / zitieren --> Unities abgeben:
Also Anbei hab ich nun mal ein Bild. Da sieht man die Eingänge ED-Flex1 bis ED-Flex6. Oben sieht man dann die Symbole(Bauteile?) -I1 bis -I6. Nun soll die Position mit Namen von -I1 bis -I6 in einem Array gespeichert werden. Dann soll der Benutzer auswählen können ob er die Informationseingabe Manuell oder per XML Datei macht. Danach öffnet sich ein Tree in dem man entweder nach XML Eingabe kontrollieren kann ob alles stimmt oder manuell anklicken kann an welchem Eingang denn welches Bauteil/Symbol gesetzt wird. Bis jetzt habe ich ja nur die Bauteilnamen komm ich von denen auf die Symbole damit ich die austauschen kann ? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
Hallo, mehr kann ich nun wirklich nicht für dich tun... Code:
Dim E3Sht, E3Dev, E3SymDim dicSymbols, liSymbols Dim intSymIds(), intSymId, intDevId, intConId, intSymbolKeys Dim strDevName, strSymName, strSymRot, strSymX, strSymY, strSymGrid Dim arrTest, strDevNameTest, strSymRotTest, strSymXTest, strSymYTest, strSymGridTest Set E3Prj = WScript.CreateJobObject Set E3Sht = E3Prj.CreateSheetObject Set E3Dev = E3Prj.CreateDeviceObject Set E3Sym = E3Prj.CreateSymbolObject
Set dicSymbols = CreateObject("Scripting.Dictionary") Set liSymbols = CreateObject("System.Collections.ArrayList") E3Sht.SetId(E3Prj.GetActiveSheetId) E3Sht.GetSymbolIds(intSymIds) 'prüfe alle Symbole auf die Zugehörigkeit eine Bauteils mit -I for each intSymId in intSymIds E3Dev.SetId intSymId strDevName = E3Dev.getname If instr(strDevName,"-I") = 1 Then liSymbols.Add intSymId 'erstelle Liste mit entsprechenden Symbolid´s End If next 'lese Positionen etc. von jedem Symbol for each intSymId in liSymbols E3Sym.SetID intSymId E3Sym.GetSchemaLocation strSymX, strSymY, strSymGrid strSymRot = E3Sym.GetRotation Dim Arr Arr = Array(strSymX,strSymY,strSymRot,strSymGrid) dicSymbols.add intSymId, Arr 'erstelle Dictionary mit entsprechenden Daten next 'Ausgabe der Daten in das Infofenster im E3 intSymbolKeys = dicSymbols.Keys() for each intSymId in intSymbolKeys arrTest = dicSymbols.Item(intSymId) E3Dev.SetId intSymId strDevNameTest = E3Dev.getname WScript.PutMessage strDevNameTest strSymXTest = arrTest(0) WScript.PutMessage strSymXTest strSymYTest = arrTest(1) WScript.PutMessage strSymYTest strSymRotTest = arrTest(2) WScript.PutMessage strSymRotTest strSymGridTest = arrTest(3) WScript.PutMessage strSymGridTest next
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
[Diese Nachricht wurde von RSchulz am 16. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 13:19 <-- editieren / zitieren --> Unities abgeben:
Oh vielen Dank so viel hab ich jetzt auch gar nicht erwartet ich wäre schon über Tipps dankbar gewesen. Leider bekomme ich aber eine Fehlermeldung: Laufzeitfehler in Microsoft VBScript: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.: 'WScript.CreateJobObject' Ah ok wenn ich es direkt im E3 starte funktioniert es! Danke [Diese Nachricht wurde von Daudi2010 am 16. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 13:26 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
|
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 13:29 <-- editieren / zitieren --> Unities abgeben:
|
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
|
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 13:35 <-- editieren / zitieren --> Unities abgeben:
|
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
Hier mal ein Beispiel aus dem .Net: Code:
Public Declare Function GetForegroundWindow Lib "user32.dll" () As Int32 Public Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Int32, ByRef lpdwProcessId As Int32) As Int32 Public E3App As E3.e3Application Public E3Prj As E3.e3Job Public DebugMode As Boolean = False Public Function GetE3Components() As Boolean '------------------------------------------------------------------------------- ' gets the active or starts a session of E³Series with an opened project '------------------------------------------------------------------------------- ' >>> Return Value <<< ' True >>> Session connected ' False >>> an error occurs '------------------------------------------------------------------------------- Dim E3Dis As CT.Dispatcher Dim ActProc As Process Dim WindowsTitle As String Try E3App = CreateObject("CT.Application") If DebugMode = True Then E3Prj = E3App.CreateJobObject Else E3Dis = CreateObject("CT.Dispatcher") Application.DoEvents() ActProc = GetActiveAppProcess() WindowsTitle = ActProc.MainWindowTitle If InStr(WindowsTitle, "E³.cable") > 0 Then E3App = E3Dis.GetE3ByProcessId(ActProc.Id) Application.DoEvents() E3Prj = E3App.CreateJobObject Else MsgBox("Der E3-Prozess wurde nicht erkannt oder ist nicht aktiv. Bitte wenden Sie sich an Ihren Systemadministrator. (Schulz 387)", MsgBoxStyle.Information) E3Dis = Nothing Return False End If E3Dis = Nothing End If Return True Catch ex As Exception E3Prj = Nothing E3Dis = Nothing E3App = Nothing MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in Functions: GetE3Components") Return False End Try End Function Public Function GetActiveAppProcess() As Process
'------------------------------------------------------------------------------- ' Getting handle of foreground window (the active application) ' and returning it to activeProcessHandle '------------------------------------------------------------------------------- Dim activeProcessID As IntPtr Try GetWindowThreadProcessId(GetForegroundWindow(), activeProcessID) Return Process.GetProcessById(activeProcessID) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in Functions: GetActiveAppProcess") Return Nothing End Try End Function
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 14:10 <-- editieren / zitieren --> Unities abgeben:
ok das werde ich mir auch mal näher anschauen. Ich hab da noch eine andere Frage. Bis jetzt bin ich ja immer von einem Symbol zu einem anderen indem ich geschaut habe was denn am anderen Ende verbunden ist. Bei meinen -I1 bis -In ist es aber nun so dass die nicht elektrisch verbunden ist. Ist es möglich über den X-Wert den ich jetzt ja habe mich bis runter zu dem ED-Flex Eingang zu hangeln und dabei alle Bauteile auf dem Weg herauszufinden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 16. Okt. 2014 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für Daudi2010
|
Daudi2010 Mitglied
Beiträge: 52 Registriert: 16.05.2014 E3.Series 2014
|
erstellt am: 16. Okt. 2014 14:24 <-- editieren / zitieren --> Unities abgeben:
ok ja sowas ähnliches hab ich ja schon mal gemacht, nur waren da alle elektronisch verbunden und da bin ich ja dann eben über Netsegment, getconnectedpin usw gegangen. . Denke wenn ich mal den ersten Stecker der an dem Symbol ist habe ist der Rest nicht mehr ganz so schwer. Woher bekommt man denn tiefere Einblicke in das Objektmodell von E3 ? Ich muss ja noch einiges programmieren und habe leider nicht mehr allzuviel Zeit [Diese Nachricht wurde von Daudi2010 am 16. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |