Group: Forum Members
Last Active: 2 Years Ago
Posts: 7,
Visits: 85
|
Hi, i cant figure out how i can do it with a button. I can change almost everything but the backplanestyle seems to change on all shapes.
here's the code i got
foreach (NShape shape in nDrawingView1.Selection.Nodes) { if (shape.Style == null && shape.Style.StrokeStyle == null) { } else { shape.Text = "A"; shape.Style.EndArrowheadStyle = new NArrowheadStyle(ArrowheadShape.Arrow, "", new NSizeL(5, 5), new NColorFillStyle(Color.Gray), new NStrokeStyle(1, Color.Black)); shape.Style.StartArrowheadStyle = new NArrowheadStyle(ArrowheadShape.Arrow, "", new NSizeL(5, 5), new NColorFillStyle(Color.Gray), new NStrokeStyle(1, Color.Black)); shape.Style.FillStyle = new NColorFillStyle(Color.Transparent); NTextStyle textStyle = new NTextStyle(); if (shape.Style != null && shape.Style.TextStyle != null) { textStyle = shape.Style.TextStyle; } else { textStyle = shape.ComposeTextStyle(); NStyle.SetTextStyle(shape, textStyle); } textStyle.FontStyle = new NFontStyle("Verdana", 10, FontStyle.Regular | FontStyle.Regular); textStyle.FillStyle = new NColorFillStyle(Color.Black); textStyle.BackplaneStyle.Visible = true; textStyle.BackplaneStyle.StandardFrameStyle.Visible = false; } }
i tried with this but it's not working shape.Style.TextStyle.BackplaneStyle.Visible = true; shape.Style.TextStyle.BackplaneStyle.StandardFrameStyle.Visible = false;
Can someone give me a hint on this please ?
|
Group: Forum Members
Last Active: 2 Months Ago
Posts: 3,055,
Visits: 4,055
|
Hi, The problem with your code is that when you use the ComposeTextStyle method for a shape that does not have a shape style, then you get a reference to the document text style. You then modify this reference and that is why the text style of all shapes that do not have a local text style specified changes. You should clone the composed text style to avoid this. The following is a code example: // Loop through all selected shapes NNodeList nodes = view.Selection.Nodes; for (int i = 0; i < nodes.Count; i++) { NShape shape = nodes[i] as NShape; if (shape == null) continue;
// Get or compose shape's text style NTextStyle textStyle; if (shape.Style != null && shape.Style.TextStyle != null) { // The shape has text style, so use it textStyle = shape.Style.TextStyle; } else { // The shape does not have text style, so compose it and clone it textStyle = (NTextStyle)shape.ComposeTextStyle().Clone(); }
// Create and set backplane style NBackplaneStyle backplaneStyle = new NBackplaneStyle(); backplaneStyle.Visible = true; backplaneStyle.FillStyle = new NColorFillStyle(Color.Yellow); textStyle.BackplaneStyle = backplaneStyle;
// Set shape text style NStyle.SetTextStyle(shape, textStyle); }
// Loop through all selected shapes
NNodeList nodes = view.Selection.Nodes;
for (int i = 0; i < nodes.Count; i++)
{
NShape shape = nodes[i] as NShape;
if (shape == null)
continue;
// Get or compose shape's text style
NTextStyle textStyle;
if (shape.Style != null && shape.Style.TextStyle != null)
{
// The shape has text style, so use it
textStyle = shape.Style.TextStyle;
}
else
{
// The shape does not have text style, so compose it and clone it
textStyle = (NTextStyle)shape.ComposeTextStyle().Clone();
}
// Create and set backplane style
NBackplaneStyle backplaneStyle = new NBackplaneStyle();
backplaneStyle.Visible = true;
backplaneStyle.FillStyle = new NColorFillStyle(Color.Yellow);
textStyle.BackplaneStyle = backplaneStyle;
// Set shape text style
NStyle.SetTextStyle(shape, textStyle);
}
Best Regards, Nevron Support Team
|
Group: Forum Members
Last Active: 2 Years Ago
Posts: 7,
Visits: 85
|
thank you for the explanation ! exaclty what i need, it work like a charm
|