Technical Documentation for fxBladeEdgeFeatures.ovm
Version 2026Q1 | Last Updated: January 22, 2026 | SolidCut CAD 2025
The Blade Edge Feature Recognition System analyzes fixture blade geometry to identify and classify faces for gripper placement, plunger positioning, and other manufacturing operations. It uses a topology-based walk algorithm to traverse blade faces starting from the pocket floor.
The system handles compound-angle blades using a transform-first methodology:
Left pocket wall faces only. Walls that face left (NormX < -0.7) on the interior of the pocket.
Right pocket wall faces only. Walls that face right (NormX > 0.7) on the interior of the pocket.
Pocket floor faces only. Downward-facing faces (NormZ < -0.7) at the bottom of the pocket.
All interior pocket surfaces - left walls, right walls, floor, and interior fillets/steps.
Left exterior wall only. The outside face on the left edge of the blade.
Right exterior wall only. The outside face on the right edge of the blade.
Blade base (bottom) only. The upward-facing face at the base of the blade.
Top face on left arm only. The downward-facing top face on the left side.
Top face on right arm only. The downward-facing top face on the right side.
All exterior surfaces including base, exterior walls, and top faces.
Exterior walls and tops, but NOT the blade base. Useful for side-access operations.
Everything except top and thickness faces. Interior + exterior walls + base + floors.
ALL faces including thickness faces. Complete blade surface selection.
Everything EXCEPT upward-facing base faces. All walls, floors, fillets, tops.
| Color | RGB | Meaning |
|---|---|---|
| GREEN | (0, 255, 0) | Selected face - included in results |
| RED | (255, 0, 0) | Pocket floor (reference face) - always stays red for visual distinction |
| YELLOW | (255, 255, 0) | Top faces - reference, usually excluded |
| BLUE | (0, 0, 255) | Thickness faces - usually excluded |
| MAGENTA | (255, 0, 255) | Not selected for current mode |
| CYAN | (0, 128, 255) | Base faces - for all-everything mode |
| ORANGE | (255, 128, 0) | Wrong orientation - skipped |
| BROWN | (128, 64, 0) | Traversed but not selected |
call fxBladeEdgeFeatures i_mode i_bladeBody w_radius w_interval w_clearance w_depthOffset $_zone
| Parameter | Type | Description |
|---|---|---|
i_mode |
Integer | Operation mode: i_EDGE_FEAT_GRIPPERS (1) or i_EDGE_FEAT_PLUNGERS (2) |
i_bladeBody |
Integer | Body number of the blade to analyze |
w_radius |
Float | Tool radius for gripper/plunger placement |
w_interval |
Float | Spacing interval between placements |
w_clearance |
Float | Clearance distance from blade edge |
w_depthOffset |
Float | Depth offset for tool positioning |
$_zone |
String | Zone selector (see modes above) |
Results are stored in VDM set i_VDM_BLADE_EDGE_FACES containing selected face IDs.
Zone configuration is used for per-blade customization. For full JSON API documentation including blade creation parameters, see π JSON Schema Configuration.
π Schema Reference: See JSON Schema Reference β Zone Configuration for the complete schema definition including zone modes, tool types, and parameter options.
Internal flags control face selection behavior for each mode:
| Mode | wantLeft | wantRight | wantBottom | wantLeftOut | wantRightOut | wantBottomOut | includeTop | includeOut |
|---|---|---|---|---|---|---|---|---|
| left-inside | β | |||||||
| right-inside | β | |||||||
| bottom-inside | β | |||||||
| all-inside | β | β | β | |||||
| left-outside | β | β | ||||||
| right-outside | β | β | ||||||
| bottom-outside | β | β | ||||||
| all-outside | β | β | β | β | β | |||
| all-outside-except-base | β | β | β | β | ||||
| all-no-topZFaces | β | β | β | β | β | β | β | |
| all-everything | β | β | β | β | β | β | β | β |
| all-everything-except-base | β | β | β | β | β | β | β |
When walking from one face to the next, the algorithm uses priority selection:
'*** Face Classification by Normal Direction
if abs( w_faceNormX ) > 0.7 then
'*** Wall face (left or right facing)
if w_faceNormX < -0.7 then
'*** Left-facing wall
else
'*** Right-facing wall
end if
else if w_faceNormZ < -0.7 then
'*** Downward-facing = Floor or Top surface
if w_faceZ < w_midZ then
'*** Interior floor
else
'*** Top face
end if
else if w_faceNormZ > 0.7 then
'*** Upward-facing = Base face
else if abs( w_faceNormY ) > 0.7 then
'*** Thickness face (front/back of blade)
end if
Due to the topology walk algorithm, when i_includeTop=FALSE, the walk stops at top-area fillets. Faces geometrically "beyond" those fillets may not be reached. This is expected behavior based on the blade's specific topology.
Workaround: Use all-everything-except-base instead, which includes top faces and thus can traverse to all areas.
L-shaped blades (open on one side) are automatically detected. The walk starts only from the side that has an interior wall.
| Issue | Possible Cause | Solution |
|---|---|---|
| No faces selected | Blade not properly oriented | Check blade normal calculation |
| Missing interior walls | Pocket floor not detected | Verify blade has interior pocket geometry |
| Wrong faces selected | Incorrect mode specified | Review mode flag settings |
| Walk stops early | Thickness face encountered | Expected behavior - check blade geometry |
call fxTestBladeEdgeModes i_bladeBody
Runs all 14 modes sequentially with visual verification pauses.
Use a U-channel blade with compound angle for comprehensive testing. Key faces to verify:
Two new edge feature types for mounting clamping devices to blade faces. These provide downward clamping force to hold parts during cutting. Both types use the face detection modes above to determine placement surfaces.
| Type ID | Name | Constant | Description |
|---|---|---|---|
| 7 | Side Plate (Gusset) | i_EDGE_FEAT_SIDE_PLATE | Clip-together flat pieces with triangular gusset braces |
| 8 | Bend-Tab T-Plate | i_EDGE_FEAT_BEND_TAB | Single-piece bent clamp shelf, self-locking, 3-bend design |
Multiple flat laser-cut pieces that slot together and bolt to the blade face. Triangular gusset braces provide structural rigidity. Best for heavy clamping loads, thick materials, and permanent fixtures.
These screenshots from the original 2019 SolidCut development show the side plate concept with triangular gusset braces already modeled as 3D solid geometry. Key observations from this prototype:
This 2019 work forms the basis for Variant A in the current system. The new automation will generate these assemblies programmatically from face detection results, rather than manual placement.
A single flat laser-cut blank (double-T shape) that bends at three scored lines and enters the blade twice — through a top mortise and back through a lower ratchet slot — creating a self-locking clip secured with a pin.
BACK βBLADEβ FRONT
β β
stop βββββββββββββββββͺββββββͺββ
(wide) β mor β β BEND 1 (+10Β° shown, could be -10Β°)
β tiseβ β²
β β β²ββββββββββββ β shelf (~15mm span)
β β β clamp on top
β β β
β β β BEND 2 (β135Β°)
β β β±
β β β±
β β β± leg
β β β±
β β β±
β β β±
pin βββββββββͺββ β β ββͺβββ BEND 3 β tab thru this slot
βββββββ
βββββββ β more ratchet slots
βββββββ (pick higher = shelf higher)
βββββββ (pick lower = shelf lower)
β β
| Bend | Location | Angle | Purpose |
|---|---|---|---|
| 1 | Just past front blade face | ±10-15° | Shelf tilt (up or down) |
| 2 | Shelf tip (end of ~15mm span) | −135° | Leg kick-back toward blade |
| 3 | Bottom of leg (near blade face) | Calculated | Tab horizontal through ratchet slot |
| Control | How | Range |
|---|---|---|
| Shelf tilt | Bend 1 angle | ±10-15° from horizontal |
| Shelf span | Fixed by blank geometry | Designed per application |
| Leg angle | Bend 2 (always ~−135°) | Fixed by score line position |
| Height on blade | Which ratchet slot tab enters | Discrete steps (e.g. 5mm) |
Note: The isometric view does not clearly show the bend angle — the shelf nominally angles upward at ~45° (or as specified by bendAngle1_tilt) to provide a horizontal or near-horizontal clamping surface for the workpiece. The bend occurs at the small radii / inner slot visible in the front elevation where the clamp exits the blade face.
Note: The isometric view does not clearly show the bend angle — the shelf nominally angles upward at ~45° (or as specified by bendAngle1_tilt) to provide a horizontal or near-horizontal clamping surface for the workpiece. The bend occurs at the small radii / inner slot visible in the front elevation where the clamp exits the blade face.
16ga (1.5mm) to 12ga (2.5mm) only. Must be hand-bendable. For thicker material, use Variant A (clip-together gusset).
Sweet spot: 14ga (2.0mm) — good balance of strength and bendability.
BA = Ο Γ (R + K Γ T) Γ (ΞΈ / 180)
Where:
R = inside bend radius (mm)
K = K-factor (0.33 air bend, 0.50 bottoming)
T = material thickness (mm)
ΞΈ = bend angle (degrees)
Example: 14ga steel (2mm), R=1.5mm, K=0.4
Bend 1 (10Β°): BA = Ο Γ 2.1 Γ 0.056 = 0.37mm
Bend 2 (135Β°): BA = Ο Γ 2.1 Γ 0.750 = 4.95mm
Bend 3 (~45Β°): BA = Ο Γ 2.1 Γ 0.250 = 1.65mm
Not every ratchet slot is reachable at every tilt angle. The combination of bend 1 angle, shelf span, leg length, and bend 2 angle determines which slot the tab can reach. The system must validate reachability and warn if the chosen slot is unreachable.
Z_tab = Z_mortise - shelfSpan Γ sin(tilt) - legLength Γ cos(kick_effective)
Valid slot = closest ratchet slot to Z_tab within Β± (spacing / 2)
| Aspect | Variant A (Gusset/Clip) | Variant B (Bend-Tab) |
|---|---|---|
| Parts count | 3-5 per station | 1 (single blank) |
| Blade modifications | Multiple slots + additions | 1 mortise + ratchet slots |
| Tilt adjustment | Fixed at fabrication | Bend 1 angle (±10-15°) |
| Height adjustment | None | Ratchet slot selection |
| Removal | Difficult (bolted) | Pull pin, slide out |
| Strength | Higher (triangulated) | Lower (bent sheet) |
| Cost | Higher | Much lower |
| Gauge range | Any thickness | 16-12ga only |
| Software complexity | Low (flat = DXF) | Moderate (shared parallel-bend engine) |
π Schema Reference: See JSON Schema Reference β Clamp Shelf Library for the complete Bend-Tab T-Plate schema including defaults, placements, and parameter overrides.
Both Variant B (bend-tab clamps) and zigzag blades use the same fxParallelBend engine. The geometry is always N rectangular segments joined at N-1 parallel bend lines, all perpendicular to the base. The 3D solid is built by extruding each rectangle (SLD BLO), rotating to the bend angle, and unioning all pieces. The flat pattern is the same rectangles laid inline with BA deductions at each joint, stored as a named figure/kurve associated with the solid body.
fxParallelBend.ovm β SHARED ENGINE (clamps + zigzag blades)
βββ fxPB_Build3D N segments β BLO + rotate + UNI β solid
βββ fxPB_BuildFlat BA-deducted flat pattern β figure/kurve
βββ fxPB_ExportDXF Layers: outline, scores, holes
fxEdgeFeat_Dispatch β Main edge feature dispatcher
βββ type 1-6 β Existing features (grippers, plungers, etc.)
βββ type 7 β fxSidePlate β Variant A (clip-together gusset)
β βββ fxSP_BuildLocalCS
β βββ fxSP_PlateProfile
β βββ fxSP_GussetProfile
β βββ fxSP_Slots + Fasteners
β βββ fxSP_Transform + Boolean
βββ type 8 β fxBendTab β Variant B (3-bend T-plate)
βββ fxBT_PrepSegments 4 segments, 3 angles β arrays
βββ call fxPB_Build3D β i_clampBody (3D solid)
βββ call fxPB_BuildFlat β k(n) flat pattern figure
βββ fxBT_AddShelfHoles Drill into 3D + mark on flat
βββ fxBT_BuildMortiseSlot (subtract from blade)
βββ fxBT_BuildRatchetSlots (column of height-adjust slots)
βββ fxBT_TransformToWorld
fxZigzagBlade.ovm (future) β Same shared engine, different inputs
βββ fxZZ_PrepSegments N segments, N-1 angles β arrays
βββ call fxPB_Build3D β i_zigzagBody (3D solid)
βββ call fxPB_BuildFlat β k(n) flat pattern figure