Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  EPLAN Electric P8
  API Fenstermakros einfügen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Götschma an!   Senden Sie eine Private Message an Götschma  Schreiben Sie einen Gästebucheintrag für Götschma

Beiträge: 10
Registriert: 29.05.2015

EPLAN Electric P8 - Select
Version: 2023 Update 4
Expertenmenü

erstellt am: 22. Sep. 2023 08:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von apps4eplan an!   Senden Sie eine Private Message an apps4eplan  Schreiben Sie einen Gästebucheintrag für apps4eplan

Beiträge: 101
Registriert: 26.11.2020

erstellt am: 24. Sep. 2023 19:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Götschma 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Götschma an!   Senden Sie eine Private Message an Götschma  Schreiben Sie einen Gästebucheintrag für Götschma

Beiträge: 10
Registriert: 29.05.2015

EPLAN Electric P8 - Select
Version: 2023 Update 4
Expertenmenü

erstellt am: 25. Sep. 2023 11:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von apps4eplan an!   Senden Sie eine Private Message an apps4eplan  Schreiben Sie einen Gästebucheintrag für apps4eplan

Beiträge: 101
Registriert: 26.11.2020

erstellt am: 25. Sep. 2023 12:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Götschma 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Götschma an!   Senden Sie eine Private Message an Götschma  Schreiben Sie einen Gästebucheintrag für Götschma

Beiträge: 10
Registriert: 29.05.2015

EPLAN Electric P8 - Select
Version: 2023 Update 4
Expertenmenü

erstellt am: 25. Sep. 2023 13:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


InsertMultipleMacrosV2.txt


InsertMultipleMacrosV3.txt

 
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


Sehen Sie sich das Profil von apps4eplan an!   Senden Sie eine Private Message an apps4eplan  Schreiben Sie einen Gästebucheintrag für apps4eplan

Beiträge: 101
Registriert: 26.11.2020

erstellt am: 25. Sep. 2023 15:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Götschma 10 Unities + Antwort hilfreich


placeMacro.txt

 
so geht's!

------------------
sind doch alles nur Nuller und Einser :-) !!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Götschma
Mitglied
Automatiker


Sehen Sie sich das Profil von Götschma an!   Senden Sie eine Private Message an Götschma  Schreiben Sie einen Gästebucheintrag für Götschma

Beiträge: 10
Registriert: 29.05.2015

EPLAN Electric P8 - Select
Version: 2023 Update 4
Expertenmenü

erstellt am: 26. Sep. 2023 09:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


InsertMultipleMacrosV4.txt

 
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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz