private void CreateShapeWithAutoLinePort() { NBezierCurveShape shape = new NBezierCurveShape(new NPointF(0, 0), new NPointF(1, 0), new NPointF(1, 2), new NPointF(2, 2)); shape.Name = "Line Port with AutoLine direction"; shape.Bounds = base.GetGridCell(5, 1); shape.Style.StrokeStyle = new NStrokeStyle(1, Color.FromArgb(68, 90, 108)); shape.CreateShapeElements(ShapeElementsMask.Ports); NLogicalLinePort port = new NLogicalLinePort(shape.UniqueId, 50); port.DirectionMode = LogicalLinePortDirectionMode.AutoLine; shape.Ports.AddChild(port); document.ActiveLayer.AddChild(shape); // describe it NTextShape text = new NTextShape("Line Port with AutoLine direction", base.GetGridCell(5, 2, 0, 1)); document.ActiveLayer.AddChild(text); }
private void InitDocument() { document.Style.TextStyle = new NTextStyle(new Font("Arial", 9), Color.Black); NGraphTemplate template; // create rectangular grid template template = new NRectangularGridTemplate(); template.Origin = new NPointF(10, 23); template.VerticesShape = BasicShapes.Rectangle; template.Create(document); // create tree template template = new NGenericTreeTemplate(); template.Origin = new NPointF(250, 23); template.VerticesShape = BasicShapes.Triangle; template.Create(document); // create elliptical grid template template = new NEllipticalGridTemplate(); template.Origin = new NPointF(10, 250); template.VerticesShape = BasicShapes.Ellipse; template.Create(document); // create a shape with a 1D shape which reflexes it NBasicShapesFactory factory = new NBasicShapesFactory(document); NShape shape = factory.CreateShape((int)BasicShapes.Rectangle); shape.Bounds = new NRectangleF(350, 350, 100, 100); document.ActiveLayer.AddChild(shape); NBezierCurveShape bezier = new NBezierCurveShape(); bezier.StyleSheetName = NDR.NameConnectorsStyleSheet; document.ActiveLayer.AddChild(bezier); bezier.FromShape = shape; bezier.ToShape = shape; bezier.Reflex(); }
private void CreateBezierShape(int row, int col) { NRectangleF cell = GetGridCell(row, col); Color color = GetPredefinedColor(4); // create bezier NBezierCurveShape bezier = new NBezierCurveShape(cell.Location, new NPointF(cell.Right, cell.Bottom)); // set stroke style bezier.Style.StrokeStyle = new NStrokeStyle(2, color, LinePattern.Solid); // set arrowheads style NArrowheadStyle arrowheadStyle = new NArrowheadStyle( ArrowheadShape.ManyOptional, "", new NSizeL(12, 12), new NColorFillStyle(color), new NStrokeStyle(1, Color.Black)); bezier.Style.StartArrowheadStyle = arrowheadStyle; arrowheadStyle = new NArrowheadStyle( ArrowheadShape.Many, "", new NSizeL(12, 12), new NColorFillStyle(color), new NStrokeStyle(1, Color.Black)); bezier.Style.EndArrowheadStyle = arrowheadStyle; // add to the active layer document.ActiveLayer.AddChild(bezier); // add description cell = GetGridCell(row + 1, col); NTextShape text = new NTextShape("Bezier curve with solid style and ManyOptional and Many arrowheads", cell); document.ActiveLayer.AddChild(text); }
private void randomBezierButton_Click(object sender, System.EventArgs e) { // create shape NPointF start = base.GetRandomPoint(view.Viewport); NPointF firstControl = base.GetRandomPoint(view.Viewport); NPointF secondControl = base.GetRandomPoint(view.Viewport); NPointF end = base.GetRandomPoint(view.Viewport); NBezierCurveShape shape = null; try { shape = new NBezierCurveShape(start, firstControl, secondControl, end); } catch { return; } // add to active layer document.ActiveLayer.AddChild(shape); document.SmartRefreshAllViews(); }
private void InitDocument() { document.Style.TextStyle = new NTextStyle(new Font("Arial", 9), Color.Black); // modify the connectors style sheet NStyleSheet styleSheet = (document.StyleSheets.GetChildByName(NDR.NameConnectorsStyleSheet, -1) as NStyleSheet); NTextStyle textStyle = new NTextStyle(); textStyle.BackplaneStyle.Visible = true; textStyle.BackplaneStyle.StandardFrameStyle.InnerBorderWidth = new NLength(0); styleSheet.Style.TextStyle = textStyle; styleSheet.Style.StrokeStyle = new NStrokeStyle(1, Color.Black); styleSheet.Style.StartArrowheadStyle.StrokeStyle = new NStrokeStyle(1, Color.Black); styleSheet.Style.EndArrowheadStyle.StrokeStyle = new NStrokeStyle(1, Color.Black); // create a stylesheet for the 2D Shapes styleSheet = new NStyleSheet("SHAPE2D"); styleSheet.Style.FillStyle = new NColorFillStyle(Color.PapayaWhip); document.StyleSheets.AddChild(styleSheet); // create a stylesheet for the arrows, which inherits from the connectors stylesheet styleSheet = new NStyleSheet("ARROW", NDR.NameConnectorsStyleSheet); textStyle = new NTextStyle(); textStyle.FontStyle.InitFromFont(new Font("Arial", 8)); styleSheet.Style.TextStyle = textStyle; document.StyleSheets.AddChild(styleSheet); // create shapes NShape shape1 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(150, 50, 50, 50), "1", "SHAPE2D"); NShape shape2 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(150, 150, 50, 50), "2", "SHAPE2D"); NShape shape3 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(325, 150, 50, 50), "3", "SHAPE2D"); NShape shape4 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(50, 250, 50, 50), "4", "SHAPE2D"); NShape shape5 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(250, 250, 50, 50), "5", "SHAPE2D"); NShape shape6 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(400, 250, 50, 50), "6", "SHAPE2D"); NShape shape7 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(250, 350, 50, 50), "7", "SHAPE2D"); NShape shape8 = base.CreateBasicShape(BasicShapes.Rectangle, new NRectangleF(400, 350, 50, 50), "8", "SHAPE2D"); // create connectors NLineShape line = new NLineShape(); line.StyleSheetName = NDR.NameConnectorsStyleSheet; line.Text = "Line"; document.ActiveLayer.AddChild(line); line.StartPlug.Connect(shape1.Ports.GetChildByName("Bottom", 0) as NPort); line.EndPlug.Connect(shape2.Ports.GetChildByName("Top", 0) as NPort); NStep2Connector hv = new NStep2Connector(false); hv.StyleSheetName = NDR.NameConnectorsStyleSheet; hv.Text = "HV"; document.ActiveLayer.AddChild(hv); hv.StartPlug.Connect(shape1.Ports.GetChildByName("Right", 0) as NPort); hv.EndPlug.Connect(shape3.Ports.GetChildByName("Top", 0) as NPort); NStep2Connector vh = new NStep2Connector(true); vh.StyleSheetName = NDR.NameConnectorsStyleSheet; vh.Text = "VH"; document.ActiveLayer.AddChild(vh); vh.StartPlug.Connect(shape4.Ports.GetChildByName("Bottom", 0) as NPort); vh.EndPlug.Connect(shape7.Ports.GetChildByName("Left", 0) as NPort); NStep3Connector vhv = new NStep3Connector(true, 50, 0, true); vhv.StyleSheetName = NDR.NameConnectorsStyleSheet; vhv.Text = "VHV"; document.ActiveLayer.AddChild(vhv); vhv.StartPlug.Connect(shape2.Ports.GetChildByName("Bottom", 0) as NPort); vhv.EndPlug.Connect(shape4.Ports.GetChildByName("Top", 0) as NPort); NStep3Connector hvh = new NStep3Connector(false, 50, 0, true); hvh.StyleSheetName = NDR.NameConnectorsStyleSheet; hvh.Text = "HVH"; document.ActiveLayer.AddChild(hvh); hvh.StartPlug.Connect(shape2.Ports.GetChildByName("Right", 0) as NPort); hvh.EndPlug.Connect(shape5.Ports.GetChildByName("Left", 0) as NPort); NArrowShape doubleArrow = new NArrowShape(ArrowType.DoubleArrow, new NPointF(0, 0), new NPointF(1, 1), 10, 45, 30); doubleArrow.StyleSheetName = "ARROW"; doubleArrow.Text = "Double Arrow"; document.ActiveLayer.AddChild(doubleArrow); doubleArrow.StartPlug.Connect(shape5.Ports.GetChildByName("Right", 0) as NPort); doubleArrow.EndPlug.Connect(shape6.Ports.GetChildByName("Left", 0) as NPort); NArrowShape singleArrow = new NArrowShape(ArrowType.SingleArrow, new NPointF(0, 0), new NPointF(1, 1), 10, 45, 30); singleArrow.StyleSheetName = "ARROW"; singleArrow.Text = "Single Arrow"; document.ActiveLayer.AddChild(singleArrow); singleArrow.StartPlug.Connect(shape7.Ports.GetChildByName("Right", 0) as NPort); singleArrow.EndPlug.Connect(shape8.Ports.GetChildByName("Left", 0) as NPort); NBezierCurveShape bezier = new NBezierCurveShape(); bezier.StyleSheetName = NDR.NameConnectorsStyleSheet; bezier.Text = "Bezier"; bezier.StartPlug.Connect(shape6.Ports.GetChildByName("Right", 0) as NPort); bezier.EndPlug.Connect(shape6.Ports.GetChildByName("Top", 0) as NPort); bezier.Reflex(); }
private void InitDocument() { NDrawingView1.Document.GraphicsSettings.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; NDrawingView1.Document.GraphicsSettings.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; NDrawingView1.Document.GraphicsSettings.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; // set up visual formatting NDrawingView1.Document.Style.FillStyle = new NColorFillStyle(Color.Linen); NDrawingView1.Document.BackgroundStyle.FrameStyle.Visible = false; // create the flowcharting shapes factory NFlowChartingShapesFactory factory = new NFlowChartingShapesFactory(NDrawingView1.Document); // modify the connectors style sheet NStyleSheet styleSheet = (NDrawingView1.Document.StyleSheets.GetChildByName(NDR.NameConnectorsStyleSheet, -1) as NStyleSheet); NTextStyle textStyle = new NTextStyle(); textStyle.BackplaneStyle.Visible = true; textStyle.BackplaneStyle.StandardFrameStyle.InnerBorderWidth = new NLength(0); styleSheet.Style.TextStyle = textStyle; styleSheet.Style.StrokeStyle = new NStrokeStyle(1, Color.Black); styleSheet.Style.StartArrowheadStyle.StrokeStyle = new NStrokeStyle(1, Color.Black); styleSheet.Style.EndArrowheadStyle.StrokeStyle = new NStrokeStyle(1, Color.Black); // create the begin shape NShape begin = factory.CreateShape((int)FlowChartingShapes.Termination); begin.Bounds = new NRectangleF(100, 100, 100, 100); begin.Text = "BEGIN"; NDrawingView1.Document.ActiveLayer.AddChild(begin); // create the step1 shape NShape step1 = factory.CreateShape((int)FlowChartingShapes.Process); step1.Bounds = new NRectangleF(100, 400, 100, 100); step1.Text = "STEP1"; NDrawingView1.Document.ActiveLayer.AddChild(step1); // connect begin and step1 with bezier link NBezierCurveShape bezier = new NBezierCurveShape(); bezier.StyleSheetName = NDR.NameConnectorsStyleSheet; bezier.Text = "BEZIER"; bezier.SetPointAt(1, new NPointF(100, 300)); bezier.SetPointAt(2, new NPointF(200, 300)); NDrawingView1.Document.ActiveLayer.AddChild(bezier); bezier.FromShape = begin; bezier.ToShape = step1; // create question1 shape NShape question1 = factory.CreateShape((int)FlowChartingShapes.Decision); question1.Bounds = new NRectangleF(300, 400, 100, 100); question1.Text = "QUESTION1"; NDrawingView1.Document.ActiveLayer.AddChild(question1); // connect step1 and question1 with line link NLineShape line = new NLineShape(); line.StyleSheetName = NDR.NameConnectorsStyleSheet; line.Text = "LINE"; NDrawingView1.Document.ActiveLayer.AddChild(line); line.FromShape = step1; line.ToShape = question1; // create the step2 shape NShape step2 = factory.CreateShape((int)FlowChartingShapes.Process); step2.Bounds = new NRectangleF(500, 100, 100, 100); step2.Text = "STEP2"; NDrawingView1.Document.ActiveLayer.AddChild(step2); // connect step2 and question1 with HV link NStep2Connector hv1 = new NStep2Connector(false); hv1.StyleSheetName = NDR.NameConnectorsStyleSheet; hv1.Text = "HV1"; NDrawingView1.Document.ActiveLayer.AddChild(hv1); hv1.FromShape = step2; hv1.ToShape = question1; // connect question1 and step2 and with HV link NStep2Connector hv2 = new NStep2Connector(false); hv2.StyleSheetName = NDR.NameConnectorsStyleSheet; hv2.Text = "HV2"; NDrawingView1.Document.ActiveLayer.AddChild(hv2); hv2.FromShape = question1; hv2.ToShape = step2; // create a self loof as bezier on step2 NBezierCurveShape selfLoop = new NBezierCurveShape(); selfLoop.StyleSheetName = NDR.NameConnectorsStyleSheet; selfLoop.Text = "SELF LOOP"; NDrawingView1.Document.ActiveLayer.AddChild(selfLoop); selfLoop.FromShape = step2; selfLoop.ToShape = step2; selfLoop.Reflex(); // create step3 shape NShape step3 = factory.CreateShape((int)FlowChartingShapes.Process); step3.Bounds = new NRectangleF(700, 600, 100, 100); step3.Text = "STEP3"; NDrawingView1.Document.ActiveLayer.AddChild(step3); // connect question1 and step3 with an HVH link NStep3Connector hvh1 = new NStep3Connector(false, 50, 0, true); hvh1.StyleSheetName = NDR.NameConnectorsStyleSheet; hvh1.Text = "HVH1"; NDrawingView1.Document.ActiveLayer.AddChild(hvh1); hvh1.FromShape = question1; hvh1.ToShape = step3; // create end shape NShape end = factory.CreateShape((int)FlowChartingShapes.Termination); end.Bounds = new NRectangleF(300, 700, 100, 100); end.Text = "END"; NDrawingView1.Document.ActiveLayer.AddChild(end); // connect step3 and end with VH link NStep2Connector vh1 = new NStep2Connector(true); vh1.StyleSheetName = NDR.NameConnectorsStyleSheet; vh1.Text = "VH1"; NDrawingView1.Document.ActiveLayer.AddChild(vh1); vh1.FromShape = step3; vh1.ToShape = end; // connect question1 and end with curve link (uses explicit ports) NRoutableConnector curve = new NRoutableConnector(RoutableConnectorType.DynamicCurve); curve.StyleSheetName = NDR.NameConnectorsStyleSheet; curve.Text = "CURVE"; NDrawingView1.Document.ActiveLayer.AddChild(curve); curve.StartPlug.Connect(question1.Ports.GetChildAt(3) as NPort); curve.EndPlug.Connect(end.Ports.GetChildAt(1) as NPort); curve.InsertPoint(1, new NPointF(500, 600)); // set a shadow to the document. Since styles are inheritable all objects will reuse this shadow NDrawingView1.Document.Style.ShadowStyle = new NShadowStyle( ShadowType.GaussianBlur, Color.Gray, new NPointL(5, 5), 1, new NLength(3)); // shadows must be displayed behind document content NDrawingView1.Document.ShadowsZOrder = ShadowsZOrder.BehindDocument; }
/// <summary> /// Creates a connector between the ports of the specified shapes /// </summary> /// <param name="fromShape"></param> /// <param name="fromPortName"></param> /// <param name="toShape"></param> /// <param name="toPortName"></param> /// <param name="connectorType"></param> /// <param name="text"></param> /// <returns></returns> public NShape CreateConnector(NShape fromShape, string fromPortName, NShape toShape, string toPortName, ConnectorType connectorType, string text) { // check input if (fromShape == null) { throw new ArgumentNullException("fromShape"); } if (toShape == null) { throw new ArgumentNullException("toShape"); } NPort fromPort = (fromShape.Ports.GetChildByName(fromPortName, 0) as NPort); if (fromPort == null) { throw new ArgumentException("Was not able to find fromPortName in the ports collection of the fromShape", "fromPortName"); } NPort toPort = (toShape.Ports.GetChildByName(toPortName, 0) as NPort); if (toPort == null) { throw new ArgumentException("Was not able to find toPortName in the ports collection of the toShape", "toPortName"); } // create the connector NShape connector = null; switch (connectorType) { case ConnectorType.Line: connector = new NLineShape(); break; case ConnectorType.Bezier: connector = new NBezierCurveShape(); break; case ConnectorType.SingleArrow: connector = new NArrowShape(ArrowType.SingleArrow); break; case ConnectorType.DoubleArrow: connector = new NArrowShape(ArrowType.DoubleArrow); break; case ConnectorType.SideToTopBottom: connector = new NStep2Connector(false); break; case ConnectorType.TopBottomToSide: connector = new NStep2Connector(true); break; case ConnectorType.SideToSide: connector = new NStep3Connector(false, 50, 0, true); break; case ConnectorType.TopToBottom: connector = new NStep3Connector(true, 50, 0, true); break; case ConnectorType.DynamicHV: connector = new NRoutableConnector(RoutableConnectorType.DynamicHV); break; case ConnectorType.DynamicPolyline: connector = new NRoutableConnector(RoutableConnectorType.DynamicPolyline); break; case ConnectorType.DynamicCurve: connector = new NRoutableConnector(RoutableConnectorType.DynamicCurve); break; default: Debug.Assert(false, "New graph connector type?"); break; } // the connector must be added to the document prior to connecting it document.ActiveLayer.AddChild(connector); connector.StartPlug.Connect(fromPort); connector.EndPlug.Connect(toPort); connector.Style.TextStyle = (connector.ComposeTextStyle().Clone() as NTextStyle); connector.Style.TextStyle.Offset = new Nevron.GraphicsCore.NPointL(0, -7); connector.Text = text; return(connector); }
/// <summary> /// Creates a new connector, which connects the specified shapes /// </summary> /// <param name="fromShape"></param> /// <param name="fromPortName"></param> /// <param name="toShape"></param> /// <param name="toPortName"></param> /// <param name="connectorType"></param> /// <param name="text"></param> /// <returns>new 1D shapes</returns> protected NShape CreateConnector(NShape fromShape, string fromPortName, NShape toShape, string toPortName, ConnectorType connectorType, string text) { // check arguments if (fromShape == null) { throw new ArgumentNullException("fromShape"); } if (toShape == null) { throw new ArgumentNullException("toShape"); } NPort fromPort = (fromShape.Ports.GetChildByName(fromPortName, 0) as NPort); if (fromPort == null) { throw new ArgumentException("Was not able to find fromPortName in the ports collection of the fromShape", "fromPortName"); } NPort toPort = (toShape.Ports.GetChildByName(toPortName, 0) as NPort); if (toPort == null) { throw new ArgumentException("Was not able to find toPortName in the ports collection of the toShape", "toPortName"); } // create the connector NShape connector = null; switch (connectorType) { case ConnectorType.Line: connector = new NLineShape(); break; case ConnectorType.Bezier: connector = new NBezierCurveShape(); break; case ConnectorType.SingleArrow: connector = new NArrowShape(ArrowType.SingleArrow); break; case ConnectorType.DoubleArrow: connector = new NArrowShape(ArrowType.DoubleArrow); break; case ConnectorType.SideToTopBottom: connector = new NStep2Connector(false); break; case ConnectorType.TopBottomToSide: connector = new NStep2Connector(true); break; case ConnectorType.SideToSide: connector = new NStep3Connector(false, 50, 0, true); break; case ConnectorType.TopToBottom: connector = new NStep3Connector(true, 50, 0, true); break; case ConnectorType.DynamicHV: connector = new NRoutableConnector(RoutableConnectorType.DynamicHV); break; case ConnectorType.DynamicPolyline: connector = new NRoutableConnector(RoutableConnectorType.DynamicPolyline); break; case ConnectorType.DynamicCurve: connector = new NRoutableConnector(RoutableConnectorType.DynamicCurve); break; default: Debug.Assert(false, "New graph connector type?"); break; } // the connector must be added to the document prior to connecting it DrawingView.Document.ActiveLayer.AddChild(connector); // change the default label text connector.Text = text; // connectors by default inherit styles from the connectors stylesheet connector.StyleSheetName = NDR.NameConnectorsStyleSheet; // connect the connector to the specified ports connector.StartPlug.Connect(fromPort); connector.EndPlug.Connect(toPort); // modify the connector text style connector.Style.TextStyle = (connector.ComposeTextStyle().Clone() as NTextStyle); connector.Style.TextStyle.Offset = new NPointL(0, -7); return(connector); }