Common Entities
About 3 min
Common Entities
The most commonly used entity types in everyday development.
LineEnt - Line
const { LineEnt, Engine } = vjcad;
// Create a line
const line = new LineEnt([0, 0], [100, 100]); // Start point, end point
line.setDefaults();
line.color = 1; // Red
Engine.addEntities(line);Properties:
startPoint/endPoint- Start/end point (Point2D)Length- Length (read-only)color- Colorlayer- LayerlineType- LinetypelineTypeScale- Linetype scale
CircleEnt - Circle
const { CircleEnt, Engine } = vjcad;
// Create a circle
const circle = new CircleEnt([50, 50], 30); // Center, radius
circle.setDefaults();
circle.color = 3; // Green
Engine.addEntities(circle);Properties:
center- Center (Point2D)radius- Radiusarea- Area (read-only)circumference- Circumference (read-only)
ArcEnt - Arc
const { ArcEnt, Point2D, Engine } = vjcad;
// Method 1: Center + radius + angles (radians)
const arc = new ArcEnt([50, 50], 30, 0, Math.PI / 2); // 0° to 90°
arc.setDefaults();
Engine.addEntities(arc);
// Method 2: Three-point arc
const arc2 = new ArcEnt();
arc2.initBy3Pt(new Point2D(0, 0), new Point2D(50, 30), new Point2D(100, 0));
arc2.setDefaults();
Engine.addEntities(arc2);Properties:
center- Centerradius- RadiusstartAngle/endAngle- Start/end angle (radians)startPoint/endPoint- Start/end point (read-only)midPoint- Mid point (read-only)length- Arc length (read-only)totalAngle- Central angle (read-only)isClockwise- Whether clockwise (read-only)
Methods:
initBy3Pt(p1, p2, p3)- Create arc through three points
PolylineEnt - Polyline
const { PolylineEnt, BulgePoints, BulgePoint, Engine } = vjcad;
// Method 1: Using setPoints (recommended)
const pline = new PolylineEnt();
pline.setPoints([
[0, 0],
[100, 0],
[100, 60],
[0, 60]
]);
pline.isClosed = true; // Close
pline.setDefaults();
Engine.addEntities(pline);
// Method 2: Chained addPoint
const pline2 = new PolylineEnt();
pline2.addPoint([0, 0])
.addPoint([50, 0], 0.5) // Arc segment with bulge
.addPoint([100, 0]);
pline2.setDefaults();
Engine.addEntities(pline2);
// Method 3: Polyline with arc segments
const pline3 = new PolylineEnt();
pline3.setPoints([
[0, 0], // Straight segment
[[50, 0], 0.5], // Arc segment (bulge 0.5, counter-clockwise)
[100, 0],
[[100, 50], -0.5] // Arc segment (negative bulge, clockwise)
]);
pline3.setDefaults();
Engine.addEntities(pline3);Bulge explanation:
0- Straight line segment1- Semicircular arc (counter-clockwise)-1- Semicircular arc (clockwise)bulge = tan(centralAngle/4)
Properties:
bulgePoints- Vertex collection (BulgePoints)isClosed- Whether closedlength- Total length (read-only)area- Area (when closed, read-only)isCCW- Whether counter-clockwise (read-only)globalWidth- Global width
Methods:
setPoints(points)- Set points in batchaddPoint([x,y], bulge?)- Add point (supports chaining)addPoints(points)- Append points in batchgetPoints()- Get all vertex coordinatesgetPointsWithBulge()- Get vertices with bulge infogetSubEnts()- Get sub-entities (line segments and arcs)
TextEnt - Single-Line Text
const { TextEnt, Engine } = vjcad;
const text = new TextEnt();
text.insertionPoint = [0, 100]; // Insertion point
text.text = "Hello WebCAD"; // Text content
text.height = 10; // Text height
text.rotation = 0; // Rotation angle (radians)
text.textAlignment = 5; // Alignment (see below)
text.setDefaults();
text.color = 2;
Engine.addEntities(text);Text alignment (textAlignment):
7=TopLeft 8=TopCenter 9=TopRight
4=MidLeft 5=MidCenter 6=MidRight
1=Left 2=Center 3=Right (baseline alignment)Special characters:
%%d→ ° (degree)%%c→ Ø (diameter)%%p→ ± (plus-minus)
Properties:
insertionPoint- Insertion pointtext- Text contentheight- Text heightrotation- Rotation angle (radians)textAlignment- Alignment (1-9)widthFactor- Width factorobliqueAngle- Oblique angle (radians)
MTextEnt - Multi-Line Text
const { MTextEnt, Engine } = vjcad;
const mtext = new MTextEnt();
mtext.insertionPoint = [0, 100];
mtext.text = "First line\nSecond line\nThird line"; // \n for line break
mtext.height = 8;
mtext.maxWidth = 80; // Auto wrap when exceeding width
mtext.setDefaults();
Engine.addEntities(mtext);MText format codes (using contents property):
// Color
mtext.contents = "{\\C1;Red}{\\C2;Yellow}{\\C3;Green}";
// Font size
mtext.contents = "{\\H1.5x;Large} Normal {\\H0.7x;Small}";
// Style
mtext.contents = "{\\LUnderline} {\\OOverline} {\\KStrikethrough}";
// Line break
mtext.contents = "First line\\PSecond line";Format code quick reference:
| Code | Function |
|---|---|
\Cn; | Color (1=Red 2=Yellow 3=Green 4=Cyan 5=Blue 6=Magenta 7=White) |
\L / \l | Underline on/off |
\O / \o | Overline on/off |
\K / \k | Strikethrough on/off |
\Hn.nx; | Relative height (e.g. \H1.5x;) |
\Wn; | Width factor |
\P | Line break |
{} | Format grouping |
Properties:
insertionPoint- Insertion pointtext- Text content (supports \n line breaks)contents- Native MText format contentheight- Text heightmaxWidth- Maximum width (auto wrap)textAttachment- Attachment point position (1-9)rotation- Rotation anglerowSpcFac- Line spacing factorshowBorder- Whether to show borderbackgroundFill- Whether to enable backgroundbackgroundFillColor- Background colorbackgroundScaleFactor- Background scale factor
Less Common Entities
EllipseEnt - Ellipse
const { EllipseEnt, Engine } = vjcad;
const ellipse = new EllipseEnt();
ellipse.center = [50, 50];
ellipse.majorAxis = [40, 0]; // Major axis vector
ellipse.radiusRatio = 0.5; // Minor/major axis ratio
ellipse.setDefaults();
Engine.addEntities(ellipse);SplineEnt - Spline Curve
const { SplineEnt, Point2D, Engine } = vjcad;
const spline = new SplineEnt();
spline.setFitPoints([
new Point2D(0, 0),
new Point2D(50, 100),
new Point2D(100, 50),
new Point2D(150, 100)
]);
spline.setDefaults();
Engine.addEntities(spline);RayEnt / XlineEnt - Ray / Construction Line
const { RayEnt, XlineEnt, Engine } = vjcad;
// Ray (extends infinitely from start point in one direction)
const ray = new RayEnt([0, 0], [1, 1]); // Start point, direction
ray.setDefaults();
Engine.addEntities(ray);
// Construction line (extends infinitely in both directions)
const xline = new XlineEnt([50, 50], [1, 0]); // Through point, direction
xline.setDefaults();
Engine.addEntities(xline);DotEnt - Point
const { DotEnt, Engine } = vjcad;
const dot = new DotEnt([50, 50]);
dot.setDefaults();
Engine.addEntities(dot);SolidEnt - Solid Fill
const { SolidEnt, Engine } = vjcad;
// Triangle fill
const solid = new SolidEnt([0, 0], [100, 0], [50, 80]);
solid.setDefaults();
solid.color = 1;
Engine.addEntities(solid);
// Quadrilateral fill
const solid2 = new SolidEnt([0, 0], [100, 0], [0, 80], [100, 80]);
solid2.setDefaults();
Engine.addEntities(solid2);Common Properties
All entities support the following properties:
| Property | Description | Example |
|---|---|---|
color | Color index | 1=Red 2=Yellow 3=Green 4=Cyan 5=Blue 6=Magenta 7=White, 256=ByLayer |
layer | Layer name | "LayerA" |
lineType | Linetype name | "CONTINUOUS", "HIDDEN", "CENTER" |
lineTypeScale | Linetype scale | 1.0 |
lineWeight | Line weight | 15 (0.15mm), -1 ByLayer |
Common Methods
| Method | Description |
|---|---|
setDefaults() | Apply system default properties (must be called before setting other properties) |
boundingBox() | Get bounding box |
clone() | Create a copy |
move(from, to) | Move |
rotate(center, angle) | Rotate (radians) |
scale(center, factor) | Scale |
mirror(p1, p2) | Mirror |