@tscircuit/3d-viewer 0.0.373 → 0.0.375
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.js +53 -16
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -14416,7 +14416,28 @@ var ContainerWithTooltip_default = ContainerWithTooltip;
|
|
|
14416
14416
|
|
|
14417
14417
|
// src/hooks/use-global-obj-loader.ts
|
|
14418
14418
|
import { useState as useState2, useEffect as useEffect3 } from "react";
|
|
14419
|
-
import { MTLLoader, OBJLoader
|
|
14419
|
+
import { MTLLoader, OBJLoader } from "three-stdlib";
|
|
14420
|
+
|
|
14421
|
+
// src/utils/vrml.ts
|
|
14422
|
+
import { VRMLLoader } from "three-stdlib";
|
|
14423
|
+
function sanitizeVrmlIdentifiers(text) {
|
|
14424
|
+
return text.replace(/(DEF|USE)\s+([^\s]+)/g, (match, type, name) => {
|
|
14425
|
+
return `${type} ${name.replace(/-/g, "_")}`;
|
|
14426
|
+
});
|
|
14427
|
+
}
|
|
14428
|
+
async function loadVrml(url) {
|
|
14429
|
+
const response = await fetch(url);
|
|
14430
|
+
if (!response.ok) {
|
|
14431
|
+
throw new Error(
|
|
14432
|
+
`Failed to fetch "${url}": ${response.status} ${response.statusText}`
|
|
14433
|
+
);
|
|
14434
|
+
}
|
|
14435
|
+
const text = await response.text();
|
|
14436
|
+
const loader = new VRMLLoader();
|
|
14437
|
+
return loader.parse(sanitizeVrmlIdentifiers(text), url);
|
|
14438
|
+
}
|
|
14439
|
+
|
|
14440
|
+
// src/hooks/use-global-obj-loader.ts
|
|
14420
14441
|
if (typeof window !== "undefined" && !window.TSCIRCUIT_OBJ_LOADER_CACHE) {
|
|
14421
14442
|
window.TSCIRCUIT_OBJ_LOADER_CACHE = /* @__PURE__ */ new Map();
|
|
14422
14443
|
}
|
|
@@ -14430,8 +14451,7 @@ function useGlobalObjLoader(url) {
|
|
|
14430
14451
|
async function loadAndParseObj() {
|
|
14431
14452
|
try {
|
|
14432
14453
|
if (cleanUrl.endsWith(".wrl")) {
|
|
14433
|
-
|
|
14434
|
-
return await loader.loadAsync(cleanUrl);
|
|
14454
|
+
return await loadVrml(cleanUrl);
|
|
14435
14455
|
}
|
|
14436
14456
|
const response = await fetch(cleanUrl);
|
|
14437
14457
|
if (!response.ok) {
|
|
@@ -14508,7 +14528,8 @@ function MixedStlModel({
|
|
|
14508
14528
|
rotation: rotation2,
|
|
14509
14529
|
onHover,
|
|
14510
14530
|
onUnhover,
|
|
14511
|
-
isHovered
|
|
14531
|
+
isHovered,
|
|
14532
|
+
scale: scale2
|
|
14512
14533
|
}) {
|
|
14513
14534
|
const obj = useGlobalObjLoader(url);
|
|
14514
14535
|
const { rootObject } = useThree();
|
|
@@ -14548,6 +14569,9 @@ function MixedStlModel({
|
|
|
14548
14569
|
model.rotation.copy(rotation2);
|
|
14549
14570
|
}
|
|
14550
14571
|
}
|
|
14572
|
+
if (scale2 !== void 0) {
|
|
14573
|
+
model.scale.setScalar(scale2);
|
|
14574
|
+
}
|
|
14551
14575
|
}, [
|
|
14552
14576
|
model,
|
|
14553
14577
|
Array.isArray(position) ? position[0] : position?.x,
|
|
@@ -14555,7 +14579,8 @@ function MixedStlModel({
|
|
|
14555
14579
|
Array.isArray(position) ? position[2] : position?.z,
|
|
14556
14580
|
Array.isArray(rotation2) ? rotation2[0] : rotation2?.x,
|
|
14557
14581
|
Array.isArray(rotation2) ? rotation2[1] : rotation2?.y,
|
|
14558
|
-
Array.isArray(rotation2) ? rotation2[2] : rotation2?.z
|
|
14582
|
+
Array.isArray(rotation2) ? rotation2[2] : rotation2?.z,
|
|
14583
|
+
scale2
|
|
14559
14584
|
]);
|
|
14560
14585
|
if (obj instanceof Error) {
|
|
14561
14586
|
throw obj;
|
|
@@ -14582,7 +14607,8 @@ function GltfModel({
|
|
|
14582
14607
|
rotation: rotation2,
|
|
14583
14608
|
onHover,
|
|
14584
14609
|
onUnhover,
|
|
14585
|
-
isHovered
|
|
14610
|
+
isHovered,
|
|
14611
|
+
scale: scale2
|
|
14586
14612
|
}) {
|
|
14587
14613
|
const { rootObject } = useThree();
|
|
14588
14614
|
const [model, setModel] = useState3(null);
|
|
@@ -14609,6 +14635,7 @@ function GltfModel({
|
|
|
14609
14635
|
if (!model) return;
|
|
14610
14636
|
if (position) model.position.fromArray(position);
|
|
14611
14637
|
if (rotation2) model.rotation.fromArray(rotation2);
|
|
14638
|
+
if (scale2 !== void 0) model.scale.setScalar(scale2);
|
|
14612
14639
|
}, [
|
|
14613
14640
|
model,
|
|
14614
14641
|
position?.[0],
|
|
@@ -14616,7 +14643,8 @@ function GltfModel({
|
|
|
14616
14643
|
position?.[2],
|
|
14617
14644
|
rotation2?.[0],
|
|
14618
14645
|
rotation2?.[1],
|
|
14619
|
-
rotation2?.[2]
|
|
14646
|
+
rotation2?.[2],
|
|
14647
|
+
scale2
|
|
14620
14648
|
]);
|
|
14621
14649
|
useEffect5(() => {
|
|
14622
14650
|
if (!rootObject || !model) return;
|
|
@@ -16608,6 +16636,7 @@ var cad_component = z101.object({
|
|
|
16608
16636
|
model_glb_url: z101.string().optional(),
|
|
16609
16637
|
model_step_url: z101.string().optional(),
|
|
16610
16638
|
model_wrl_url: z101.string().optional(),
|
|
16639
|
+
model_unit_to_mm_scale_factor: z101.number().optional(),
|
|
16611
16640
|
model_jscad: z101.any().optional()
|
|
16612
16641
|
}).describe("Defines a component on the PCB");
|
|
16613
16642
|
expectTypesMatch(true);
|
|
@@ -25644,7 +25673,8 @@ var JscadModel = ({
|
|
|
25644
25673
|
rotationOffset,
|
|
25645
25674
|
onHover,
|
|
25646
25675
|
onUnhover,
|
|
25647
|
-
isHovered
|
|
25676
|
+
isHovered,
|
|
25677
|
+
scale: scale2
|
|
25648
25678
|
}) => {
|
|
25649
25679
|
const { rootObject } = useThree();
|
|
25650
25680
|
const { threeGeom, material } = useMemo4(() => {
|
|
@@ -25675,6 +25705,7 @@ var JscadModel = ({
|
|
|
25675
25705
|
if (!mesh) return;
|
|
25676
25706
|
if (positionOffset) mesh.position.fromArray(positionOffset);
|
|
25677
25707
|
if (rotationOffset) mesh.rotation.fromArray(rotationOffset);
|
|
25708
|
+
if (scale2 !== void 0) mesh.scale.setScalar(scale2);
|
|
25678
25709
|
}, [
|
|
25679
25710
|
mesh,
|
|
25680
25711
|
positionOffset?.[0],
|
|
@@ -25682,7 +25713,8 @@ var JscadModel = ({
|
|
|
25682
25713
|
positionOffset?.[2],
|
|
25683
25714
|
rotationOffset?.[0],
|
|
25684
25715
|
rotationOffset?.[1],
|
|
25685
|
-
rotationOffset?.[2]
|
|
25716
|
+
rotationOffset?.[2],
|
|
25717
|
+
scale2
|
|
25686
25718
|
]);
|
|
25687
25719
|
useMemo4(() => {
|
|
25688
25720
|
if (!material) return;
|
|
@@ -25717,7 +25749,8 @@ var FootprinterModel = ({
|
|
|
25717
25749
|
rotationOffset,
|
|
25718
25750
|
onHover,
|
|
25719
25751
|
onUnhover,
|
|
25720
|
-
isHovered
|
|
25752
|
+
isHovered,
|
|
25753
|
+
scale: scale2
|
|
25721
25754
|
}) => {
|
|
25722
25755
|
const { rootObject } = useThree();
|
|
25723
25756
|
const group = useMemo5(() => {
|
|
@@ -25753,6 +25786,7 @@ var FootprinterModel = ({
|
|
|
25753
25786
|
if (!group) return;
|
|
25754
25787
|
if (positionOffset) group.position.fromArray(positionOffset);
|
|
25755
25788
|
if (rotationOffset) group.rotation.fromArray(rotationOffset);
|
|
25789
|
+
if (scale2 !== void 0) group.scale.setScalar(scale2);
|
|
25756
25790
|
}, [
|
|
25757
25791
|
group,
|
|
25758
25792
|
positionOffset?.[0],
|
|
@@ -25760,7 +25794,8 @@ var FootprinterModel = ({
|
|
|
25760
25794
|
positionOffset?.[2],
|
|
25761
25795
|
rotationOffset?.[0],
|
|
25762
25796
|
rotationOffset?.[1],
|
|
25763
|
-
rotationOffset?.[2]
|
|
25797
|
+
rotationOffset?.[2],
|
|
25798
|
+
scale2
|
|
25764
25799
|
]);
|
|
25765
25800
|
useEffect7(() => {
|
|
25766
25801
|
if (!group) return;
|
|
@@ -25872,6 +25907,7 @@ var AnyCadComponent = ({
|
|
|
25872
25907
|
cad_component2.position.z
|
|
25873
25908
|
] : void 0,
|
|
25874
25909
|
rotation: rotationOffset,
|
|
25910
|
+
scale: cad_component2.model_unit_to_mm_scale_factor,
|
|
25875
25911
|
onHover: handleHover,
|
|
25876
25912
|
onUnhover: handleUnhover,
|
|
25877
25913
|
isHovered
|
|
@@ -25889,6 +25925,7 @@ var AnyCadComponent = ({
|
|
|
25889
25925
|
cad_component2.position.z
|
|
25890
25926
|
] : void 0,
|
|
25891
25927
|
rotation: rotationOffset,
|
|
25928
|
+
scale: cad_component2.model_unit_to_mm_scale_factor,
|
|
25892
25929
|
onHover: handleHover,
|
|
25893
25930
|
onUnhover: handleUnhover,
|
|
25894
25931
|
isHovered
|
|
@@ -25901,6 +25938,7 @@ var AnyCadComponent = ({
|
|
|
25901
25938
|
{
|
|
25902
25939
|
jscadPlan: cad_component2.model_jscad,
|
|
25903
25940
|
rotationOffset,
|
|
25941
|
+
scale: cad_component2.model_unit_to_mm_scale_factor,
|
|
25904
25942
|
onHover: handleHover,
|
|
25905
25943
|
onUnhover: handleUnhover,
|
|
25906
25944
|
isHovered
|
|
@@ -25918,6 +25956,7 @@ var AnyCadComponent = ({
|
|
|
25918
25956
|
] : void 0,
|
|
25919
25957
|
rotationOffset,
|
|
25920
25958
|
footprint: cad_component2.footprinter_string,
|
|
25959
|
+
scale: cad_component2.model_unit_to_mm_scale_factor,
|
|
25921
25960
|
onHover: handleHover,
|
|
25922
25961
|
onUnhover: handleUnhover,
|
|
25923
25962
|
isHovered
|
|
@@ -25959,7 +25998,7 @@ import * as THREE11 from "three";
|
|
|
25959
25998
|
// package.json
|
|
25960
25999
|
var package_default = {
|
|
25961
26000
|
name: "@tscircuit/3d-viewer",
|
|
25962
|
-
version: "0.0.
|
|
26001
|
+
version: "0.0.374",
|
|
25963
26002
|
main: "./dist/index.js",
|
|
25964
26003
|
module: "./dist/index.js",
|
|
25965
26004
|
type: "module",
|
|
@@ -26015,7 +26054,7 @@ var package_default = {
|
|
|
26015
26054
|
"@vitejs/plugin-react": "^4.3.4",
|
|
26016
26055
|
"bun-match-svg": "^0.0.9",
|
|
26017
26056
|
"bun-types": "1.2.1",
|
|
26018
|
-
"circuit-json": "0.0.
|
|
26057
|
+
"circuit-json": "0.0.249",
|
|
26019
26058
|
"circuit-to-svg": "^0.0.179",
|
|
26020
26059
|
debug: "^4.4.0",
|
|
26021
26060
|
"jscad-electronics": "^0.0.38",
|
|
@@ -30046,7 +30085,6 @@ import * as THREE25 from "three";
|
|
|
30046
30085
|
import { GLTFLoader as GLTFLoader2 } from "three/examples/jsm/loaders/GLTFLoader.js";
|
|
30047
30086
|
import { OBJLoader as OBJLoader2 } from "three/examples/jsm/loaders/OBJLoader.js";
|
|
30048
30087
|
import { STLLoader as STLLoader2 } from "three/examples/jsm/loaders/STLLoader.js";
|
|
30049
|
-
import { VRMLLoader as VRMLLoader2 } from "three/examples/jsm/loaders/VRMLLoader.js";
|
|
30050
30088
|
async function load3DModel(url) {
|
|
30051
30089
|
if (url.endsWith(".stl")) {
|
|
30052
30090
|
const loader = new STLLoader2();
|
|
@@ -30063,8 +30101,7 @@ async function load3DModel(url) {
|
|
|
30063
30101
|
return await loader.loadAsync(url);
|
|
30064
30102
|
}
|
|
30065
30103
|
if (url.endsWith(".wrl")) {
|
|
30066
|
-
|
|
30067
|
-
return await loader.loadAsync(url);
|
|
30104
|
+
return await loadVrml(url);
|
|
30068
30105
|
}
|
|
30069
30106
|
if (url.endsWith(".gltf") || url.endsWith(".glb")) {
|
|
30070
30107
|
const loader = new GLTFLoader2();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tscircuit/3d-viewer",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.375",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@vitejs/plugin-react": "^4.3.4",
|
|
57
57
|
"bun-match-svg": "^0.0.9",
|
|
58
58
|
"bun-types": "1.2.1",
|
|
59
|
-
"circuit-json": "0.0.
|
|
59
|
+
"circuit-json": "0.0.249",
|
|
60
60
|
"circuit-to-svg": "^0.0.179",
|
|
61
61
|
"debug": "^4.4.0",
|
|
62
62
|
"jscad-electronics": "^0.0.38",
|