| |
| ALIBRE V28 VERÖFFENTLICHT, eine Pressemitteilung
|
Autor
|
Thema: Repository über API ansprechen (1136 mal gelesen)
|
Karl-hans Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.04.2007
|
erstellt am: 26. Mrz. 2008 16:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, kann mir einer von euch sagen, wie ich via API ein Bauteil aus einem Repository aufrufen kann? Es soll anschliessend in ein Assembly eingefügt werden. Vom "normalen" Dateisystem klappt das recht gut. Ich habe aber absolut keine Idee, wie der Aufruf und die Initialisierung aussehen muss. Gruss und Danke im voraus Kalle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Schrödter Moderator Konstruktion & Support
Beiträge: 2287 Registriert: 17.02.2006 -> Windows 11- 64 bit -> i9 / Nvidia RTX -> Alibre-Design V27 -> Moi3D V5 -> KeyShot V11
|
erstellt am: 26. Mrz. 2008 16:49 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
Hallo Kalle, Willkommen im Alibre Forum. Starthilfe - Repository Daten vom Root Objekt auslesen - Repository Ordner aus dem Repository Objekt auslesen - Folderitems aus dem Repostitory Ordner Objekt auslesen - Beim gewünschtem Folderitem die Methode open() aufrufen Gruß Ralf ------------------ www.alibre.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karl-hans Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.04.2007
|
erstellt am: 27. Mrz. 2008 12:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, erst einmal Danke für deine schnelle Antwort. Habe einige Probleme bei der Umsetzung. Ich denke, man beginnt mit: Dim m_objADHook As AlibreX.AutomationHook m_objADHook = GetObject(, "AlibreX.AutomationHook") Dim m_objADRoot As IADRoot m_objADRoot = m_objADHook.Root nun kann man weiter gehen mit:?? Dim Test As Object Test = m_objADRoot.GetRepositoryByName("Testlibrary") ??? ...und da verliessen sie ihn.
Hast du zufällig ein Code-Ausschnitt, aus dem ich den Rest ersehen kann? Und noch eine Frage: Du schreibst: - Beim gewünschten Folderitem die Methode open() aufrufen Gibt es eine Möglichkeit, das Repository zu durchsuchen? Etwas zum Hintergrund meiner Frage:
Ich arbeite als PCB-Designer. Ich habe ein Programm geschrieben, das sich Via API mit dem Pads-Layoutsystem (Pads)und Alibre verbindet. Im Layout-Tool ist bei jedem Bauteil in einem Attribut der Name des 3D-Modells hinterlegt. Ich lese den Bauteilnamen, die X und Y-Position, die Rotation und den Layer, aus dem das Bauteil sitzt (Top- oder Bottomlage) aus und erzeuge daraus ein 3D-Abbild der Leiterplatte mit allen Bauteilen. Die einzelnen Parts sind im Moment in einer Verzeichnisstruktur auf einem Netzlaufwerk abgelegt. Ich habe eine DLL geschrieben, die diese Verzeichnisstruktur nach den entsprechenden Bauteilen durchsucht. Der Nachteil dieser Methode ist, das ein Bauteil, wenn es in der Struktur verschoben wird oder der Name ändert, beim Aufruf eines bestehenden Assemblys eine Fehlermeldung bringt. Darum will ich die Bauteile in einem Repository unterbringen. Dies hätte wieder eine Verzeichnisstruktur für Wiederstände, Kondensatoren,... Dabei fällt mir noch eine weiter Frage ein:
Wie kann man beim Alibre die genaue Position eines Parts in einem Assembly auslesen? (Planung einer IDF-Aehnlichen Funktion zum zurücklesen von Bauteilkoordinaten von Alibre ins Layout-Tool) Gruss und Danke Kalle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
niedi Mitglied
Beiträge: 102 Registriert: 03.04.2003 Lenovo T61p WinXP prof.<P>Alibre V11.1 Moi3D Hypershot Web
|
erstellt am: 27. Mrz. 2008 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
Hallo Kalle, Zitat: ...Ich habe ein Programm geschrieben...
Bist du dir da sicher? Ich möchte dir nicht zu nahe treten, aber so wie es sich anhört kennst du dich mit dll's aus, stellst Verbindungen zu anderen CAD/PCB Systemen her und hast auch schon Verzeichnisstrukturen ausgelesen. Da sollte es doch eine Kleinigkeit sein, sich mit dem Repo von Alibre zu verbinden und es zu durchsuchen. Dein Ansatz ist gut. Geh doch einfach weiter. Ralf hat es dir doch schon beschrieben. Die ersten Zeilen hast du doch schon geschafft (oder etwa Copy&Paste ). Zum Thema Repo durschsuchen -> Stichwort Rekursion. Grüßle Robert PS. Die API ist sicherlich schlecht beschrieben, aber deine Fragen sind Grundlagenfragen der Programmierung bzw. der OOP. ------------------ Es gibt 10 Arten von Menschen. Diejenigen, welche Binärzahlen verstehen und die anderen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Schrödter Moderator Konstruktion & Support
Beiträge: 2287 Registriert: 17.02.2006 -> Windows 11- 64 bit -> i9 / Nvidia RTX -> Alibre-Design V27 -> Moi3D V5 -> KeyShot V11
|
erstellt am: 27. Mrz. 2008 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
[Edit] Sorry, Robert Du warst schneller [Edit] Hallo Kalle, Du hast unbewusst ins "Schwarze" getroffen. Es gibt mehrere Alibre Anwender, die auch eine IDF Schnittstellenfunktionalität suchen... Das Repo ist eine tolle Sache, aber für Alibre Anwender, die auch andere Daten verwalten wollen oder gemeinsam im Netzwerk mit diesen Daten arbeiten wollen -> wenig geeignet oder nur mit der "Serverlösung". In der V11 wird es hier einige Änderungen geben. - API -.NET ( MS JVM fliegt endlich raus) Weitere Infos sind noch "confidential", bitte um Verständnis. Deshalb verschwende bitte nicht Deine Zeit mit der vorhandenen API. Wenn es für Dich möglich ist, einen zweiten Rechner für die V11 Alpha freizuschaufeln, melde Dich bitte unbedingt als Tester an. Als Tester hast Du dann Zugriff auf das V11 Forum und kannst uns unterstützen, den Cowboys deutsche "CAD Anforderungen" näherzubringen bzw. das IDF Format zu implementieren. Beste Grüße Ralf ------------------ www.alibre.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
niedi Mitglied
Beiträge: 102 Registriert: 03.04.2003 Lenovo T61p WinXP prof.<P>Alibre V11.1 Moi3D Hypershot Web
|
erstellt am: 27. Mrz. 2008 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
|
Karl-hans Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.04.2007
|
erstellt am: 27. Mrz. 2008 14:17 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, erst einmal vielen Dank für eure Antworten. Ich habe über ein Jahr meiner Freizeit geopfert, um das Programm zu schreiben. Für ganz ungläubige: Siehe Anhang, ältere Version des Programms Sicher nicht immer gut programmiert, aber ich arbeite als Layouter und nicht als Programmierer. Und es ist ein leichtes, für eine gut Dokumentierte API ein Programm zu schreiben. (VB2005 Express) Für die API von Pads gibt es eine nahezu perfekte Dukomentation für VBA, VB, C,.. Aber die Dokumentation von Alibre ist unter aller Sau. Und ich wäre für ein paar Code-Ausschnitte echt Dankbar. Gruss und Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
niedi Mitglied
Beiträge: 102 Registriert: 03.04.2003 Lenovo T61p WinXP prof.<P>Alibre V11.1 Moi3D Hypershot Web
|
erstellt am: 27. Mrz. 2008 14:26 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
Hallo Kalle, ich weiß was es heißt, sich durch die Alibre API zu suchen . Zufällig habe ich genau den Codeschnipsel den du brauchst (wollte vor einer Weile genau das gleiche programmieren wie du, nur für ein anderes PCB System). Repo öffnen bzw. durchsuchen gehörte mit dazu. Leider kann ich es erst heute Abend reinstellen. Ich habe meinen Stick nicht hier. Grüßle Robert ------------------ Es gibt 10 Arten von Menschen. Diejenigen, welche Binärzahlen verstehen und die anderen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Schrödter Moderator Konstruktion & Support
Beiträge: 2287 Registriert: 17.02.2006 -> Windows 11- 64 bit -> i9 / Nvidia RTX -> Alibre-Design V27 -> Moi3D V5 -> KeyShot V11
|
erstellt am: 27. Mrz. 2008 15:09 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
|
Karl-hans Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.04.2007
|
erstellt am: 27. Mrz. 2008 16:04 <-- editieren / zitieren --> Unities abgeben:
|
niedi Mitglied
Beiträge: 102 Registriert: 03.04.2003 Lenovo T61p WinXP prof.<P>Alibre V11.1 Moi3D Hypershot Web
|
erstellt am: 27. Mrz. 2008 21:54 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
Hallo Kalle, leider finde ich meinen Stick mit dem Projekt nicht. Ich habe mal versucht, die Verbindung zum Repository herzustellen. Der folgende Code sollte sämtliche Namen der vorhanden Repos anzeigen. Bitte erstelle ein neues Projekt füge dann den Code ein. Code: Imports AlibreXPublic Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try Dim Hook As AutomationHook Hook = System.Runtime.InteropServices.Marshal.GetActiveObject("AlibreX.AutomationHook") Dim Root As IADRoot Root = Hook.Root Hook = Nothing Dim myRepositoryList As IADRepositories = Root.Repositories For Each Repo As IADRepository In myRepositoryList MessageBox.Show(Repo.Name) Next Catch ex As Exception MessageBox.Show("Alibre ist nicht gestartet. Die Anwendung wird beendet") Application.Exit() End Try End Sub End Class
Der Code ist ungetestet und sollte daher nicht mit einem produktiven Repo getestet werden!! Grüßle Robert
------------------ Es gibt 10 Arten von Menschen. Diejenigen, welche Binärzahlen verstehen und die anderen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
niedi Mitglied
Beiträge: 102 Registriert: 03.04.2003 Lenovo T61p WinXP prof.<P>Alibre V11.1 Moi3D Hypershot Web
|
erstellt am: 31. Mrz. 2008 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für Karl-hans
Hallo Kalle, ich weiß nicht, ob Du es noch benötigst. Dennoch ist hier eine Anleitung zum durchsuchen des Repos per API und VB2005. 1. Erstelle ein neues Projekt 2. Setze eine Textbox mit dem Namen "tbFileToSearch". 3. Setze einen Button mit dem Namen "btSearchFile". 4. Setze einen Button mit dem Namen "btShowRepos". 5. Setze ein Label mit dem Namen "lblFolder". füge nun folgenden Code ein:
Code: Imports AlibreXPublic Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub btShowRepos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btShowRepos.Click Me.ShowRepos() End Sub Private Sub btSearchFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSearchFile.Click Try Dim Hook As AutomationHook = System.Runtime.InteropServices.Marshal.GetActiveObject("AlibreX.AutomationHook") Dim Root As IADRoot = Hook.Root Dim myRepositoryList As IADRepositories = Root.Repositories Dim myFolder As IADFolder For Each Repo As IADRepository In myRepositoryList myFolder = Repo.RootFolder Me.SearchFile(myFolder, Me.tbFileToSearch.Text) Next Catch ex As Exception MessageBox.Show("Alibre Design ist nicht geöffnet") End Try
End Sub
Private Sub ShowRepos() Try Dim Hook As AutomationHook = System.Runtime.InteropServices.Marshal.GetActiveObject("AlibreX.AutomationHook") Dim Root As IADRoot = Hook.Root Dim myRepositoryList As IADRepositories = Root.Repositories
For Each Repo As IADRepository In myRepositoryList MessageBox.Show(Repo.Name) Next Catch ex As Exception MessageBox.Show("Alibre Design ist nicht geöffnet") End Try End Sub Private Sub SearchFile(ByVal mySearchIn As IADFolder, ByVal sToSearch As String) Me.lblFolder.Text = mySearchIn.Name Me.lblFolder.Refresh() For Each myFolder As IADFolder In mySearchIn.SubFolders For Each myFolderItem As IADFolderItem In myFolder.FolderItems If myFolderItem.Name = sToSearch Then MessageBox.Show(myFolderItem.Reference) End If Next If myFolder.SubFolders.Count > 0 Then Me.SearchFile(myFolder, sToSearch) End If Next End Sub End Class
Und jetzt eine kurze Erklärung:
Sobald Du auf die Schaltfläche "btSearchFile" klickst, werden sämtliche Repos gesucht und dann für jedes Repo die Prozedur "SearchFile()" aufgerufen. Dieser Prozedur wird der Name des Repos und der zu suchende Dateiname übergeben (text aus Textbox "tbFileToSearch"). Sie gibt als erstes den Ordnernamen im Label aus.
Code: Me.lblFolder.Text = mySearchIn.Name Me.lblFolder.Refresh()
Danach wird jeder Unterordner nach Inhalt durchsucht und gefundener Inhalt mit dem, zu suchenden Namen verglichen. Ist ein Treffer vorhanden, so meldet dies eine MessageBox.
Jetzt wird der Ordner auf Unterordner geprüft.
Code: If myFolder.SubFolders.Count > 0 Then Me.SearchFile(myFolder, sToSearch) End If
Ist einer vorhanden, so ruft sich die Funktion wieder selbst auf (Rekursion). Dabei wird ihr der aktuelle Ordner und die zu suchende Datei übergeben. Grüßle Robert
------------------ Es gibt 10 Arten von Menschen. Diejenigen, welche Binärzahlen verstehen und die anderen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karl-hans Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.04.2007
|
erstellt am: 31. Mrz. 2008 21:10 <-- editieren / zitieren --> Unities abgeben:
|