Skip to content

Commit 588552f

Browse files
committed
better fixing
1 parent 8b6f43c commit 588552f

File tree

5 files changed

+62
-30
lines changed

5 files changed

+62
-30
lines changed

packages/abstract-3d/src/renderers/dxf/dxf.ts

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import {
1515
bounds3Merge,
1616
bounds3Center,
1717
vec3Add,
18-
vec3Rot,
1918
sizeCenterBoundsForCameraPos,
2019
} from "../../abstract-3d.js";
2120
import { dxf, DxfOrigin, Handle } from "./dxf-encoding.js";
@@ -37,7 +36,7 @@ export function renderScenes(scenes: ReadonlyArray<DxfScene>, baseOptions?: Opti
3736
const allBounds = Array<Bounds3>();
3837
const handle = { handle: 0x1000 };
3938
for (const view of scenes) {
40-
const { groups, size, center } = dxfGroups(
39+
const { groups, size, center } = renderInternal(
4140
view.scene,
4241
optionsDef({ ...baseOptions, ...view.options, origin: "Center" }),
4342
view.pos,
@@ -50,45 +49,30 @@ export function renderScenes(scenes: ReadonlyArray<DxfScene>, baseOptions?: Opti
5049
return dxf(allGroups, bounds3Center(bounds), bounds3ToSize(bounds), "Center");
5150
}
5251

53-
export const renderNew = (scene: Scene, options?: Optional<DxfOptions>): string => {
52+
export const render = (scene: Scene, options?: Optional<DxfOptions>): string => {
5453
const opts = optionsDef(options);
55-
const { groups, size, center } = dxfGroups(scene, opts, vec3Zero, { handle: 0x1000 });
54+
const { groups, size, center } = renderInternal(scene, opts, vec3Zero, { handle: 0x1000 });
5655
return dxf(groups, center, size, opts.origin);
5756
};
5857

59-
// This is the original
60-
export const render = (scene: Scene, options: Optional<DxfOptions>): string => {
61-
const opts = optionsDef(options);
62-
const unitRot = vec3RotCombine(rotationForCameraPos(opts.view), scene.rotation_deprecated ?? vec3Zero);
63-
const bounds = bounds3FromPosAndSize(scene.center_deprecated ?? vec3Zero, scene.size_deprecated);
64-
const center = vec3Zero;
65-
const offset =
66-
opts.origin === "Center" ? vec3Zero : vec3(Math.abs(bounds.min.x), Math.abs(bounds.min.y), -bounds.max.z);
67-
const groupRoot = group([], offset, vec3Zero, scene.groups);
68-
const handleRef = { handle: 0x1000 };
69-
return dxf(dxfGroup(groupRoot, center, unitRot, opts, handleRef), center, scene.size_deprecated, opts.origin);
70-
};
71-
72-
const dxfGroups = (
58+
const renderInternal = (
7359
scene: Scene,
7460
options: DxfOptions,
7561
offset: Vec3,
76-
handleRef: Handle //make sure we start with a value higher than any other handle id's used in the header
62+
handleRef: Handle
7763
): { readonly groups: string; readonly size: Vec3; readonly center: Vec3 } => {
78-
const sceneRot = scene.rotation_deprecated ?? vec3Zero;
79-
const viewRot = rotationForCameraPos(options.view);
80-
const unitRot = vec3RotCombine(viewRot, sceneRot);
81-
64+
const unitRot = vec3RotCombine(rotationForCameraPos(options.view), scene.rotation_deprecated ?? vec3Zero);
8265
const [size, center] = sizeCenterBoundsForCameraPos(
8366
scene.size_deprecated,
8467
scene.center_deprecated ?? vec3Zero,
8568
unitRot
8669
);
87-
const centerWithOffset = vec3Add(center, offset);
70+
// const unitCenterFlipped = vec3Flip(center);
71+
const dxfCenter = vec3Add(center, offset);
8872
return {
89-
groups: scene.groups.reduce((a, c) => a + dxfGroup(c, centerWithOffset, unitRot, options, handleRef), ""),
73+
groups: scene.groups.reduce((a, c) => a + dxfGroup(c, dxfCenter, unitRot, options, handleRef), ""),
9074
size,
91-
center: centerWithOffset,
75+
center: dxfCenter,
9276
};
9377
};
9478

@@ -138,3 +122,16 @@ function optionsDef(options: Optional<DxfOptions> | undefined): DxfOptions {
138122
cylinderSideCount: DEFAULT_CYLINDER_SIDE_COUNT,
139123
};
140124
}
125+
126+
// This is the original
127+
export const renderOld = (scene: Scene, options?: Optional<DxfOptions>): string => {
128+
const opts = optionsDef(options);
129+
const unitRot = vec3RotCombine(rotationForCameraPos(opts.view), scene.rotation_deprecated ?? vec3Zero);
130+
const bounds = bounds3FromPosAndSize(scene.center_deprecated ?? vec3Zero, scene.size_deprecated);
131+
const center = vec3Zero;
132+
const offset =
133+
opts.origin === "Center" ? vec3Zero : vec3(Math.abs(bounds.min.x), Math.abs(bounds.min.y), -bounds.max.z);
134+
const groupRoot = group([], offset, vec3Zero, scene.groups);
135+
const handleRef = { handle: 0x1000 };
136+
return dxf(dxfGroup(groupRoot, center, unitRot, opts, handleRef), center, scene.size_deprecated, opts.origin);
137+
};

packages/abstract-visuals-example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"name": "abstract-visuals-example",
4-
"version": "15.3.0",
4+
"version": "15.2.147",
55
"description": "abstract-visuals-example",
66
"repository": "https://github.com/dividab/abstract-visuals",
77
"main": "lib/index.js",

packages/abstract-visuals-example/src/app/abstract-3d-example.tsx

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export function Abstract3DExample(): React.ReactNode {
2121

2222
const imageDataByUrlSvg: Record<string, any> = {};
2323
const imageDataByUrlDxf: Record<string, any> = {};
24+
const imageDataByUrlDxf2: Record<string, any> = {};
25+
2426
const svgs = Array<string>();
2527

2628
for (const geo of Object.values(componentGeometries)) {
@@ -34,6 +36,7 @@ export function Abstract3DExample(): React.ReactNode {
3436

3537
for (const geo of Object.values(componentGeometries)) {
3638
imageDataByUrlDxf[geo.image.url] = `${DXF_DATA_URL}${Dxf.renderScenes(geo.scenes as any)}`;
39+
imageDataByUrlDxf2[geo.image.url] = `${DXF_DATA_URL}${Dxf.renderOld((geo.scenes[0] as any)!.scene)}`;
3740
}
3841

3942
const templateImage = Svg.render(templateScene as Scene, { stroke_thickness: 3, only_stroke: true }).image;
@@ -63,7 +66,31 @@ export function Abstract3DExample(): React.ReactNode {
6366
</button>
6467
<button
6568
onClick={() =>
66-
FileSaver.saveAs(new Blob([Dxf.render(systemair, { view: "top" })], { type: "text/plain" }), `a3d.dxf`)
69+
FileSaver.saveAs(
70+
new Blob([dxf2dExportImage(ai, { imageDataByUrl: imageDataByUrlDxf2, useColor: true })], {
71+
type: "text/plain",
72+
}),
73+
`a3d.dxf`
74+
)
75+
}
76+
>
77+
DXF single
78+
</button>
79+
<button
80+
onClick={() =>
81+
FileSaver.saveAs(
82+
new Blob([Dxf.renderOld((Object.values(componentGeometries)[0]!.scenes[0] as any)!.scene)], {
83+
type: "text/plain",
84+
}),
85+
`a3d.dxf`
86+
)
87+
}
88+
>
89+
DXF single raw
90+
</button>
91+
<button
92+
onClick={() =>
93+
FileSaver.saveAs(new Blob([Dxf.renderOld(systemair, { view: "top" })], { type: "text/plain" }), `a3d.dxf`)
6794
}
6895
>
6996
DXF

packages/abstract-visuals-example/vite.config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ export default defineConfig({
2525
define: { global: "globalThis" },
2626
},
2727
// abstract-image is a depency of abstract-chart and abstract-document.
28-
include: ["abstract-image", "handlebars-xml", "jsxpression"],
28+
include: [
29+
"abstract-sheet",
30+
"abstract-chart",
31+
"abstract-document",
32+
"abstract-3d",
33+
"abstract-image",
34+
"handlebars-xml",
35+
"jsxpression",
36+
],
2937
},
3038
});

pnpm-lock.yaml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)