Skip to main content
OCCT category icon with a stylized logo representation

Creating Wires Via Points

Imagine you're sketching a path through a landscape, connecting landmarks along the way. In 3D modeling, creating wires from points follows the same principle - you define key locations in space and let OCCT connect them in different ways to create the exact path you need.

When Would You Use Point-Based Wires?

Think of real-world scenarios where you need to connect specific locations:

  • Tracing a coastline from GPS coordinates collected during a survey
  • Designing a race track that must pass through mandatory checkpoints
  • Creating a roller coaster path with smooth curves through scenic viewpoints
  • Plotting a robot's movement through precise manufacturing positions
  • Sketching a building outline from surveyed property corners

The Different Ways to Connect Your Points

OCCT offers several methods to connect points, each creating a different type of path. Most of these methods create open-ended wires - paths with distinct start and end points. To create closed shapes, you'll typically combine these wires with additional segments or use specialized closing operations.

Straight-Line Connections

These create angular, precise paths perfect for architectural or mechanical designs:

  • Line Wire: The simplest connection - imagine drawing a ruler-straight line between two distant points
  • Polyline Wire: Like connecting dots with straight lines, creating sharp turns at each point
  • Polygon Wire: Similar to polyline, but automatically closes the shape by connecting back to the start

Smooth Curved Connections

These create flowing, organic paths ideal for natural forms or aesthetic designs:

  • Interpolated Wire: Like threading a flexible cable through each point - the curve passes exactly through every location
  • Bezier Wire: Points act like magnets pulling on a rubber band - the curve flows toward them but may not touch each one
  • BSpline Wire: The most sophisticated option, offering mathematical precision for complex industrial curves

A Story of Six Paths

Picture yourself as a landscape architect designing a garden path system. You have five scenic viewpoints that visitors should experience. Here's how each wire method would create a different journey:

Polylines and Polygons

You want visitors to walk directly between viewpoints with clear sight lines. Polylines create this direct, no-nonsense path with sharp turns at each viewpoint. Polygons add a final segment back to the starting point, creating a complete loop tour.

Perfect for: Property boundaries, building floor plans, mechanical part outlines

Interpolated Curves

You want a gentle, flowing path that guides visitors smoothly through each viewpoint without jarring direction changes. The path bends gracefully, ensuring visitors experience every scenic spot while maintaining a natural walking rhythm.

Perfect for: Natural landscape features, aerodynamic surfaces, smooth motion paths

Bezier and BSpline Curves

You want artistic control over the path's character. The viewpoints influence the route's direction and feel, but the path may curve away from some points to create a more aesthetically pleasing or functionally optimal journey.

Perfect for: Automotive body panels, artistic sculptures, complex industrial surfaces

Example: Comprehensive Point-Based Wire Creation

This example demonstrates all major methods for creating wires from points, showing how the same set of points can produce dramatically different geometric results depending on the chosen method.

Bitbybit Platform

Comprehensive wire creation from points

rete logoRete
Script Source (rete)
{
"id": "rete-v2-json",
"nodes": {
"a1b2c3d4e5f6": {
"id": "a1b2c3d4e5f6",
"name": "bitbybit.vector.vectorXYZ",
"customName": "point 1",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": -4,
"y": 0,
"z": 0
},
"inputs": {},
"position": [
-493.02397782786227,
470.80511748455797
]
},
"b2c3d4e5f6a1": {
"id": "b2c3d4e5f6a1",
"name": "bitbybit.vector.vectorXYZ",
"customName": "point 2",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": -2,
"y": 0,
"z": 1
},
"inputs": {},
"position": [
-495.9775535174124,
824.4887151951773
]
},
"c3d4e5f6a1b2": {
"id": "c3d4e5f6a1b2",
"name": "bitbybit.vector.vectorXYZ",
"customName": "point 3",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 0,
"z": -1
},
"inputs": {},
"position": [
-498.99641218710724,
1176.422611805823
]
},
"d4e5f6a1b2c3": {
"id": "d4e5f6a1b2c3",
"name": "bitbybit.vector.vectorXYZ",
"customName": "point 4",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 2,
"y": 0,
"z": 2
},
"inputs": {},
"position": [
-494.97355151391963,
1517.6141247865087
]
},
"e5f6a1b2c3d4": {
"id": "e5f6a1b2c3d4",
"name": "bitbybit.vector.vectorXYZ",
"customName": "point 5",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 4,
"y": 0,
"z": 0
},
"inputs": {},
"position": [
-495.0539579019686,
1869.4137045825596
]
},
"7f6450ede1fffa90": {
"id": "7f6450ede1fffa90",
"name": "bitbybit.lists.createList",
"customName": "points list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "a1b2c3d4e5f6",
"output": "result",
"data": {}
},
{
"node": "b2c3d4e5f6a1",
"output": "result",
"data": {}
},
{
"node": "c3d4e5f6a1b2",
"output": "result",
"data": {}
},
{
"node": "d4e5f6a1b2c3",
"output": "result",
"data": {}
},
{
"node": "e5f6a1b2c3d4",
"output": "result",
"data": {}
}
]
}
},
"position": [
40.11505123394138,
1197.376085706432
]
},
"g7h8i9j0k1l2": {
"id": "g7h8i9j0k1l2",
"name": "bitbybit.occt.shapes.wire.createLineWire",
"customName": "line wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"start": [
0,
0,
0
],
"end": [
0,
1,
0
]
},
"inputs": {
"start": {
"connections": [
{
"node": "a1b2c3d4e5f6",
"output": "result",
"data": {}
}
]
},
"end": {
"connections": [
{
"node": "e5f6a1b2c3d4",
"output": "result",
"data": {}
}
]
}
},
"position": [
40.34197448254858,
1404.5659712296927
]
},
"h8i9j0k1l2m3": {
"id": "h8i9j0k1l2m3",
"name": "bitbybit.occt.shapes.wire.createPolylineWire",
"customName": "polyline wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"points": {
"connections": [
{
"node": "7f6450ede1fffa90",
"output": "list",
"data": {}
}
]
}
},
"position": [
700,
487.8255618667852
]
},
"i9j0k1l2m3n4": {
"id": "i9j0k1l2m3n4",
"name": "bitbybit.occt.shapes.wire.createPolygonWire",
"customName": "polygon wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"points": {
"connections": [
{
"node": "7f6450ede1fffa90",
"output": "list",
"data": {}
}
]
}
},
"position": [
699.1789247688082,
787.174190182404
]
},
"j0k1l2m3n4o5": {
"id": "j0k1l2m3n4o5",
"name": "bitbybit.occt.shapes.wire.interpolatePoints",
"customName": "interpolated wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"periodic": false,
"tolerance": 1e-7
},
"inputs": {
"points": {
"connections": [
{
"node": "7f6450ede1fffa90",
"output": "list",
"data": {}
}
]
}
},
"position": [
695.6631417444979,
1082.0937782727924
]
},
"z9a8b7c6d5e4": {
"id": "z9a8b7c6d5e4",
"name": "bitbybit.occt.shapes.wire.interpolatePoints",
"customName": "interpolated periodic wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"periodic": true,
"tolerance": 1e-7
},
"inputs": {
"points": {
"connections": [
{
"node": "7f6450ede1fffa90",
"output": "list",
"data": {}
}
]
}
},
"position": [
695.6631417444979,
1282.0937782727924
]
},
"k1l2m3n4o5p6": {
"id": "k1l2m3n4o5p6",
"name": "bitbybit.occt.shapes.wire.createBezier",
"customName": "bezier wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"closed": false
},
"inputs": {
"points": {
"connections": [
{
"node": "7f6450ede1fffa90",
"output": "list",
"data": {}
}
]
}
},
"position": [
703.115902028841,
1558.639999951643
]
},
"l2m3n4o5p6q7": {
"id": "l2m3n4o5p6q7",
"name": "bitbybit.occt.shapes.wire.createBSpline",
"customName": "bspline wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"closed": false
},
"inputs": {
"points": {
"connections": [
{
"node": "7f6450ede1fffa90",
"output": "list",
"data": {}
}
]
}
},
"position": [
703.2502480679341,
1909.062052995027
]
},
"m3n4o5p6q7r8": {
"id": "m3n4o5p6q7r8",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate polyline",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "h8i9j0k1l2m3",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "n4o5p6q7r8s9",
"output": "result",
"data": {}
}
]
}
},
"position": [
2130.9911604585623,
696.2845715130113
]
},
"n4o5p6q7r8s9": {
"id": "n4o5p6q7r8s9",
"name": "bitbybit.vector.vectorXYZ",
"customName": "translate vector 1",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 1,
"z": 0
},
"inputs": {},
"position": [
1563.8510440039506,
751.8708579320071
]
},
"o5p6q7r8s9t0": {
"id": "o5p6q7r8s9t0",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate polygon",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "i9j0k1l2m3n4",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "p6q7r8s9t0u1",
"output": "result",
"data": {}
}
]
}
},
"position": [
2128.221783011097,
1034.8714527347215
]
},
"p6q7r8s9t0u1": {
"id": "p6q7r8s9t0u1",
"name": "bitbybit.vector.vectorXYZ",
"customName": "translate vector 2",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 2,
"z": 0
},
"inputs": {},
"position": [
1583.6289311585433,
1126.022776389753
]
},
"q7r8s9t0u1v2": {
"id": "q7r8s9t0u1v2",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate interpolated",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "j0k1l2m3n4o5",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "r8s9t0u1v2w3",
"output": "result",
"data": {}
}
]
}
},
"position": [
2120.580884589621,
1392.6205311000572
]
},
"r8s9t0u1v2w3": {
"id": "r8s9t0u1v2w3",
"name": "bitbybit.vector.vectorXYZ",
"customName": "translate vector 3",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 3,
"z": 0
},
"inputs": {},
"position": [
1595.1616223823362,
1510.5004742140454
]
},
"x8y9z0a1b2c3": {
"id": "x8y9z0a1b2c3",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate interpolated periodic",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "z9a8b7c6d5e4",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "y7z8a9b0c1d2",
"output": "result",
"data": {}
}
]
}
},
"position": [
2120.445985591514,
1820.0396707912366
]
},
"y7z8a9b0c1d2": {
"id": "y7z8a9b0c1d2",
"name": "bitbybit.vector.vectorXYZ",
"customName": "translate vector 4",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 4,
"z": 0
},
"inputs": {},
"position": [
1595.1616223823362,
1926.7229970623423
]
},
"s9t0u1v2w3x4": {
"id": "s9t0u1v2w3x4",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate bezier",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "k1l2m3n4o5p6",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "t0u1v2w3x4y5",
"output": "result",
"data": {}
}
]
}
},
"position": [
2150.4698332469884,
2297.3727581079825
]
},
"t0u1v2w3x4y5": {
"id": "t0u1v2w3x4y5",
"name": "bitbybit.vector.vectorXYZ",
"customName": "translate vector 5",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 5,
"z": 0
},
"inputs": {},
"position": [
1618.2924967222198,
2400.1867524589516
]
},
"u1v2w3x4y5z6": {
"id": "u1v2w3x4y5z6",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate bspline",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "l2m3n4o5p6q7",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "v2w3x4y5z6a7",
"output": "result",
"data": {}
}
]
}
},
"position": [
2147.1321542489886,
2634.941303378405
]
},
"v2w3x4y5z6a7": {
"id": "v2w3x4y5z6a7",
"name": "bitbybit.vector.vectorXYZ",
"customName": "translate vector 6",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 6,
"z": 0
},
"inputs": {},
"position": [
1620.6403379243168,
2810.8480642892005
]
}
}
}

Understanding the Results

When you run this example, you'll see six different paths connecting the same five points. Each represents a different approach to the journey:

Line Wire (Bottom)

The most direct route - ignores the scenic stops and goes straight from start to finish.

Polyline Wire (Second from bottom)

The methodical tourist route - visits every viewpoint with efficient straight-line segments between them.

Polygon Wire (Third from bottom)

The complete circuit tour - same as polyline but returns to the starting point to complete the loop.

Interpolated Wire (Fourth from bottom)

The scenic route - flows smoothly through every viewpoint like a gentle river following its course.

Interpolated Periodic Wire (Fifth from bottom)

The endless garden path - creates a smooth, closed loop that flows through all points and seamlessly connects back to itself.

Bezier Wire (Sixth from bottom)

The artistic interpretation - the viewpoints inspire the path's direction, creating an elegant curve that captures the essence of the journey.

BSpline Wire (Top)

The engineer's precision path - mathematically optimized for specific curve properties while responding to the viewpoint influences.

Choosing Your Path

When You Need Precise Control

Line and Polyline wires are your friends when every point must be exactly where you specify - think building corners, property boundaries, or mechanical part edges where precision trumps aesthetics.

When You Need Natural Flow

Interpolated wires create organic, flowing shapes perfect for landscapes, water features, or any design where you want smooth transitions through specific locations.

When You Need Artistic Freedom

Bezier and BSpline wires give you creative control over the overall shape while using your points as guides rather than absolute requirements - ideal for automotive styling, product design, or architectural features.

Important Note: Open vs. Closed Wires

Most point-based wire methods create open-ended paths with distinct start and end points. While polygon wires and periodic interpolated wires automatically close themselves, other methods produce open wires that you can later:

  • Combine with additional wire segments to create complex closed shapes
  • Use as building blocks for more sophisticated geometries
  • Connect to other wires using OCCT's wire joining operations
  • Transform into faces when combined with other wires to form closed boundaries

Understanding point-based wire creation opens the door to more advanced OCCT operations like face creation, surface modeling, and complex 3D shape development. These wires become the foundation elements that you'll combine and transform to build sophisticated geometries.