hallo Michael,
nur damit du Bescheid weißt, ich habe dich nicht vergessen und ich schaue mir die Thematik gerade an.
Nur kurz zum Status Quo: Es scheint so, also ob man die Position eines Symboles über DynProperties("StartX") erst dann setzen kann, wenn ein Element in dem Symbol vorhanden ist. Das ist mir so nebenbei aufgefallen
ich bilde mir aber ein, dass das früher nicht so gewesen ist.
Woher der "Offset" beim Hinzufügen des Elements kommt, kann ich noch nicht sagen. Ich werde mir das ganze aber noch genau anschauen.
Mein Code, mit dem ich das ganze teste, sieht folgendermaßen aus - falls jemand interessiert sein sollte:
public void Macro_CreateSymbol()
{
zenOn.IElement zSymbol, zRectangle, zCircle;
zenOn.IDynPicture zScreen;
try
{
if (this.ActiveDocument.DynPictures().Item("SymbolScreen") != null)
{
this.ActiveDocument.DynPictures().Delete("SymbolScreen");
}
if (this.ActiveDocument.Templates().Item("FrameForSymbolScreen") == null)
{
zenOn.ITemplate zTemplate = this.ActiveDocument.Templates().Create("FrameForSymbolScreen", true);
}
zScreen = this.ActiveDocument.DynPictures().Create("SymbolScreen", "FrameForSymbolScreen", zenOn.tpDynPicturesTypes.tpStandard);
//zScreen = this.ActiveDocument.DynPictures().Item("SymbolScreen");
}
catch (Exception ScreenException)
{
MessageBox.Show("An error occured when trying to access the screen: " + ScreenException.Message);
return;
}
//set properties for rectangle
zRectangle = zScreen.Elements().Create("Rectangle1", zenOn.tpElementTypes.tpRectangle);
zRectangle.Width = 100;
zRectangle.Height = 100;
SetPosition(zRectangle, new int[] { 50, 50 });
//set properties for circle
zCircle = zScreen.Elements().Create("Circle1", zenOn.tpElementTypes.tpCircle);
zCircle.Width = 50;
zCircle.Height = 50;
SetPosition(zCircle, new int[] {75, 75});
zSymbol = zScreen.Elements().Create("Symbol1", zenOn.tpElementTypes.tpSymbol);
zSymbol = zScreen.Elements().Item("Symbol1");
zSymbol.Update();
zScreen.Save();
////set position of symbol and rectangle to 0/0 and save information in array
//int[] nResetSymbol = ResetPosition(zSymbol);
int[] nResetRectangle = ResetPosition(zRectangle);
int[] nResetCircle = ResetPosition(zCircle);
//check if resetting was successful, add element and set position again
if (nResetRectangle != null)
{
zSymbol.Elements.Add(zRectangle);
SetPosition(zSymbol.Elements.Item("Rectangle1"), nResetRectangle);
}
zSymbol.set_DynProperties("StartX", 500);
SetPosition(zSymbol, new int[] { 200, 100 });
if (nResetCircle != null)
{
zSymbol.Elements.Add(zCircle);
SetPosition(zSymbol.Elements.Item("Circle1"), nResetCircle);
}
zSymbol.Update();
zScreen.Save();
}
///
/// Sets position of element
///
/// Element to set position of
/// Integer array with position info
private void SetPosition(zenOn.IElement zElem, int[] nElemPos)
{
try
{
zElem.set_DynProperties("StartX", nElemPos[0]);
zElem.set_DynProperties("StartY", nElemPos[1]);
}
catch (Exception SetPositionException)
{
MessageBox.Show("An error occured when trying to set position: " + SetPositionException.Message);
}
}
///
/// Resets position to 0/0 and returns array with prior position
///
/// Element to set to 0/0
/// Int array with prior positioning
private int[] ResetPosition(zenOn.IElement zElem)
{
try
{
int[] nElemPos = new int[2];
nElemPos[0] = (int)zElem.get_DynProperties("StartX");
nElemPos[1] = (int)zElem.get_DynProperties("StartY");
zElem.set_DynProperties("StartX", 0);
zElem.set_DynProperties("StartY", 0);
return nElemPos;
}
catch (Exception ResetPositionException)
{
MessageBox.Show("An error occured when trying to reset position: " + ResetPositionException.Message);
return null;
}
}
Also: ich hab nicht drauf vergessen
werde im Laufe der nächsten Woche noch eine Antwort hier rein schreiben, wenn ich etwas genaueres weiß.
lg