EPLAN-API

Alles rund um die API in EPLAN

EPLAN API: PlaceHolder

Nicht ganz so einfach wie man es sich vorstellt, ist das arbeiten mit Platzhaltern.
Vielen Dank an Fritz für die Zusendung. Ich hab mal die Helperklassen erweitert.

using System.Collections.Generic;
using System.Linq;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.DataModel.Graphics;

namespace Suplanus.Sepla.Helper
{
	public class PlaceHolderUtility
	{
		/// <summary>
		/// Apply a record to placeholder by name
		/// </summary>
		/// <param name="placeHolders"></param>
		/// <param name="placeHolderName"></param>
		/// <param name="recordName"></param>
		/// <returns></returns>
		public bool ApplyRecord(PlaceHolder[] placeHolders, string placeHolderName, string recordName)
		{
			List<PlaceHolder> foundPlaceHolder = placeHolders
				.Where(placeHolder => placeHolder.Name.Equals(placeHolderName)) // name
				.Where(placeHolder => placeHolder.FindRecord(recordName) != -1) // record
				.ToList();

			using (Transaction transaction = new TransactionManager().CreateTransaction())
			{
				foreach (PlaceHolder placeHolder in foundPlaceHolder)
				{
					placeHolder.ApplyRecord(recordName, true); // apply (with page data)
					transaction.Commit(); // needed if not placed in project
				}
			}

			return foundPlaceHolder.Any(); // true == found | false == not found
		}

		/// <summary>
		/// Create a record to a placeHolder by name and apply a record
		/// </summary>
		/// <param name="placeHolders"></param>
		/// <param name="placeHolderName"></param>
		/// <param name="recordName"></param>
		/// <param name="variableName"></param>
		/// <param name="value"></param>
		/// <returns></returns>
		public bool CreateRecordWithValueAndApply(PlaceHolder[] placeHolders, string placeHolderName, string recordName, string variableName, string value)
		{
			List<PlaceHolder> foundPlaceHolder = placeHolders
				.Where(placeHolder => placeHolder.Name.Equals(placeHolderName)) // name
				.ToList();

			foreach (PlaceHolder placeHolder in foundPlaceHolder)
			{
				placeHolder.AddRecord(recordName);
				placeHolder.set_Value(recordName, variableName, value);
				using (Transaction transaction = new TransactionManager().CreateTransaction())
				{
					placeHolder.ApplyRecord(recordName, true); // apply (with page data)
					transaction.Commit(); // needed if not placed in project
				}
			}

			return foundPlaceHolder.Any(); // true == found | false == not found
		}
	}
}
Von |2017-11-09T11:23:13+01:002016-03-10|EPLAN, EPLAN-API|

EPLAN-API: Templates

Ich hab mal drei Templates für die EPLAN API Programmierung erstellt.

Dadurch können Addins/Verfications und Actions sehr schnell eingefügt werden:

2016-02-26_10-36-04

Beim ActionTemplate wird gleich der Klassenname als Actionname verwendet, was ich immer sehr praktisch finde.

Einfach in euer Template Verzeichnis packen (z.B. Documents\Visual Studio 2015\My Exported Templates) und freuen :^)

Von |2017-11-09T11:23:18+01:002016-02-27|EPLAN, EPLAN-API|

EPLAN API: Preview in WPF Update

Ich hatte ja beschrieben wie man mit (viel Aufwand und) WPF eine Vorschau von Makros für EPLAN erzeugen kann.

Hier gab es aber ein Problem: Seitenmakros konnten nicht gruppiert dargestellt werden, da es einen Bug in der API gibt, wenn WPF verwendet wird.

Nun habe das Ganze aber zerlegt:
Alle Darstellungsarten und alle Varianten (bzw. Seiten) können ausgewählt werden.

Hier im Video sieht man das Ergebnis, Makros sind nur Testdaten, bitte nicht darauf achten :^)

Habe auch soweit noch optimiert, dass man nur noch einmal die Preview machen muss (Größenveränderungen werden automatisch erkannt).

 

Verwendung

// start eplan
_eplanOffline = new EplanOffline();

// Needed if its an OfflineApplication
_eplanOffline.StartWpf(this);
if (!_eplanOffline.IsRunning)
{
	throw new Exception("EPLAN not running");
}

// Init preview
_eplanOffline.Preview = new Preview(previewBorder, _previewProject);

// display
_eplanOffline.Preview.Display(_macroPath, PreviewType.WindowMacro);

 

Wie gewohnt auf GitHub zu finden…

Von |2017-11-09T11:23:26+01:002016-02-24|EPLAN, EPLAN-API|

EPLAN API: Seitenmakros mit Struktur

Ich hab mal die Methode zum Generieren erweitert. Man kann nun die Struktur mit übergeben.

Beispiel:

string projectLinkPath = @"\\Mac\Home\Desktop\Test.elk";
string projectTemplatePath = @"\\Mac\Home\Documents\GitHub\ibKastl.MechatronicsConfigurator\DemoData\Templates\IEC_bas001.zw9";

List<GeneratablePageMacro> generatablePageMacros = new List<GeneratablePageMacro>();
generatablePageMacros.Add(new GeneratablePageMacro(
	@"\\Mac\Home\Documents\GitHub\ibKastl.MechatronicsConfigurator\DemoData\Macros\PageMacro_Axis-X.emp",
	new LocationIdentifierIdentifier
	{
		FunctionAssignment = "TEST1",
		Plant = "TEST11",
		PlaceOfInstallation = "TEST111",
		Location = "TEST1111",
		UserDefinied = "TEST11111",
	}));

generatablePageMacros.Add(new GeneratablePageMacro(
	@"\\Mac\Home\Documents\GitHub\ibKastl.MechatronicsConfigurator\DemoData\Macros\PageMacro_Supply.emp",
	new LocationIdentifierIdentifier
	{
		FunctionAssignment = "TEST2",
		Plant = "TEST22",
		PlaceOfInstallation = "TEST222",
		Location = "TEST2222",
		UserDefinied = "TEST22222",
	}));

// check overwrite
generatablePageMacros.Add(new GeneratablePageMacro(
	@"\\Mac\Home\Documents\GitHub\ibKastl.MechatronicsConfigurator\DemoData\Macros\PageMacro_Axis-X.emp",
	new LocationIdentifierIdentifier
	{
		FunctionAssignment = "TEST1",
		Plant = "TEST11",
		PlaceOfInstallation = "TEST111",
		Location = "TEST1111",
		UserDefinied = "TEST11111",
	}));

generatablePageMacros.Add(new GeneratablePageMacro(
	@"\\Mac\Home\Documents\GitHub\ibKastl.MechatronicsConfigurator\DemoData\Macros\PageMacro_Supply.emp",
	new LocationIdentifierIdentifier
	{
		FunctionAssignment = "TEST2",
		Plant = "TEST22",
		PlaceOfInstallation = "TEST222",
		Location = "TEST2222",
		UserDefinied = "TEST22222",
	}));

ProjectUtility.Generate(projectLinkPath, projectTemplatePath, generatablePageMacros);

 

Hier sieht man recht schön dass die Seiten nicht überschrieben werden, sondern nacheinander eingefügt werden. Sind im Projekt Strukturkennzeichen nicht aktiv (z.B. Funktionale Zuordnung) dann werden diese einfach ignoriert:

Generate

Von |2017-11-09T11:23:34+01:002016-02-12|EPLAN, EPLAN-API|

EPLAN API: Seitenmakros einfügen

Ich generiere gerade bisschen mit der API um ein Gefühl zu bekommen was alles möglich ist. Leider ist es nicht ganz trivial Seitenmakros einzufügen.

Problem: Äquivalent zur EPLAN GUI wird das Makro einfach eingefügt. Seiten werden überschrieben, oder auch nicht.

Als Workaround kann man die Seiten im Makro in der API davor anpassen und trotzdem die Strukturkennzeichen beibehalten.
Im Beispiel zähle ich einfach die Seiten vom Projekt hoch (Basisprojekt muss somit durchnummeriert sein).

Insert insert = new Insert();
var pageCount = project.Pages.Length; // needed cause of overwrite
foreach (var pageMacroFile in pageMacros)
{
	// Load pages from macro
	PageMacro pageMacro = new PageMacro();
	pageMacro.Open(pageMacroFile, project);
	foreach (var page in pageMacro.Pages)
	{
		// Rename
		pageCount++;
		PagePropertyList pagePropertyList = page.NameParts;
		pagePropertyList[Properties.Page.DESIGNATION_PLANT] = "TEST";
		pagePropertyList[Properties.Page.PAGE_COUNTER] = pageCount;
		page.NameParts = pagePropertyList;
		new NameService(page).EvaluateAndSetAllNames();
	}

	// Insert pagemacro
	insert.PageMacro(pageMacro, project, null, PageMacro.Enums.NumerationMode.Number);
}

Das hin und her bei Rename muss leider sein, da es nicht möglich ist direkt auf die Properties des Objektes zu gehen.

NameService.EvaluateAndSetAllNames()  nummeriert die Betriebsmittel auf der Seite.

Ich bau mal was zusammen damit man die Strukturkennzeichen schön von außen mit übergeben kann :^)
Ist wie gewohnt auf GitHub zu finden.

Von |2017-11-09T11:23:42+01:002016-02-10|EPLAN, EPLAN-API|
Nach oben