Nucleoβ„’ XYZ+ Blade Generation System

Β© Camtek Software LLC

πŸ”§ Blade Edge Feature Recognition System

Technical Documentation for fxBladeEdgeFeatures.ovm

Version 2026Q1 | Last Updated: January 22, 2026 | SolidCut CAD 2025

1. System Overview

Purpose

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.

Key Capabilities

Supported Blade Types

2. Architecture & Algorithm

Transform-First Approach

The system handles compound-angle blades using a transform-first methodology:

  1. Query Blade Geometry - Extract blade normal from largest planar faces
  2. Build Transform Matrix - Calculate rotation to align blade with Z-up orientation
  3. Transform Blade - Rotate blade so Z-axis points upward (simplified face detection)
  4. Detect Faces - Use topology walk on axis-aligned blade
  5. Store Results - Face IDs are valid in original coordinate system

Algorithm Flow

1
Find Pocket Floor - Identify lowest interior downward-facing face using Z-based detection
2
Detect Open Profile - Check if blade is open on left or right side (L-shaped vs U-channel)
3
Build Edge Map - Create edge-to-face adjacency mapping for topology traversal
4
Walk from Pocket Floor - Bi-directional walk exploring all adjacent faces
5
Classify & Select - Apply mode-specific filters to include/exclude faces
6
Store Results - Save selected face IDs to VDM for downstream processing

3. Detection Modes (14 Total)

Category: INSIDE (Pocket Area) - Modes 1-4

1. left-inside

Left pocket wall faces only. Walls that face left (NormX < -0.7) on the interior of the pocket.

2. right-inside

Right pocket wall faces only. Walls that face right (NormX > 0.7) on the interior of the pocket.

3. bottom-inside

Pocket floor faces only. Downward-facing faces (NormZ < -0.7) at the bottom of the pocket.

4. all-inside

All interior pocket surfaces - left walls, right walls, floor, and interior fillets/steps.

Category: OUTSIDE (Perimeter) - Modes 5-11

5. left-outside

Left exterior wall only. The outside face on the left edge of the blade.

6. right-outside

Right exterior wall only. The outside face on the right edge of the blade.

7. bottom-outside

Blade base (bottom) only. The upward-facing face at the base of the blade.

8. top-left

Top face on left arm only. The downward-facing top face on the left side.

9. top-right

Top face on right arm only. The downward-facing top face on the right side.

10. all-outside

All exterior surfaces including base, exterior walls, and top faces.

11. all-outside-except-base

Exterior walls and tops, but NOT the blade base. Useful for side-access operations.

Category: COMBINATION - Modes 12-14

12. all-no-topZFaces

Everything except top and thickness faces. Interior + exterior walls + base + floors.

⚠️ May miss some faces due to topology walk stopping at top-area fillets

13. all-everything

ALL faces including thickness faces. Complete blade surface selection.

14. all-everything-except-base

Everything EXCEPT upward-facing base faces. All walls, floors, fillets, tops.

4. Color Coding Reference

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

5. API & Parameters

Syntax

call fxBladeEdgeFeatures i_mode i_bladeBody w_radius w_interval w_clearance w_depthOffset $_zone

Parameters

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)

Return Value

Results are stored in VDM set i_VDM_BLADE_EDGE_FACES containing selected face IDs.

6. JSON Schema for Zone Configuration

Zone configuration is used for per-blade customization. For full JSON API documentation including blade creation parameters, see πŸ“‹ JSON Schema Configuration.

Zone Configuration Schema

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "BladeEdgeZoneConfig",
  "type": "object",
  "properties": {
    "bladeId": {
      "type": "integer",
      "description": "Body number of the blade"
    },
    "zones": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "left-inside", "right-inside", "bottom-inside", "all-inside",
              "left-outside", "right-outside", "bottom-outside",
              "top-left", "top-right", "all-outside", "all-outside-except-base",
              "all-no-topZFaces", "all-everything", "all-everything-except-base"
            ]
          },
          "enabled": {
            "type": "boolean",
            "default": true
          },
          "toolType": {
            "type": "string",
            "enum": ["gripper", "plunger", "clamp"]
          },
          "parameters": {
            "type": "object",
            "properties": {
              "radius": { "type": "number" },
              "interval": { "type": "number" },
              "clearance": { "type": "number" },
              "depthOffset": { "type": "number" }
            }
          }
        },
        "required": ["name"]
      }
    }
  },
  "required": ["bladeId", "zones"]
}

Example Configuration

{
  "bladeId": 80,
  "zones": [
    {
      "name": "left-inside",
      "enabled": true,
      "toolType": "gripper",
      "parameters": {
        "radius": 5.0,
        "interval": 50.0,
        "clearance": 2.0,
        "depthOffset": 0
      }
    },
    {
      "name": "right-inside",
      "enabled": true,
      "toolType": "gripper",
      "parameters": {
        "radius": 5.0,
        "interval": 50.0,
        "clearance": 2.0,
        "depthOffset": 0
      }
    },
    {
      "name": "bottom-inside",
      "enabled": false
    }
  ]
}

7. Mode Flag Reference

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βœ“βœ“βœ“βœ“βœ“βœ“βœ“

8. Topology Walk Algorithm

Priority-Based Face Selection

When walking from one face to the next, the algorithm uses priority selection:

  1. Priority 1: Matching Wall - Face with NormX matching walk direction
  2. Priority 2: Fillet/Arc - Face with entity class 4002 (cylindrical)
  3. Priority 3: Any Unvisited - Any adjacent face not yet visited

Walk Termination Conditions

Face Classification Logic

'*** 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

9. Troubleshooting & Known Limitations

⚠️ all-no-topZFaces May Miss Some Exterior Faces

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.

Open Profile Detection

L-shaped blades (open on one side) are automatically detected. The walk starts only from the side that has an interior wall.

Common Issues

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

10. Testing Procedures

Test Macro

call fxTestBladeEdgeModes i_bladeBody

Runs all 14 modes sequentially with visual verification pauses.

Verification Checklist

Test Blade Geometry

Use a U-channel blade with compound angle for comprehensive testing. Key faces to verify: