jscad-electronics 0.0.202 → 0.0.204
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +32 -2
- package/dist/index.js +1090 -828
- package/dist/index.js.map +1 -1
- package/dist/vanilla.d.ts +32 -2
- package/dist/vanilla.js +268 -16
- package/dist/vanilla.js.map +1 -1
- package/package.json +1 -1
package/dist/vanilla.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { BufferGeometry } from 'three';
|
|
|
3
3
|
import * as jscadModeling from '@jscad/modeling';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
import * as _jscad_modeling_src_geometries_types from '@jscad/modeling/src/geometries/types';
|
|
6
|
-
import { ButtonScrewModelPropsInput, CableGrommetModelPropsInput, CompressionSpringModelPropsInput, FlangedBushingModelPropsInput, FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexNutModelPropsInput, HexSocketBoltModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, SheetMetalModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
|
|
6
|
+
import { ButtonScrewModelPropsInput, CableGrommetModelPropsInput, CompressionSpringModelPropsInput, FlangedBushingModelPropsInput, FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexNutModelPropsInput, HexSocketBoltModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, SheetMetalModelPropsInput, TSlotExtrusionModelPropsInput, TSlotInsideCornerModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
|
|
7
7
|
|
|
8
8
|
type VNode = {
|
|
9
9
|
type: any;
|
|
@@ -269,6 +269,36 @@ type SpurGearProps = SpurGearModelPropsInput & {
|
|
|
269
269
|
declare function createSpurGearGeom(input: SpurGearModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
|
|
270
270
|
declare function SpurGear({ color, ...props }: SpurGearProps): react_jsx_runtime.JSX.Element;
|
|
271
271
|
|
|
272
|
+
interface TSlotExtrusionMesh {
|
|
273
|
+
positions: number[];
|
|
274
|
+
indices: number[];
|
|
275
|
+
}
|
|
276
|
+
/** Four straight-sided T grooves and an optional bore, all open at both ends.
|
|
277
|
+
* Section centered in XY; end mounting datum Z=0, length extends along +Z.
|
|
278
|
+
*/
|
|
279
|
+
declare function createTSlotExtrusionMesh(input?: TSlotExtrusionModelPropsInput): TSlotExtrusionMesh;
|
|
280
|
+
|
|
281
|
+
type TSlotExtrusionProps = TSlotExtrusionModelPropsInput & {
|
|
282
|
+
color?: string;
|
|
283
|
+
};
|
|
284
|
+
declare function createTSlotExtrusionGeom(input?: TSlotExtrusionModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
|
|
285
|
+
declare function TSlotExtrusion({ color, ...props }: TSlotExtrusionProps): react_jsx_runtime.JSX.Element;
|
|
286
|
+
|
|
287
|
+
interface TSlotInsideCornerMesh {
|
|
288
|
+
positions: number[];
|
|
289
|
+
indices: number[];
|
|
290
|
+
}
|
|
291
|
+
/** Constant-thickness quarter bend joining two perpendicular drilled legs.
|
|
292
|
+
* Virtual inside corner is X=Z=0; width is centered on Y. No internal seam caps.
|
|
293
|
+
*/
|
|
294
|
+
declare function createTSlotInsideCornerMesh(input?: TSlotInsideCornerModelPropsInput): TSlotInsideCornerMesh;
|
|
295
|
+
|
|
296
|
+
type TSlotInsideCornerProps = TSlotInsideCornerModelPropsInput & {
|
|
297
|
+
color?: string;
|
|
298
|
+
};
|
|
299
|
+
declare function createTSlotInsideCornerGeom(input?: TSlotInsideCornerModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
|
|
300
|
+
declare function TSlotInsideCorner({ color, ...props }: TSlotInsideCornerProps): react_jsx_runtime.JSX.Element;
|
|
301
|
+
|
|
272
302
|
/** Indexed triangles, counterclockwise from outside; millimeters, Z up. */
|
|
273
303
|
interface WormGearMesh {
|
|
274
304
|
positions: number[];
|
|
@@ -297,4 +327,4 @@ declare function createJSCADRenderer(jscad: typeof jscadModeling): {
|
|
|
297
327
|
};
|
|
298
328
|
};
|
|
299
329
|
|
|
300
|
-
export { ButtonScrew, type ButtonScrewMesh, type ButtonScrewMeshOptions, type ButtonScrewProps, CableGrommet, type CableGrommetMesh, type CableGrommetMeshOptions, type CableGrommetProps, type ColoredGeom, CompressionSpring, type CompressionSpringMesh, type CompressionSpringMeshOptions, type CompressionSpringProps, FlangedBushing, type FlangedBushingMesh, type FlangedBushingProps, FlatHeadScrew, type FlatHeadScrewMesh, type FlatHeadScrewMeshOptions, type FlatHeadScrewProps, Fragment, HelicalGear, type HelicalGearMesh, type HelicalGearProps, HexBolt, type HexBoltMesh, type HexBoltMeshOptions, type HexBoltProps, HexNut, type HexNutMesh, type HexNutMeshOptions, type HexNutProps, HexSocketBolt, type HexSocketBoltMesh, type HexSocketBoltProps, NEMA17, NEMA23, NEMA8, type NemaFrameMotorProps, NemaMotor, type NemaMotorProps, PanScrew, type PanScrewMesh, type PanScrewMeshOptions, type PanScrewProps, PlainBushing, type PlainBushingMesh, type PlainBushingProps, type RenderResult, SheetMetal, type SheetMetalMesh, type SheetMetalProps, SpurGear, type SpurGearMesh, type SpurGearProps, type VNode, WormGear, type WormGearMesh, type WormGearProps, convertCSGToThreeGeom, createButtonScrewGeom, createButtonScrewMesh, createCableGrommetGeom, createCableGrommetMesh, createCompressionSpringGeom, createCompressionSpringMesh, createFlangedBushingGeom, createFlangedBushingMesh, createFlatHeadScrewGeom, createFlatHeadScrewMesh, createHelicalGearGeom, createHelicalGearMesh, createHexBoltGeom, createHexBoltMesh, createHexNutGeom, createHexNutMesh, createHexSocketBoltGeom, createHexSocketBoltMesh, createJSCADRenderer, createPanScrewGeom, createPanScrewMesh, createPlainBushingGeom, createPlainBushingMesh, createSheetMetalGeom, createSheetMetalMesh, createSpurGearGeom, createSpurGearMesh, createWormGearGeom, createWormGearMesh, getJscadModelForFootprint, getJscadModelForFootprintWithPads, h };
|
|
330
|
+
export { ButtonScrew, type ButtonScrewMesh, type ButtonScrewMeshOptions, type ButtonScrewProps, CableGrommet, type CableGrommetMesh, type CableGrommetMeshOptions, type CableGrommetProps, type ColoredGeom, CompressionSpring, type CompressionSpringMesh, type CompressionSpringMeshOptions, type CompressionSpringProps, FlangedBushing, type FlangedBushingMesh, type FlangedBushingProps, FlatHeadScrew, type FlatHeadScrewMesh, type FlatHeadScrewMeshOptions, type FlatHeadScrewProps, Fragment, HelicalGear, type HelicalGearMesh, type HelicalGearProps, HexBolt, type HexBoltMesh, type HexBoltMeshOptions, type HexBoltProps, HexNut, type HexNutMesh, type HexNutMeshOptions, type HexNutProps, HexSocketBolt, type HexSocketBoltMesh, type HexSocketBoltProps, NEMA17, NEMA23, NEMA8, type NemaFrameMotorProps, NemaMotor, type NemaMotorProps, PanScrew, type PanScrewMesh, type PanScrewMeshOptions, type PanScrewProps, PlainBushing, type PlainBushingMesh, type PlainBushingProps, type RenderResult, SheetMetal, type SheetMetalMesh, type SheetMetalProps, SpurGear, type SpurGearMesh, type SpurGearProps, TSlotExtrusion, type TSlotExtrusionMesh, type TSlotExtrusionProps, TSlotInsideCorner, type TSlotInsideCornerMesh, type TSlotInsideCornerProps, type VNode, WormGear, type WormGearMesh, type WormGearProps, convertCSGToThreeGeom, createButtonScrewGeom, createButtonScrewMesh, createCableGrommetGeom, createCableGrommetMesh, createCompressionSpringGeom, createCompressionSpringMesh, createFlangedBushingGeom, createFlangedBushingMesh, createFlatHeadScrewGeom, createFlatHeadScrewMesh, createHelicalGearGeom, createHelicalGearMesh, createHexBoltGeom, createHexBoltMesh, createHexNutGeom, createHexNutMesh, createHexSocketBoltGeom, createHexSocketBoltMesh, createJSCADRenderer, createPanScrewGeom, createPanScrewMesh, createPlainBushingGeom, createPlainBushingMesh, createSheetMetalGeom, createSheetMetalMesh, createSpurGearGeom, createSpurGearMesh, createTSlotExtrusionGeom, createTSlotExtrusionMesh, createTSlotInsideCornerGeom, createTSlotInsideCornerMesh, createWormGearGeom, createWormGearMesh, getJscadModelForFootprint, getJscadModelForFootprintWithPads, h };
|
package/dist/vanilla.js
CHANGED
|
@@ -183,24 +183,24 @@ var FootprintPlatedHole = ({
|
|
|
183
183
|
import { buttonScrewModelDefinitionSchema } from "@tscircuit/modelprinter";
|
|
184
184
|
|
|
185
185
|
// lib/model-registry.ts
|
|
186
|
-
function defineModelRenderer(
|
|
187
|
-
return
|
|
186
|
+
function defineModelRenderer(model19) {
|
|
187
|
+
return model19;
|
|
188
188
|
}
|
|
189
189
|
var ModelRendererRegistry = class {
|
|
190
190
|
models = /* @__PURE__ */ new Map();
|
|
191
|
-
register(
|
|
192
|
-
if (typeof
|
|
191
|
+
register(model19) {
|
|
192
|
+
if (typeof model19.name !== "string" || !/^[a-z]+$/.test(model19.name)) {
|
|
193
193
|
throw new Error(
|
|
194
194
|
"Model renderer names must contain only lowercase letters"
|
|
195
195
|
);
|
|
196
196
|
}
|
|
197
|
-
if (this.models.has(
|
|
198
|
-
throw new Error(`Model renderer "${
|
|
197
|
+
if (this.models.has(model19.name)) {
|
|
198
|
+
throw new Error(`Model renderer "${model19.name}" is already registered`);
|
|
199
199
|
}
|
|
200
|
-
if (
|
|
200
|
+
if (model19.pads !== "none" && model19.pads !== "footprinter") {
|
|
201
201
|
throw new Error('Model renderer pads must be "none" or "footprinter"');
|
|
202
202
|
}
|
|
203
|
-
const { name, schema, render: render2, pads } =
|
|
203
|
+
const { name, schema, render: render2, pads } = model19;
|
|
204
204
|
this.models.set(name, {
|
|
205
205
|
name,
|
|
206
206
|
schema,
|
|
@@ -2919,6 +2919,250 @@ function register15(registry) {
|
|
|
2919
2919
|
registry.register(model15);
|
|
2920
2920
|
}
|
|
2921
2921
|
|
|
2922
|
+
// lib/models/tslotextrusion/register.tsx
|
|
2923
|
+
import { tSlotExtrusionModelDefinitionSchema } from "@tscircuit/modelprinter";
|
|
2924
|
+
|
|
2925
|
+
// lib/models/tslotextrusion/mesh.ts
|
|
2926
|
+
import {
|
|
2927
|
+
tSlotExtrusionModelPropsSchema
|
|
2928
|
+
} from "@tscircuit/modelprinter";
|
|
2929
|
+
|
|
2930
|
+
// lib/mechanical/extrude-planar-profile.ts
|
|
2931
|
+
import earcut4 from "earcut";
|
|
2932
|
+
function extrudePlanarProfile({
|
|
2933
|
+
outer,
|
|
2934
|
+
holes = [],
|
|
2935
|
+
start,
|
|
2936
|
+
end,
|
|
2937
|
+
project = (u, v, depth) => [u, v, depth],
|
|
2938
|
+
reverse = false,
|
|
2939
|
+
skipWall = () => false
|
|
2940
|
+
}) {
|
|
2941
|
+
const oriented = (loop, clockwise) => {
|
|
2942
|
+
loop = loop.filter((point, index) => {
|
|
2943
|
+
const previous = loop[(index + loop.length - 1) % loop.length];
|
|
2944
|
+
return point[0] !== previous[0] || point[1] !== previous[1];
|
|
2945
|
+
});
|
|
2946
|
+
const area = loop.reduce((sum, a, index) => {
|
|
2947
|
+
const b = loop[(index + 1) % loop.length];
|
|
2948
|
+
return sum + a[0] * b[1] - a[1] * b[0];
|
|
2949
|
+
}, 0);
|
|
2950
|
+
if (!Number.isFinite(area) || area === 0)
|
|
2951
|
+
throw new Error("Profile exceeds mesh resolution limits");
|
|
2952
|
+
return area < 0 === clockwise ? loop : [...loop].reverse();
|
|
2953
|
+
};
|
|
2954
|
+
const loops = [oriented(outer, false), ...holes.map((h2) => oriented(h2, true))];
|
|
2955
|
+
const points = loops.flat();
|
|
2956
|
+
const holeStarts = [];
|
|
2957
|
+
let count = loops[0].length;
|
|
2958
|
+
for (const hole of loops.slice(1)) {
|
|
2959
|
+
holeStarts.push(count);
|
|
2960
|
+
count += hole.length;
|
|
2961
|
+
}
|
|
2962
|
+
const faces = earcut4(points.flat(), holeStarts);
|
|
2963
|
+
const positions = [start, end].flatMap(
|
|
2964
|
+
(depth) => points.flatMap(([u, v]) => project(u, v, depth))
|
|
2965
|
+
);
|
|
2966
|
+
const indices = [];
|
|
2967
|
+
for (let i = 0; i < faces.length; i += 3) {
|
|
2968
|
+
const [a, b, c] = faces.slice(i, i + 3);
|
|
2969
|
+
indices.push(a, c, b, a + count, b + count, c + count);
|
|
2970
|
+
}
|
|
2971
|
+
let offset = 0;
|
|
2972
|
+
for (const [loopIndex, loop] of loops.entries()) {
|
|
2973
|
+
for (let i = 0; i < loop.length; i++) {
|
|
2974
|
+
const next = (i + 1) % loop.length;
|
|
2975
|
+
if (loopIndex === 0 && skipWall(loop[i], loop[next])) continue;
|
|
2976
|
+
const a = offset + i;
|
|
2977
|
+
const b = offset + next;
|
|
2978
|
+
indices.push(a, b, b + count, a, b + count, a + count);
|
|
2979
|
+
}
|
|
2980
|
+
offset += loop.length;
|
|
2981
|
+
}
|
|
2982
|
+
if (reverse)
|
|
2983
|
+
for (let i = 0; i < indices.length; i += 3)
|
|
2984
|
+
[indices[i + 1], indices[i + 2]] = [indices[i + 2], indices[i + 1]];
|
|
2985
|
+
return { positions, indices };
|
|
2986
|
+
}
|
|
2987
|
+
function joinProfileMeshes(meshes) {
|
|
2988
|
+
const positions = [];
|
|
2989
|
+
const indices = [];
|
|
2990
|
+
const vertices = /* @__PURE__ */ new Map();
|
|
2991
|
+
for (const mesh of meshes) {
|
|
2992
|
+
for (const index of mesh.indices) {
|
|
2993
|
+
const point = mesh.positions.slice(index * 3, index * 3 + 3);
|
|
2994
|
+
const key = point.map((value) => value.toFixed(12)).join(",");
|
|
2995
|
+
let shared = vertices.get(key);
|
|
2996
|
+
if (shared === void 0) {
|
|
2997
|
+
shared = positions.length / 3;
|
|
2998
|
+
vertices.set(key, shared);
|
|
2999
|
+
positions.push(...point);
|
|
3000
|
+
}
|
|
3001
|
+
indices.push(shared);
|
|
3002
|
+
}
|
|
3003
|
+
}
|
|
3004
|
+
return { positions, indices };
|
|
3005
|
+
}
|
|
3006
|
+
function circularProfile(x, y, radius, segments = 96) {
|
|
3007
|
+
return Array.from({ length: segments }, (_, index) => {
|
|
3008
|
+
const angle = index * 2 * Math.PI / segments;
|
|
3009
|
+
return [x + radius * Math.cos(angle), y + radius * Math.sin(angle)];
|
|
3010
|
+
});
|
|
3011
|
+
}
|
|
3012
|
+
|
|
3013
|
+
// lib/models/tslotextrusion/mesh.ts
|
|
3014
|
+
function createTSlotExtrusionMesh(input = {}) {
|
|
3015
|
+
const props = tSlotExtrusionModelPropsSchema.parse(input);
|
|
3016
|
+
const { width: width10, height: height10, length, cornerRadius, lipThickness, pocketDepth } = props;
|
|
3017
|
+
const slot = props.slotWidth / 2;
|
|
3018
|
+
const pocket = props.pocketWidth / 2;
|
|
3019
|
+
const depth = lipThickness + pocketDepth;
|
|
3020
|
+
const outer = [];
|
|
3021
|
+
for (let face2 = 0; face2 < 4; face2++) {
|
|
3022
|
+
const span = (face2 % 2 === 0 ? width10 : height10) / 2;
|
|
3023
|
+
const extent = (face2 % 2 === 0 ? height10 : width10) / 2;
|
|
3024
|
+
const local = [
|
|
3025
|
+
[-span + cornerRadius, -extent],
|
|
3026
|
+
[-slot, -extent],
|
|
3027
|
+
[-slot, -extent + lipThickness],
|
|
3028
|
+
[-pocket, -extent + lipThickness],
|
|
3029
|
+
[-pocket, -extent + depth],
|
|
3030
|
+
[pocket, -extent + depth],
|
|
3031
|
+
[pocket, -extent + lipThickness],
|
|
3032
|
+
[slot, -extent + lipThickness],
|
|
3033
|
+
[slot, -extent],
|
|
3034
|
+
[span - cornerRadius, -extent]
|
|
3035
|
+
];
|
|
3036
|
+
if (cornerRadius > 0)
|
|
3037
|
+
for (let step = 1; step < 24; step++) {
|
|
3038
|
+
const angle = -Math.PI / 2 + step * Math.PI / 48;
|
|
3039
|
+
local.push([
|
|
3040
|
+
span - cornerRadius + cornerRadius * Math.cos(angle),
|
|
3041
|
+
-extent + cornerRadius + cornerRadius * Math.sin(angle)
|
|
3042
|
+
]);
|
|
3043
|
+
}
|
|
3044
|
+
for (const [u, v] of local)
|
|
3045
|
+
outer.push(
|
|
3046
|
+
face2 === 0 ? [u, v] : face2 === 1 ? [-v, u] : face2 === 2 ? [-u, -v] : [v, -u]
|
|
3047
|
+
);
|
|
3048
|
+
}
|
|
3049
|
+
return extrudePlanarProfile({
|
|
3050
|
+
outer,
|
|
3051
|
+
holes: props.boreDiameter > 0 ? [circularProfile(0, 0, props.boreDiameter / 2)] : [],
|
|
3052
|
+
start: 0,
|
|
3053
|
+
end: length
|
|
3054
|
+
});
|
|
3055
|
+
}
|
|
3056
|
+
|
|
3057
|
+
// lib/models/tslotextrusion/TSlotExtrusion.tsx
|
|
3058
|
+
function createTSlotExtrusionGeom(input = {}) {
|
|
3059
|
+
return indexedMeshToGeom3(createTSlotExtrusionMesh(input));
|
|
3060
|
+
}
|
|
3061
|
+
function TSlotExtrusion({
|
|
3062
|
+
color = "#8995a3",
|
|
3063
|
+
...props
|
|
3064
|
+
}) {
|
|
3065
|
+
return /* @__PURE__ */ jsx(Colorize, { color, children: /* @__PURE__ */ jsx(Custom, { geometry: createTSlotExtrusionGeom(props) }) });
|
|
3066
|
+
}
|
|
3067
|
+
|
|
3068
|
+
// lib/models/tslotextrusion/register.tsx
|
|
3069
|
+
var model16 = defineModelRenderer({
|
|
3070
|
+
name: "tslotextrusion",
|
|
3071
|
+
schema: tSlotExtrusionModelDefinitionSchema,
|
|
3072
|
+
render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotExtrusion, { ...props }),
|
|
3073
|
+
pads: "none"
|
|
3074
|
+
});
|
|
3075
|
+
function register16(registry) {
|
|
3076
|
+
registry.register(model16);
|
|
3077
|
+
}
|
|
3078
|
+
|
|
3079
|
+
// lib/models/tslotinsidecorner/register.tsx
|
|
3080
|
+
import { tSlotInsideCornerModelDefinitionSchema } from "@tscircuit/modelprinter";
|
|
3081
|
+
|
|
3082
|
+
// lib/models/tslotinsidecorner/mesh.ts
|
|
3083
|
+
import {
|
|
3084
|
+
tSlotInsideCornerModelPropsSchema
|
|
3085
|
+
} from "@tscircuit/modelprinter";
|
|
3086
|
+
function createTSlotInsideCornerMesh(input = {}) {
|
|
3087
|
+
const props = tSlotInsideCornerModelPropsSchema.parse(input);
|
|
3088
|
+
const { width: width10, legLength, thickness, bendRadius, holeOffset, holeDiameter } = props;
|
|
3089
|
+
const r = bendRadius;
|
|
3090
|
+
const outerRadius = r + thickness;
|
|
3091
|
+
const panel = [
|
|
3092
|
+
[r, -width10 / 2],
|
|
3093
|
+
[legLength, -width10 / 2],
|
|
3094
|
+
[legLength, width10 / 2],
|
|
3095
|
+
[r, width10 / 2]
|
|
3096
|
+
];
|
|
3097
|
+
const holes = [circularProfile(holeOffset, 0, holeDiameter / 2)];
|
|
3098
|
+
const bend = [];
|
|
3099
|
+
if (r === 0) bend.push([0, 0]);
|
|
3100
|
+
else
|
|
3101
|
+
for (let step = 0; step <= 48; step++) {
|
|
3102
|
+
const angle = -Math.PI / 2 - step * Math.PI / 96;
|
|
3103
|
+
bend.push(
|
|
3104
|
+
step === 0 ? [r, 0] : step === 48 ? [0, r] : [r + r * Math.cos(angle), r + r * Math.sin(angle)]
|
|
3105
|
+
);
|
|
3106
|
+
}
|
|
3107
|
+
for (let step = 0; step <= 48; step++) {
|
|
3108
|
+
const angle = -Math.PI + step * Math.PI / 96;
|
|
3109
|
+
bend.push(
|
|
3110
|
+
step === 0 ? [-thickness, r] : step === 48 ? [r, -thickness] : [
|
|
3111
|
+
r + outerRadius * Math.cos(angle),
|
|
3112
|
+
r + outerRadius * Math.sin(angle)
|
|
3113
|
+
]
|
|
3114
|
+
);
|
|
3115
|
+
}
|
|
3116
|
+
return joinProfileMeshes([
|
|
3117
|
+
extrudePlanarProfile({
|
|
3118
|
+
outer: panel,
|
|
3119
|
+
holes,
|
|
3120
|
+
start: -thickness,
|
|
3121
|
+
end: 0,
|
|
3122
|
+
skipWall: (a, b) => a[0] === r && b[0] === r
|
|
3123
|
+
}),
|
|
3124
|
+
extrudePlanarProfile({
|
|
3125
|
+
outer: panel,
|
|
3126
|
+
holes,
|
|
3127
|
+
start: -thickness,
|
|
3128
|
+
end: 0,
|
|
3129
|
+
project: (u, v, depth) => [depth, v, u],
|
|
3130
|
+
reverse: true,
|
|
3131
|
+
skipWall: (a, b) => a[0] === r && b[0] === r
|
|
3132
|
+
}),
|
|
3133
|
+
extrudePlanarProfile({
|
|
3134
|
+
outer: bend,
|
|
3135
|
+
start: -width10 / 2,
|
|
3136
|
+
end: width10 / 2,
|
|
3137
|
+
project: (u, v, depth) => [u, depth, v],
|
|
3138
|
+
reverse: true,
|
|
3139
|
+
skipWall: (a, b) => a[0] === r && b[0] === r || a[1] === r && b[1] === r
|
|
3140
|
+
})
|
|
3141
|
+
]);
|
|
3142
|
+
}
|
|
3143
|
+
|
|
3144
|
+
// lib/models/tslotinsidecorner/TSlotInsideCorner.tsx
|
|
3145
|
+
function createTSlotInsideCornerGeom(input = {}) {
|
|
3146
|
+
return indexedMeshToGeom3(createTSlotInsideCornerMesh(input));
|
|
3147
|
+
}
|
|
3148
|
+
function TSlotInsideCorner({
|
|
3149
|
+
color = "#8995a3",
|
|
3150
|
+
...props
|
|
3151
|
+
}) {
|
|
3152
|
+
return /* @__PURE__ */ jsx(Colorize, { color, children: /* @__PURE__ */ jsx(Custom, { geometry: createTSlotInsideCornerGeom(props) }) });
|
|
3153
|
+
}
|
|
3154
|
+
|
|
3155
|
+
// lib/models/tslotinsidecorner/register.tsx
|
|
3156
|
+
var model17 = defineModelRenderer({
|
|
3157
|
+
name: "tslotinsidecorner",
|
|
3158
|
+
schema: tSlotInsideCornerModelDefinitionSchema,
|
|
3159
|
+
render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotInsideCorner, { ...props }),
|
|
3160
|
+
pads: "none"
|
|
3161
|
+
});
|
|
3162
|
+
function register17(registry) {
|
|
3163
|
+
registry.register(model17);
|
|
3164
|
+
}
|
|
3165
|
+
|
|
2922
3166
|
// lib/models/wormgear/register.tsx
|
|
2923
3167
|
import { wormGearModelDefinitionSchema } from "@tscircuit/modelprinter";
|
|
2924
3168
|
|
|
@@ -2927,7 +3171,7 @@ import {
|
|
|
2927
3171
|
getWormGearDimensions,
|
|
2928
3172
|
wormGearModelPropsSchema
|
|
2929
3173
|
} from "@tscircuit/modelprinter";
|
|
2930
|
-
import
|
|
3174
|
+
import earcut5 from "earcut";
|
|
2931
3175
|
var createWormGearMesh = (input) => {
|
|
2932
3176
|
const props = wormGearModelPropsSchema.parse(input);
|
|
2933
3177
|
const { outsideDiameter, rootDiameter, axialPitch, lead, toothThickness } = getWormGearDimensions(props);
|
|
@@ -3080,7 +3324,7 @@ var createWormGearMesh = (input) => {
|
|
|
3080
3324
|
positions[vertex * 3],
|
|
3081
3325
|
positions[vertex * 3 + 1]
|
|
3082
3326
|
]);
|
|
3083
|
-
const triangles =
|
|
3327
|
+
const triangles = earcut5(flat, [count], 2);
|
|
3084
3328
|
for (let index = 0; index < triangles.length; index += 3) {
|
|
3085
3329
|
const a = vertices[triangles[index]];
|
|
3086
3330
|
const b = vertices[triangles[index + 1]];
|
|
@@ -3108,14 +3352,14 @@ function WormGear({ color = "#737e8f", ...props }) {
|
|
|
3108
3352
|
}
|
|
3109
3353
|
|
|
3110
3354
|
// lib/models/wormgear/register.tsx
|
|
3111
|
-
var
|
|
3355
|
+
var model18 = defineModelRenderer({
|
|
3112
3356
|
name: "wormgear",
|
|
3113
3357
|
schema: wormGearModelDefinitionSchema,
|
|
3114
3358
|
render: ({ fn, ...props }) => /* @__PURE__ */ jsx(WormGear, { ...props }),
|
|
3115
3359
|
pads: "none"
|
|
3116
3360
|
});
|
|
3117
|
-
function
|
|
3118
|
-
registry.register(
|
|
3361
|
+
function register18(registry) {
|
|
3362
|
+
registry.register(model18);
|
|
3119
3363
|
}
|
|
3120
3364
|
|
|
3121
3365
|
// lib/generated/model-renderers.ts
|
|
@@ -3136,6 +3380,8 @@ function registerAllModelRenderers(registry) {
|
|
|
3136
3380
|
register14(registry);
|
|
3137
3381
|
register15(registry);
|
|
3138
3382
|
register16(registry);
|
|
3383
|
+
register17(registry);
|
|
3384
|
+
register18(registry);
|
|
3139
3385
|
}
|
|
3140
3386
|
|
|
3141
3387
|
// lib/default-model-registry.ts
|
|
@@ -10692,10 +10938,10 @@ var SOT143 = ({ footprint = "sot143" }) => {
|
|
|
10692
10938
|
var Footprinter3d = ({ footprint }) => {
|
|
10693
10939
|
const modelFn = mp3.string(footprint.split("_", 1)[0]).params().fn;
|
|
10694
10940
|
if (mp3.getModelNames().includes(modelFn)) {
|
|
10695
|
-
const
|
|
10696
|
-
const renderer = modelRendererRegistry.get(
|
|
10941
|
+
const model19 = mp3.string(footprint).json();
|
|
10942
|
+
const renderer = modelRendererRegistry.get(model19.fn);
|
|
10697
10943
|
if (renderer) {
|
|
10698
|
-
return renderer.render(
|
|
10944
|
+
return renderer.render(model19);
|
|
10699
10945
|
}
|
|
10700
10946
|
}
|
|
10701
10947
|
let normalizedFootprint = footprint;
|
|
@@ -11664,6 +11910,8 @@ export {
|
|
|
11664
11910
|
PlainBushing,
|
|
11665
11911
|
SheetMetal,
|
|
11666
11912
|
SpurGear,
|
|
11913
|
+
TSlotExtrusion,
|
|
11914
|
+
TSlotInsideCorner,
|
|
11667
11915
|
WormGear,
|
|
11668
11916
|
convertCSGToThreeGeom,
|
|
11669
11917
|
createButtonScrewGeom,
|
|
@@ -11693,6 +11941,10 @@ export {
|
|
|
11693
11941
|
createSheetMetalMesh,
|
|
11694
11942
|
createSpurGearGeom,
|
|
11695
11943
|
createSpurGearMesh,
|
|
11944
|
+
createTSlotExtrusionGeom,
|
|
11945
|
+
createTSlotExtrusionMesh,
|
|
11946
|
+
createTSlotInsideCornerGeom,
|
|
11947
|
+
createTSlotInsideCornerMesh,
|
|
11696
11948
|
createWormGearGeom,
|
|
11697
11949
|
createWormGearMesh,
|
|
11698
11950
|
getJscadModelForFootprint,
|