| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für EPLAN |
Autor
|
Thema: API Fenstermakros einfügen (662 / mal gelesen)
|
Götschma Mitglied Automatiker
Beiträge: 10 Registriert: 29.05.2015 EPLAN Electric P8 - Select Version: 2023 Update 4 Expertenmenü
|
erstellt am: 22. Sep. 2023 08:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich bin dabei mich in die API Schnittstelle von Eplan einzuarbeiten und versuche aktuell ein Addin zu erstellen. Mit einer Action möchte ich ein Seitenmakro in ein ausgewähltes Projekt einfügen (nur 1 Seite im Seitenmakro) und anschliessend auf dieser Seite mehrere Fenstermakros platzieren. Das Einfügen des Seitenmakros funktioniert soweit, jedoch werden die Fenstermakros nicht darin platziert. Es wird auch keine Fehlermeldung ausgegeben die mir verraten könnte wo das Problem liegt... Kann mir eventuell jemand weiterhelfen? Hier ist die betreffende Klasse: using Eplan.EplApi.Base; using Eplan.EplApi.DataModel; using Eplan.EplApi.DataModel.MasterData; using Eplan.EplApi.HEServices; namespace Eplan.EplAddin.InsertWindowMacros { public class InsertMultipleMacros { private const string emp = @"C:\TEMP\Testmakros\Seite.emp"; private const string ema1 = @"C:\TEMP\Testmakros\Fenster1.ema"; private const string ema2 = @"C:\TEMP\Testmakros\Fenster2.ema"; private const string ema3 = @"C:\TEMP\Testmakros\Fenster3.ema"; private const string doctype = "EBH"; private const string pagename = "1"; public void Main() { //get selected Project SelectionSet selectionSet = new SelectionSet(); Project project = selectionSet.GetCurrentProject(false); if (project != null) { //get page & insert pagemacro Page page = InsertPage(project); //insert windowmacros (page, macro, x-pos, y-pos) InsertWindow(page, ema1, 20.0, 20.0); InsertWindow(page, ema2, 40.0, 20.0); InsertWindow(page, ema3, 60.0, 20.0); } } private Page InsertPage(Project prj) { PageMacro pageMacro = new PageMacro(); pageMacro.Open(emp, prj); Page page = new Page(); foreach (Page p in pageMacro.Pages) { PagePropertyList ppl = p.NameParts; ppl.DESIGNATION_DOCTYPE = doctype; ppl.PAGE_COUNTER = pagename; p.NameParts = ppl; page = p; break; } //insert pagemacro Insert insert = new Insert(); insert.PageMacro(pageMacro, prj, null, PageMacro.Enums.NumerationMode.Number); return page; } private void InsertWindow(Page page, string macro, double posX, double posY) { PointD pointD = new PointD { //Offset tbd. X = posX, Y = posY }; //insert windowmacro Insert insert = new Insert(); insert.WindowMacro(macro, 0, page, pointD, Insert.MoveKind.Absolute); } } } In einem späteren Schritt möchte ich via API versuchen an Platzhalterobjekten Wertesätze zuzuordnen. Sollte jemand dazu ein paar Tipps haben, wäre ich natürlich sehr dankbar.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
Beiträge: 101 Registriert: 26.11.2020
|
erstellt am: 24. Sep. 2023 19:48 <-- editieren / zitieren --> Unities abgeben: Nur für Götschma
Hey, Willkommen in der Welt der API, ich hab zu dem Thema schon ein paar Videos gemacht, wie man Makros und Platzhalterobjekte schön und gut manipulieren kann, kannst Dir ja anschauen, vielleicht bringt's dir ein paar Ideen! Vom reinen Durchlesen kann ich jetzt keinen gravierenden Logikfehler finden ausser: deine Variante: Insert insert = new Insert(); insert.PageMacro(pageMacro, prj, null, PageMacro.Enums.NumerationMode.Number); meine Variante: Insert mInsert = new Insert(); mInsert.PageMacro(oPageMacro, null, prj, true, PageMacro.Enums.NumerationMode.Number); Ich glaube, Du hast die Parameter verdreht?! Viel Spaß weiterhin und "möge die Macht der API mit dir sein" ;-)!! ------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Götschma Mitglied Automatiker
Beiträge: 10 Registriert: 29.05.2015 EPLAN Electric P8 - Select Version: 2023 Update 4 Expertenmenü
|
erstellt am: 25. Sep. 2023 11:16 <-- editieren / zitieren --> Unities abgeben:
Hallo und Danke für deine Antwort. Wo finde ich diese Videos? Ich denke die könnten sicher hilfreich sein. Meine Variante für die insert.PageMacro Methode funktioniert soweit eigentlich. Das Seitenmakro wird eingefügt, jedoch werden die Fenstermakros anschliessend nicht eingefügt. Die insert.PageMacro Methode wird im API-Hilfesystem mit den folgenden Syntax beschrieben: 1. PageMacro(PageMacro,Project,Boolean[],NumerationMode) <-- Meine Variante 2. PageMacro(String,Page,Project,Boolean,NumerationMode) 3. PageMacro(String,Page,Project,Boolean) 4. PageMacro(PageMacro,Page,Project,Boolean,NumerationMode) 5. PageMacro(PageMacro,Page,Project,Boolean) Ich habe zwischenzeitlich noch versucht meine InsertWindow Methode anzupassen: private void InsertWindow(Page page, string macro, double posX, double posY) { PointD pointD = new PointD { //Offset tbd. X = posX, Y = posY }; //insert windowmacro Insert insert = new Insert(); //Test //--------------- //Neu: WindowMacro windowMacro = new WindowMacro(); windowMacro.Open(macro, page.Project); insert.WindowMacro(windowMacro, 0, page, pointD, Insert.MoveKind.Absolute); //Alt: //insert.WindowMacro(macro, 0, page, pointD, Insert.MoveKind.Absolute); //--------------- } Das hat aber auch nichts verändert. Gruß Götschma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
Beiträge: 101 Registriert: 26.11.2020
|
erstellt am: 25. Sep. 2023 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für Götschma
Kann es sein, dass Du dich beim Laden von den Fenstermakros auf eine Seite von dem Seitenmakro referenzierst (return ... von der Subroutine), aber nicht auf eine Seite vom Projekt?! ------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Götschma Mitglied Automatiker
Beiträge: 10 Registriert: 29.05.2015 EPLAN Electric P8 - Select Version: 2023 Update 4 Expertenmenü
|
erstellt am: 25. Sep. 2023 13:46 <-- editieren / zitieren --> Unities abgeben:
Ich hab mal versucht, die Seite in der Main Methode zu definieren und anschliessend die Makros einzufügen (gemäss angehängten Code: InsertMultipleMacros_v2.txt). Das Seitenmakro wird wie bisher in das Projekt eingefügt, danach wird in der Zeile "insert.WindowMacro(macro, 0, page, pointD, Insert.MoveKind.Absolute);" die folgende Meldung erzeugt: Die Aktion ActionInsertWindowMacros mit den Parametern /_cmdline:ActionInsertWindowMacros aus dem Modul Eplan.EplAddin.InsertWindowMacros ist fehlgeschlagen. Ungültiger Handle. Das Objekt ist möglicherweise bereits gelöscht. Jetzt erhalte ich zumindest mal eine Fehlermeldung, kann jedoch nicht viel damit anfangen... Die Fenstermakros werden wieder nicht eingefügt. Wenn ich jetzt die Main Methode nochmals anpasse (gemäss angehängten Code: InsertMultipleMacros_v3.txt), damit die Fenstermakros auf einer neuen Seite eingefügt werden, funktioniert das Ganze. Doch ich würde die Fenstermakros gerne auf der Seite des Seitenmakros platziert haben.. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
Beiträge: 101 Registriert: 26.11.2020
|
erstellt am: 25. Sep. 2023 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für Götschma
|
Götschma Mitglied Automatiker
Beiträge: 10 Registriert: 29.05.2015 EPLAN Electric P8 - Select Version: 2023 Update 4 Expertenmenü
|
erstellt am: 26. Sep. 2023 09:57 <-- editieren / zitieren --> Unities abgeben:
Das funktioniert super . Vielen Dank für das Beispiel. Ich habe es für meinen Code jetzt ähnlich umgesetzt und einen PagesFilter ergänzt, damit die Position des Seitenmakros im Projekt keine Rolle mehr spielt. Als nächstes werde ich versuchen die Platzhalterobjekte in den Fenstermakros via API zu manipulieren bzw. deren Wertesätze und Variablen zuzuweisen. Wenn zufälligerweise jemand bereits sowas ähnliches mit API realisiert hat, würde ich mich natürlich über Tipps oder Beispiele freuen. @apps4eplan: Danke nochmals für die Hilfe. Gruß Götschma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|