Nevron Open Vision Documentation
Geometry

 
About Geometries

The geometry of a shape is represented by the NGeometry class an instance of which can be obtained from the Geometry property of each shape. The geometry is responsible for generating a NGraphicsPath for the shape. The current path can be obtained from the Path property of the geometry.

The NGeometry object is a collection for objects that derive from the base NGeometryCommand class. In this way the path represented by the geometry is defined by a sequence of geometry commands. There are two distinct types of geometry commands - plotter commands and draw box commands. that are discussed in the next section.

Geometry Commands

As mentioned there are two distinct types of geometry commands - plotter commands and draw box commands.

Plotter Commands

Plotter commands are intended to be placed in a sequence and define the path of a shape via primitive drawing commands such as move to, line to, arc to etc that resemble the commands of a plotter machine. All plotter commands derive from the NPlotterCommand class. Each plotter command has X and Y properties that define the location of the command. Depending on the plotter command, it may have additional properties that control the curve plotted by the command. Plotter commands are summarized by the following table:

Command Class Command Description
NMoveTo Moves the plotter to a new position without connecting the points (starts a new figure). This is typically the first command in a plotter based geometry. The NMoveTo command has a ClosePrevFigure property which indicates whether the previous figure in the path needs to be closed.
NLineTo Draws a line from the previous plotter location to the current position.
NCubicBezierTo Draws a cubic bezier curve from the previous plotter location to the current position. The first and second control points of the cubic bezier are controlled by the FirstControlX, FirstControlY, SecondControlX and SecondControlY properties.
NArcTo Draws a circular arc from the previous plotter location to the current position. The arc is controlled by the Bow parameter which is distance of the arc from the line formed by previous command location and this command location.
NCircularArcTo Draws a circular arc from the previous plotter location to the current position. The arc is controlled by a control point, through which the circular arc passes.  The control point is defined by the ControlX and ControlY properties.
NEllipticalArcTo Draws an elliptical arc from the previous plotter location to the current position. The arc is controlled by a control point, through which the circular arc passes and two additional values - the Ratio between the major and minor ellipse axes and the Angle which the major axis forms with the X axis.  The control point is defined by the ControlX and ControlY properties.

The following example demonstrates how to draw a rectangle using plotter commands:

Draw Rectangle with Plotter Commands
Copy Code
NShape shape = new NShape();
shape.Init2DShape();
shape.Geometry.Add(new NMoveTo(0, 0));
shape.Geometry.Add(new NLineTo("Width", 0));
shape.Geometry.Add(new NLineTo("Width", "Height"));
shape.Geometry.Add(new NLineTo(0, "Height"));
shape.Geometry.CloseLastFigure = true;

Draw Box Commands

Draw box commands are intended to create entire path figures or paths. All drawing box commands derive from the NDrawBoxCommand class. Each drawing box command has a "drawing box", which is specified by the Left, Top, Right and Bottom properties of the drawing box command. The draw box command "draws" a figure or path inside this drawing box. The NDrawBoxCommand command also has a ClosePrevFigure property, which indicates whether the previous figure in the path needs to be closed. Draw box commands are summarized by the following table:

Command Class Command Description
NDrawRectangle Draws a rectangle inside the draw box.
NDrawEllipse Draws an ellipse inside the draw box.
NDrawPolyline Draws a polyline inside the draw box. The polyline is defined by set of NPoint objects that are relative to the draw box.
NDrawPolygon Draws a polygon inside the draw box. The polygon is defined by set of NPoint objects that are relative to the draw box.
NDrawPath Draws a path inside the draw box. The path is defined by set of NGraphicsPathPoint objects that are relative to the draw box.

The following example draws an ellipse using draw box commands:

Draw Ellipse Using Draw Box commands
Copy Code
NShape shape = new NShape();
shape.Init2DShape();
shape.Geometry.Add(new NDrawEllipse(0, 0, "Width", "Height"));

Drawing Commands with Relative Coordinates

When the geometry command Relative property is true, the X and Y properties of plotter commands and the Left, Top, Right, Bottom properties of draw box commands, as well as other properties that define command "locations" are in shape "relative" coordinates. This helps you create scalable geometries that are defined as "factors" from the shape Width and Height. Although this can also be achieved via expressions (for example Width*0.5, Height*0.3), using relative coordinates is more memory efficient and fast to calculate. The previous two examples can be rewritten with relative commands as follows:

Relative Commands
Copy Code
// draw rect using relative plotter commands to fill the shape Width/Height box
NShape rect = new NShape();
rect.Init2DShape();
rect.Geometry.AddRelative(new NMoveTo(0, 0));
rect.Geometry.AddRelative(new NLineTo(1, 0));
rect.Geometry.AddRelative(new NLineTo(1, 1));
rect.Geometry.AddRelative(new NLineTo(0, 1));
rect.Geometry.CloseLastFigure = true;
// draw ellipse using relative draw box commands to fill the shape Width/Height box
NShape ellipse = new NShape();
ellipse.Init2DShape();
ellipse.Geometry.AddRelative(new NDrawEllipse(0, 0, 1, 1));
Geometry Appearance

If ShowFill is true, the area surrounded by the geometry will be filled with the filling specified by the Fill property. The FillRule property specifies the algorithm used to define whether a point is inside the geometry or not. By default it is set to EvenOdd.

If ShowStroke is true, the geometry outline will be stroked with the Stroke property.

If ShowShadow is true, the area surrounded by the geometry will drop the shadow specified by the Shadow property.

If ShowArrowheads is true, the geometry will display the arrowheads specified by the BeginArrowhead and EndArrowhead properties at the first and last geometry points respectively.

Any graphics path created by the NGeometry object can have round corners, which is controlled by the CornerRounding property.

Send Feedback