CTS_EdgeCraft_Pro_V1.0.1
Author: CAD Tools Studio
Website: https://www.cadtoolsstudio.com/

Install this RBZ through SketchUp Extension Manager and restart SketchUp.
This package updates the existing extension in place. Its internal file names
and saved model metadata remain compatible with previous SPE Fillet versions.
The confirmed v5.7.1 fillet methods are retained.
The seventh toolbar button, About & Support (i), opens product information
and the CAD Tools Studio website for support.

Previous geometry release notes and usage

INSTALL
SketchUp > Extension Manager > Install Extension > select this RBZ.
Restart SketchUp after updating. Use View > Toolbars > SPE Fillet PRO.
Keep only one installation of this extension.

SIX TOOLS
1 2D Fillet Apply     2 2D Fillet Edit
3 2D Chamfer Apply    4 2D Chamfer Edit
5 3D Fillet          6 Edit Fillet

2D
Select two coplanar lines, or a complete planar path and enable Multiple corners.
Enter radius/segments or chamfer Distance 1 and Distance 2. Inspect preview.
Click corner squares to include/exclude; drag handles to resize. Apply commits.
In edit mode excluded corners retain their saved values.
Flat face outlines without holes are supported; branch junctions are skipped.

3D
Select edges/faces or a group/component, enter radius and segments, then Apply.
Dragging displays the preview; releasing commits using the requested segments.
Lightweight Preview uses up to 6 segments while dragging and 12 at rest.
Enable edge picking to include/exclude: orange included, gray excluded.
Open nested groups to select their edges. Partial object editing requires
unscaled geometry. Radius/shape limitations still apply.

EDIT ONLY ONE OF A BATCH
Pick the fillet with Edit Fillet. Enable include/exclude, and check only its
number in the list (or click numbered markers). Set radius/segments, Update.
Unchecked fillets retain their saved parameters. Shared corners are rebuilt.
If dependent geometry cannot rebuild, the update is cancelled.

existing fillet. Smooth surface keeps borders visible for picking.
Automatic cleanup remains part of fillet creation; the separate finishing button is removed.

UNDO / REDO
Each completed Apply, Update or Remove is one Undo operation.
One Undo reverses the last completed action; a batch applied in one action is
undone as a batch. Repeated Undo reverses earlier actions in order.
Esc or closing a tool cancels its preview. Preview display operations are
aborted before final geometry operations, cancellation and tool switching.
Undo/Redo are native SketchUp actions; the extension never issues extra Undo.

PERFORMANCE AND PREVIEW
Keep Lightweight Preview enabled for complex models. Lower segment counts
reduce geometry size. Preview updates are throttled while dragging.
Tool bounds include 2D/3D previews, markers and warnings to reduce clipping.
This does not change SketchUp's camera, near plane or model rendering settings.

VALIDATION / LIMITS
Ruby syntax, JavaScript event tests, dependencies and archive checked.
Geometry engines retained from the previous version. No claim of SketchUp
certification or full runtime validation: native SketchUp is unavailable here.
Test Undo/Redo after two separate applications, an edit and a removal; test
Esc/window close and tool switching during preview on a copy of your model.
Official API references used:
https://ruby.sketchup.com/Sketchup/Tool.html
https://ruby.sketchup.com/Sketchup/Model.html

LOOP AND RING (3D CREATE WINDOW)
Click Loop or Ring, then click a sharp starting edge on the model.
Loop follows the face outline associated with the picked edge (when ambiguous,
it uses the most camera-facing adjoining face). Where no complete eligible
face loop exists, it follows an unbranched connected chain and stops at branches.
Ring selects parallel sharp edges within that edge's connected shell.
This replaces the current selection. Review orange included edges, click to
exclude, then Apply. Turn off edge picking before dragging.
Nested geometry: open its group/component first.
Edit Fillet continues to use its numbered include/exclude controls.

RING SCOPE
Same boundary (default): uses explicit face hole loops to separate outer
edges from opening edges, including straight through-hole longitudinal edges.
It does not use convex/concave bend sign as a substitute for hole membership.
If no hole boundary is available, it limits selection to the picked face
instead of guessing. The status explains this fallback.
Selected face only: click Ring, click inside the desired face, then its edge.
Parallel edges are limited to the same face boundary loop as the starting edge.
All connected parallel edges: restores the previous full-shell Ring behaviour.
Complex openings with ambiguous topology may require Selected face only.

5.5.2 PERFORMANCE UPDATE
Convex clipping reuses untouched polygons and caches plane distances.
Holed-object classification triangulates the shell once for all candidate edges.
These reduce calculation work; native SketchUp speed has not been measured.
Rounded opening rim / connected sweep failures are NOT fixed in this update.
An SKP with the original geometry and failing edge selection is needed to
reproduce the 96-edge rounded-opening case.

5.6.0 CONNECTED PLANAR RIMS
Complete planar rim loops now use one coordinated quarter-round mesh.
Supports inner openings, outer boundaries and segmented/rounded profiles
where the adjoining walls are perpendicular to the cap. Select a complete
boundary with LOOP, set radius and segments, then Apply. Multiple complete
loops on one face can be selected together. Preview, Apply and saved Edit
use the same rim calculation. Other edge selections use existing methods.
Group/component creation also uses this method when every selected hard
edge belongs to supported complete rims; other objects use existing engines.
Caps are retriangulated with SketchUp's Geom.tesselate (SketchUp 2020+).
The replacement is checked for closure before replacing source geometry.
684 numerical Ruby cases using geometry extracted from fillet(1).skp passed.
SketchUp face insertion, interactive speed and Undo need native verification.
This does not promise arbitrary nonplanar loops or intersecting fillet radii.

5.7.0 MATERIAL-SIDE AND EXTRUSION CORRECTION
Local edge fillets now derive their inward direction from the selected
boundary loop. A distant vertex across an opening no longer determines
the rounding direction. Outer and inner loops, and reversed face normals,
are handled independently.
A new simultaneous solver covers complete closed straight extrusions with
planar perpendicular end caps, concave profiles, and through-openings.
It joins longitudinal corner rounds and both end rims as a single mesh.
Select a fresh group/component, or all sharp edges of one loose solid,
then 3D Fillet, radius/segments and Apply. Preview and saved Edit use the
same solver. Select individual edges for local fillets or use Loop for rims.
Previously generated SPE faces use the existing history/rim methods.
Radii that exceed profile corner spacing, wall width or half the extrusion
depth are rejected. Arbitrary non-prismatic objects retain earlier methods.
Validation: 2,388 material-side assertions; 153 successful whole-extrusion
mesh cases; 3 excessive-radius cases rejected on the smaller hex frame.
Checks used geometry decoded from fillet(1).skp and Ruby 3.2.6. Numerical
tessellation in the test harness used earcut as a stand-in; native SketchUp
face creation, interactive timing, materials and Undo still need verification.

5.7.1 SELECTED PARALLEL FRAME EDGES
Selected single or parallel straight edges now use simultaneous side-rail
and end-face reconstruction when their end faces are planar and perpendicular.
This supports inner and outer parallel frame-edge selections without
expanding the selection to the entire frame or rounding unselected edges.
Apply, live preview and saved-edit preview share this calculation.
The whole-group extrusion method from 5.7.0 is unchanged.
Unsupported partial selections retain the existing methods.
Validation: 1,284 closed-mesh and consistent-winding numerical cases on
rectangular through-frame fixtures, including single, paired, four-edge
and complete parallel selections at 1 inch and 2 inches with 15 segments.
Native SketchUp face creation and interaction have not been tested here.

INCLUDED FIXES: OPEN EDITING CONTEXT / MEETING LIMIT
Preview, picking markers and Loop/Ring no longer apply edit_transform
twice to positions already returned in world coordinates by SketchUp.
Picking validates membership of the current active editing context.
For supported create-mode radius/overlap failures, a numerical search finds
a common valid radius just below contact and updates the radius field.
A small clearance prevents zero-width faces. This is a common radius limit,
not local trimming of individual fillets at their original requested radius.
Review the retained preview and choose Apply, a different radius, or Cancel.
A drag that reaches this limit does not auto-apply on mouse release.
Unrelated geometry/programming errors are not converted to radius limits.
History Edit and unsupported local engines retain their existing checks.
Checks: 1,284 existing parallel-edge cases; six oversized frame selections
clamped to closed, consistently wound meshes. Native SketchUp interaction,
open-context placement and Undo still require an in-app check.

INCLUDED FIXES: OPEN FOLDED SHEETS
3D Fillet now rounds straight parallel ridges/valleys on open folded sheets
with perpendicular open ends, including selected edges and whole groups
or components consisting of this supported geometry.
Select the sharp fold edges, or the folded-sheet object, then use 3D Fillet.
Radius/segments, preview and saved-source editing use the shared parallel
solver. No thickness or end caps are added. Single-face free boundary edges
are not 3D bends; use 2D Fillet for flat outline corners.
Only original open boundaries and newly rounded end arcs may remain open;
unexpected gaps or non-manifold edges reject the replacement.
198 numerical open-sheet cases and 1,284 closed-frame regression cases passed.
Native SketchUp insertion, appearance, group interaction and Undo are untested.
This does not add general nonparallel junctions or arbitrary curved sheet support.

2D FACE PRESERVATION CORRECTION (FINAL 1.0.0)
Single-corner 2D Fillet Create and Edit now capture and rebuild the face
supported by the replaced boundary edges, including its openings, face
direction, material, back material, tag and face attributes. Wire-only
paths remain wire-only. Unsupported shared-face boundary changes stop
before deletion, and a failed rebuild aborts the operation.
The existing multi-corner face reconstruction and all 3D tools are unchanged.
Ruby syntax and archive checks passed; native SketchUp testing is needed.

FINAL 1.0.0: CHAMFER FACE PRESERVATION / SIMPLIFIED PANELS
2D Chamfer Create and Edit use the same face-preservation helper as 2D
Fillet, retaining supported face boundaries, holes, materials and direction.
Preset controls removed from 2D Fillet, 2D Chamfer, 3D Fillet and Edit panels.
Radius/distance controls, segments, preview, drag and include/exclude remain.
Version stays 1.0.0. Native SketchUp face creation still needs verification.

Release review corrections (version remains 1.0.0)
- Guide is packaged inside the extension support folder.
- Internal imports use Sketchup.require for encrypted distribution.
- About & Support > Show Diagnostics lists session fallback errors.
- 2D error handlers abort only operations started by that command.
- Fillet calculations, presets policy, toolbar names and geometry behavior are unchanged.
- Native SketchUp Undo/Redo and encrypted-package validation remain required before submission.

Performance update (version remains 1.0.0)
- Reduced temporary vector allocations without changing formulas or tolerances.
- Indexed incident faces and edge pairs instead of repeatedly scanning whole lists.
- Faster connected-shell bookkeeping for objects containing many separate solids.
- Tolerance-aware spatial lookup for large point lists; original order retained.
- Coalesced parameter preview requests; Apply cancels a pending redundant preview.
- Numerical comparison: 36 meshes match exactly; this is not a native SketchUp speed benchmark.
- Same radius, final segments, geometry engines and edit history.

Group responsiveness update (version 1.0.0)
- Skip full candidate-edge enumeration when no edges are excluded.
- Scan each geometry context once when expanding multiple saved fillet batches.
- Use membership lookups during cleanup instead of repeated array comparisons.
- About & Support > Show Diagnostics now includes recent preview, calculation, copying, tagging and Apply durations. Nested durations overlap and must not be added together.
- No 1-2 second runtime guarantee. Final geometry algorithms are unchanged.

Multiple-opening solid correction (version 1.0.0)
- Extended the existing orthogonal connected-network method to faces with multiple boundary loops.
- Outer boundaries and hole boundaries retain opposite winding and correct face-side offsets.
- Retained faces are triangulated with their holes; aligned opening vertices split long tessellation edges to avoid unmatched seams.
- Closed-mesh validation remains enabled. Unsupported shapes still cancel rather than leave damaged geometry.
- Uploaded Untitled.skp: 36 vertices, 54 edges, 20 faces, three openings. Twelve numerical cases passed at 0.25, 1 and 5 inches with 1, 6, 12 and 50 segments. Nine legacy cube meshes match exactly.
- Numerical triangulation uses a test substitute; native SketchUp tessellation/insertion still requires an in-app check.
- This shape generates 6,564 faces at 12 segments and 95,484 at 50. Try 12 segments for lower workload; no fixed total runtime is guaranteed.

Rounded mixed-corner correction (version 1.0.0)
- Corners with one concave edge meeting two convex edges now use a four-sided rolling corner with a rounded retained-face boundary.
- Edge strips use edge-specific corner endpoints instead of stretching both to one sharp retained-face vertex.
- Convex-only cube meshes remain identical. Unsupported mixed configurations retain the existing fallback.
- Added Keep fillet borders visible (default on for compatibility). Turn it off with Smooth surface enabled to smooth and hide transition lines. Stored in edit history; previous batches remain protected.
- Actual source-model checks pass at three radii and four segment counts, preserving three openings and closed topology. The comparison-file setting (6 inch radius / 5 segments) passes consistent winding and topology checks.
- New method face counts supersede the previous entry: 2,300 at 5 segments, 10,616 at 12, 161,780 at 50 for this particular model. High segments remain expensive.
- Numerical tests use a substitute tessellator. Native SketchUp insertion and visual matching still need in-app verification.

Release 1.0.1
Version update only. Includes embedded edit-history data and local fillet smoothing.

Release 1.0.2 - Pocket boundary triangulation
- Retained network faces with multiple openings now triangulate using the exact original boundary vertices. Rounded pocket surfaces and planar faces share the same seam coordinates without native tessellation reconstruction.
- Every hole boundary is retained; the generated mesh must still pass closed-surface validation before replacing the source.
- Removed the 256-source-face cutoff from the orthogonal network recognizer. Eligibility depends on geometry and topology rather than an arbitrary face count.
- Component_1.skp contains two blind rectangular pockets (not through-holes). Its extracted geometry passes numerical closed-mesh checks at 1 inch radius and 6, 12 and 20 segments. Additional 1, 3 and 8-pocket solids pass the same checks. Planar boundary tests also pass for 1, 2, 5 and 20 curved holes.
- These are numerical Ruby geometry checks outside SketchUp. Native SketchUp insertion and the recorded interaction need an in-app check.
- Install this RBZ through Extension Manager and restart SketchUp to reload the Ruby modules. Test the original component at 1 inch / 20 segments.

Release 1.1.0 - Connected polygonal mesh core
- Complete sharp-edge selections, whole-object Apply, preview and numerical radius probes now share MeshFilletKernel. The proven orthogonal pocket method is retained for true right-angle shells; other closed polygonal shells use GeneralNetworkBevel.
- Edge tangencies use the actual support-face angles. Concave outlines, irregular profiles, mixed rectangular/circular/polygonal holes, blind pocket floors, and corners with more than three incident edges use one coordinated reconstruction.
- Coplanar triangulation edges and harmless collinear splits are normalized. Face winding is made consistent. Differing materials/tags across coplanar seams are retained.
- Smooth faceted wall joints stay unrounded unless explicitly selected. Their adjoining rim strips share an exact sampled cylinder-intersection curve so they do not overlap at the join.
- Planar boundaries use one deterministic triangulator across network, prism, planar-rim and parallel-edge paths. All original loop vertices are restored to shared seams. No fixed opening-count limit is imposed.
- The connected core validates closure, opposite edge winding and mesh self-intersections before inserting a temporary result. Native face/edge checks must also pass before the source is erased. Unsupported topology or insertion failures cancel the operation.
- Higher-valence vertex joins are sampled mesh blends. They are not a general analytic CAD rolling-ball surface solver. Closely spaced features still impose a maximum valid radius; the existing Lite preview can reduce a collision radius and display the adjustment.
- The general whole-shell solver requires one closed orientable manifold shell. Partial selections continue to use the existing specialized/local paths. Arbitrary partial networks, pinched vertices, incompatible smooth miters, and nonuniformly scaled group contexts are not covered by a universal guarantee.
- Numerical regression results and primary research sources are included in CORE_VALIDATION.txt and CORE_RESEARCH.txt. Native SketchUp insertion, visual appearance and the complete interactive Edit workflow have not been run in this environment.
- Install the RBZ through Extension Manager and restart SketchUp so the new Ruby modules load. Use the whole-object tool or select the complete sharp network for the coordinated solver.

Release 1.1.1 - Corner construction and speed
- Fixed pointed joins at mixed convex/concave rim corners in the general core.
  Circular or angled geometry elsewhere no longer changes how a rectangular
  pocket corner is constructed. Polygon-wall angles drive the same rolling
  corner treatment at perpendicular rims.
- Planar fillet panels remain quads. SketchUp 2022+ creates retained faces
  directly with their hole loops; older versions use indexed PolygonMesh.
- Optimized collision and topology validation while keeping source protection
  on fit errors, dropped holes and native insertion failures.
- Preview, fit and Apply reuse validated geometry when the current model,
  selection, shape, radius, segments, materials/tags and finish flags match.
- The comparison file uses 8 segments in EdgeCraft and 4 in Bevel, with different
  profiles/offsets. Set 4 segments when comparing the same resolution. More
  segments produce more geometry; this update does not silently lower them.
- See CORNER_SPEED_VALIDATION.txt for calculation-only timing measurements.
  A total Apply time below one second has not been certified in SketchUp.
- Install this updated RBZ through Extension Manager, restart SketchUp, and
  apply to the original sharp model or use Edit Fillet on the saved result.
- Radius fitting now checks boundary clearance during its search, then checks
  the complete final mesh. Hidden collisions still use the full search. The
  comparison case drops from 8 complete mesh checks to 1 during fitting.
