Trova la soluzione giusta per la tua casa
Ti guidiamo nella scelta di impianti e interventi in meno di 1 minuto
👉 Come possiamo aiutarti oggi?
Trova la soluzione giusta per la tua casa
Voglio Sostituire un Sanitario
import React, { useState, useEffect, useRef } from 'react';
import { Printer, Maximize, FileText, Info } from 'lucide-react';
const App = () => {
const [entities, setEntities] = useState([]);
const [blocks, setBlocks] = useState({});
const [viewBox, setViewBox] = useState({ x: 0, y: 0, width: 100, height: 100 });
const [loading, setLoading] = useState(true);
const svgRef = useRef(null);
// Il contenuto del file DXF fornito dall'utente
const dxfContent = `0
SECTION
2
HEADER
9
$ACADVER
1
AC1009
9
$HANDLING
70
1
9
$HANDSEED
5
145
0
ENDSEC
0
SECTION
2
TABLES
0
TABLE
2
LAYER
0
LAYER
2
0
62
1
70
0
6
CONTINUOUS
0
LAYER
2
PARETI
62
1
70
0
6
CONTINUOUS
0
LAYER
2
VESTE_PARETI
62
1
70
0
6
CONTINUOUS
0
LAYER
2
ASSI_PARETI
62
-1
70
0
6
CONTINUOUS
0
LAYER
2
DATI_PARETI
62
1
70
0
6
CONTINUOUS
0
LAYER
2
TRATTEGGI_PARETI
62
1
70
0
6
CONTINUOUS
0
LAYER
2
ASSI_PARETI_NUOVO
62
-1
70
0
6
CONTINUOUS
0
LAYER
2
VESTE_PARETI_NUOVO
62
1
70
0
6
CONTINUOUS
0
ENDTAB
0
TABLE
2
STYLE
0
ENDTAB
0
ENDSEC
0
SECTION
2
BLOCKS
0
BLOCK
2
00451
3
00451
8
0
70
66
10
0.0
20
0.0
5
22
0
CIRCLE
10
11.250000
20
10.000000
40
6.250000
8
0
62
5
5
23
0
CIRCLE
10
28.750000
20
10.000000
40
6.250000
8
0
62
5
5
24
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
25
0
CIRCLE
10
20.000000
20
-20.000000
40
1.250000
8
0
62
1
5
26
0
CIRCLE
10
28.750000
20
-8.750000
40
6.250000
8
0
62
5
5
27
0
CIRCLE
10
11.250000
20
-8.750000
40
6.250000
8
0
62
5
5
28
0
LINE
10
0.000000
20
-20.000000
11
40.000000
21
-20.000000
8
0
62
5
5
29
0
LINE
10
40.000000
20
-20.000000
11
40.000000
21
20.000000
8
0
62
5
5
2A
0
LINE
10
40.000000
20
20.000000
11
0.000000
21
20.000000
8
0
62
5
5
2B
0
LINE
10
0.000000
20
20.000000
11
0.000000
21
-20.000000
8
0
62
5
5
2C
0
ARC
10
24.309632
20
-4.351633
40
0.537321
50
180.000000
51
0.000000
8
0
62
256
5
2D
0
ARC
10
24.309632
20
-4.351633
40
0.537321
50
0.000000
51
180.000000
8
0
62
256
5
2E
0
TEXT
10
14.792330
20
-1.914988
40
4.000000
1
SCF
50
0.000000
41
1.000000
72
0
73
1
11
14.792330
21
-1.914988
8
0
62
5
5
2F
0
ARC
10
15.986908
20
5.922721
40
0.537321
50
180.000000
51
0.000000
8
0
62
5
5
30
0
ARC
10
15.986908
20
5.922721
40
0.537321
50
0.000000
51
180.000000
8
0
62
5
5
31
0
ARC
10
24.189964
20
5.725825
40
0.537321
50
180.000000
51
0.000000
8
0
62
5
5
32
0
ARC
10
24.189964
20
5.725825
40
0.537321
50
0.000000
51
180.000000
8
0
62
5
5
33
0
ARC
10
15.579737
20
-4.242687
40
0.537321
50
180.000000
51
0.000000
8
0
62
5
5
34
0
ARC
10
15.579737
20
-42.42687
40
0.537321
50
0.000000
51
180.000000
8
0
62
5
5
35
0
ARC
10
24.309632
20
-4.351633
40
0.537321
50
180.000000
51
0.000000
8
0
62
5
5
36
0
ARC
10
24.309632
20
-4.351633
40
0.537321
50
0.000000
51
180.000000
8
0
62
5
5
37
0
ENDBLK
0
BLOCK
2
94005
3
94005
8
0
70
66
10
0.0
20
0.0
5
38
0
LINE
10
0.000000
20
0.000000
11
270.000000
21
0.000000
8
0
62
7
5
39
0
LINE
10
20.000000
20
10.000000
11
270.000000
21
10.000000
8
0
62
7
5
3A
0
LINE
10
20.000000
20
10.000000
11
20.000000
21
15.000000
8
0
62
7
5
3B
0
LINE
10
20.000000
20
15.000000
11
220.000000
21
60.000000
8
0
62
7
5
3C
0
LINE
10
-15.000000
20
17.125000
11
220.000000
21
70.000000
8
0
62
7
5
3D
0
LINE
10
-15.000000
20
17.125000
11
-15.000000
21
6.457338
8
0
62
7
5
3E
0
LINE
10
-15.000000
20
6.457338
11
0.000000
21
6.457338
8
0
62
7
5
3F
0
LINE
10
0.000000
20
6.457338
11
0.000000
21
0.000000
8
0
62
7
5
40
0
LINE
10
322.141582
20
47.018144
11
220.000000
21
70.000000
8
0
62
7
5
41
0
LINE
10
320.000000
20
37.500000
11
220.000000
21
60.000000
8
0
62
7
5
42
0
LINE
10
20.000000
20
0.000000
11
-0.000000
21
0.000000
8
0
62
7
5
43
0
ENDBLK
0
BLOCK
2
00870
3
00870
8
0
70
66
10
0.0
20
0.0
5
44
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
45
0
CIRCLE
10
20.000000
20
0.000000
40
1.250000
8
0
62
1
5
46
0
LINE
10
0.000000
20
0.000000
11
2.500000
21
0.000000
8
0
62
5
5
47
0
LINE
10
18.000000
20
0.000000
11
20.000000
21
0.000000
8
0
62
5
5
48
0
LINE
10
3.750000
20
2.500000
11
5.250000
21
-2.500000
8
0
62
5
5
49
0
LINE
10
5.250000
20
-2.500000
11
6.500000
21
2.500000
8
0
62
5
5
4A
0
LINE
10
6.500000
20
2.500000
11
8.000000
21
-2.500000
8
0
62
5
5
4B
0
LINE
10
8.000000
20
-2.500000
11
9.250000
21
2.500000
8
0
62
5
5
4C
0
LINE
10
9.250000
20
2.500000
11
10.750000
21
-2.500000
8
0
62
5
5
4D
0
LINE
10
10.750000
20
-2.500000
11
12.250000
21
2.500000
8
0
62
5
5
4E
0
LINE
10
12.250000
20
2.500000
11
14.000000
21
-2.500000
8
0
62
5
5
4F
0
LINE
10
14.000000
20
-2.500000
11
15.250000
21
2.500000
8
0
62
5
5
50
0
LINE
10
15.250000
20
2.500000
11
17.250000
21
-2.500000
8
0
62
5
5
51
0
LINE
10
17.250000
20
-2.500000
11
18.000000
21
0.000000
8
0
62
5
5
52
0
LINE
10
2.500000
20
0.000000
11
3.750000
21
2.500000
8
0
62
5
5
53
0
ENDBLK
0
BLOCK
2
00880
3
00880
8
0
70
66
10
0.0
20
0.0
5
54
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
55
0
CIRCLE
10
20.000000
20
0.000000
40
1.250000
8
0
62
1
5
56
0
POINT
10
11.250000
20
0.000000
8
0
62
5
5
57
0
LINE
10
3.750000
20
3.750000
11
3.750000
21
-3.750000
8
0
62
5
5
58
0
LINE
10
3.750000
20
-3.750000
11
16.250000
21
3.750000
8
0
62
5
5
59
0
LINE
10
16.250000
20
3.750000
11
16.250000
21
-3.750000
8
0
62
5
5
5A
0
LINE
10
16.250000
20
-3.750000
11
3.750000
21
3.750000
8
0
62
5
5
5B
0
LINE
10
3.750000
20
0.000000
11
0.000000
21
0.000000
8
0
62
5
5
5C
0
LINE
10
16.250000
20
0.000000
11
20.000000
21
0.000000
8
0
62
5
5
5D
0
ENDBLK
0
BLOCK
2
94007
3
94007
8
0
70
66
10
0.0
20
0.0
5
5E
0
LINE
10
-80.000000
20
0.000000
11
0.000000
21
0.000000
8
0
62
7
5
5F
0
LINE
10
20.000000
20
0.000000
11
270.000000
21
0.000000
8
0
62
7
5
60
0
LINE
10
20.000000
20
0.000000
11
20.000000
21
10.000000
8
0
62
7
5
61
0
LINE
10
0.000000
20
10.000000
11
0.000000
21
0.000000
8
0
62
7
5
62
0
LINE
10
-71.000000
20
10.000000
11
270.000000
21
10.000000
8
0
62
7
5
63
0
LINE
10
0.000000
20
4.470000
11
20.000000
21
4.470000
8
0
62
7
5
64
0
LINE
10
13.815000
20
4.470000
11
13.815000
21
10.000000
8
0
62
7
5
65
0
LINE
10
0.000000
20
143.217500
11
0.000000
21
210.000000
8
0
62
7
5
66
0
LINE
10
6.512500
20
0.000000
11
6.512500
21
4.470000
8
0
62
7
5
67
0
LINE
10
20.000000
20
210.000000
11
20.000000
21
143.217500
8
0
62
7
5
68
0
LINE
10
16.000000
20
143.217500
11
16.000000
21
10.000000
8
0
62
7
5
69
0
LINE
10
11.118281
20
143.217500
11
11.118281
21
10.000000
8
0
62
7
5
6A
0
LINE
10
-80.000000
20
0.000000
11
-80.000000
21
10.000000
8
0
62
7
5
6B
0
LINE
10
-76.000000
20
10.000000
11
-76.000000
21
90.000000
8
0
62
7
5
6C
0
LINE
10
-76.000000
20
90.000000
11
-71.000000
21
90.000000
8
0
62
7
5
6D
0
LINE
10
-71.000000
20
90.000000
11
-71.000000
21
10.000000
8
0
62
7
5
6E
0
LINE
10
-0.000000
20
143.217500
11
20.000000
21
143.217500
8
0
62
7
5
6F
0
LINE
10
-80.000000
20
10.000000
11
-76.000000
21
10.000000
8
0
62
7
5
70
0
LINE
10
6.512500
20
143.217500
11
6.512500
21
150.520000
8
0
62
7
5
71
0
LINE
10
13.815001
20
194.335000
11
13.815001
21
201.637500
8
0
62
7
5
72
0
LINE
10
0.000000
20
150.520000
11
20.000000
21
150.520000
8
0
62
7
5
73
0
LINE
10
0.000000
20
165.125000
11
20.000000
21
165.125000
8
0
62
7
5
74
0
LINE
10
0.000000
20
157.822500
11
20.000000
21
157.822500
8
0
62
7
5
75
0
LINE
10
0.000000
20
187.032500
11
20.000000
21
187.032500
8
0
62
7
5
76
0
LINE
10
0.000000
20
179.730000
11
20.000000
21
179.730000
8
0
62
7
5
77
0
LINE
10
0.000000
20
194.335000
11
20.000000
21
194.335000
8
0
62
7
5
78
0
LINE
10
0.000000
20
172.427500
11
20.000000
21
172.427500
8
0
62
7
5
79
0
LINE
10
6.512500
20
157.822500
11
6.512500
21
165.125000
8
0
62
7
5
7A
0
LINE
10
6.512500
20
172.427500
11
6.512500
21
179.730000
8
0
62
7
5
7B
0
LINE
10
6.512500
20
187.032500
11
6.512500
21
194.335000
8
0
62
7
5
7C
0
LINE
10
13.815000
20
165.125000
11
13.815000
21
172.427500
8
0
62
7
5
7D
0
LINE
10
13.815000
20
150.520000
11
13.815000
21
157.822500
8
0
62
7
5
7E
0
LINE
10
13.815000
20
179.730000
11
13.815000
21
187.032500
8
0
62
7
5
7F
0
LINE
10
0.000001
20
201.637500
11
20.000001
21
201.637500
8
0
62
7
5
80
0
LINE
10
0.000001
20
208.940000
11
20.000001
21
208.940000
8
0
62
7
5
81
0
LINE
10
6.512501
20
201.637500
11
6.512501
21
208.940000
8
0
62
7
5
82
0
LINE
10
13.815001
20
208.940000
11
13.815001
21
210.000000
8
0
62
7
5
83
0
ENDBLK
0
BLOCK
2
90400
3
90400
8
0
70
66
10
0.0
20
0.0
5
84
0
LINE
10
0.000000
20
7.357912
11
40.030548
21
7.357912
8
0
62
5
5
85
0
LINE
10
0.000000
20
7.357912
11
0.000000
21
0.000000
8
0
62
5
5
86
0
LINE
10
40.030548
20
7.357912
11
40.030548
21
0.000000
8
0
62
5
5
87
0
LINE
10
0.000000
20
0.000000
11
40.030548
21
0.000000
8
0
62
5
5
88
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
89
0
LINE
10
36.061004
20
3.288305
11
36.109398
21
2.979284
8
0
62
5
5
8A
0
LINE
10
36.109398
20
2.979284
11
36.188730
21
2.685673
8
0
62
5
5
8B
0
LINE
10
36.188730
20
2.685673
11
36.297046
21
2.414703
8
0
62
5
5
8C
0
LINE
10
36.297046
20
2.414703
11
36.431680
21
2.173044
8
0
62
5
5
8D
0
LINE
10
36.431680
20
2.173044
11
36.589315
21
1.966648
8
0
62
5
5
8E
0
LINE
10
36.589315
20
1.966648
11
36.766071
21
1.800597
8
0
62
5
5
8F
0
LINE
10
36.766071
20
1.800597
11
36.957595
21
1.678980
8
0
62
5
5
90
0
LINE
10
36.957595
20
1.678980
11
37.159172
21
1.604790
8
0
62
5
5
91
0
LINE
10
37.159172
20
1.604790
11
37.365837
21
1.579856
8
0
62
5
5
92
0
LINE
10
37.365837
20
1.579856
11
37.572502
21
1.604790
8
0
62
5
5
93
0
LINE
10
37.572502
20
1.604790
11
37.774079
21
1.678980
8
0
62
5
5
94
0
LINE
10
37.774079
20
1.678980
11
37.965603
21
1.800597
8
0
62
5
5
95
0
LINE
10
37.965603
20
1.800597
11
38.142359
21
1.966648
8
0
62
5
5
96
0
LINE
10
38.142359
20
1.966648
11
38.299995
21
2.173044
8
0
62
5
5
97
0
LINE
10
38.299995
20
2.173044
11
38.434628
21
2.414703
8
0
62
5
5
98
0
LINE
10
38.434628
20
2.414703
11
38.542944
21
2.685673
8
0
62
5
5
99
0
LINE
10
38.542944
20
2.685673
11
38.622276
21
2.979284
8
0
62
5
5
9A
0
LINE
10
38.622276
20
2.979284
11
38.670670
21
3.288305
8
0
62
5
5
9B
0
LINE
10
38.670670
20
3.288305
11
38.686935
21
3.605127
8
0
62
5
5
9C
0
LINE
10
38.686935
20
3.605127
11
38.670670
21
3.921950
8
0
62
5
5
9D
0
LINE
10
38.670670
20
3.921950
11
38.622276
21
4.230971
8
0
62
5
5
9E
0
LINE
10
38.622276
20
4.230971
11
38.542944
21
4.524581
8
0
62
5
5
9F
0
LINE
10
38.542944
20
4.524581
11
38.434628
21
4.795552
8
0
62
5
5
A0
0
LINE
10
38.434628
20
4.795552
11
38.299995
21
5.037211
8
0
62
5
5
A1
0
LINE
10
38.299995
20
5.037211
11
38.142359
21
5.243607
8
0
62
5
5
A2
0
LINE
10
38.142359
20
5.243607
11
37.965603
21
5.409658
8
0
62
5
5
A3
0
LINE
10
37.965603
20
5.409658
11
37.774079
21
5.531275
8
0
62
5
5
A4
0
LINE
10
37.774079
20
5.531275
11
37.572502
21
5.605465
8
0
62
5
5
A5
0
LINE
10
37.572502
20
5.605465
11
37.365837
21
5.630399
8
0
62
5
5
A6
0
LINE
10
37.365837
20
5.630399
11
37.159172
21
5.605465
8
0
62
5
5
A7
0
LINE
10
37.159172
20
5.605465
11
36.957595
21
5.531275
8
0
62
5
5
A8
0
LINE
10
36.957595
20
5.531275
11
36.766071
21
5.409658
8
0
62
5
5
A9
0
LINE
10
36.766071
20
5.409658
11
36.589315
21
5.243607
8
0
62
5
5
AA
0
LINE
10
36.589315
20
5.243607
11
36.431680
21
5.037211
8
0
62
5
5
AB
0
LINE
10
36.431680
20
5.037211
11
36.297046
21
4.795552
8
0
62
5
5
AC
0
LINE
10
36.297046
20
4.795552
11
36.188730
21
4.524581
8
0
62
5
5
AD
0
LINE
10
36.188730
20
4.524581
11
36.109398
21
4.230971
8
0
62
5
5
AE
0
LINE
10
36.109398
20
4.230971
11
36.061004
21
3.921950
8
0
62
5
5
AF
0
LINE
10
36.061004
20
3.921950
11
36.044739
21
3.605127
8
0
62
5
5
B0
0
LINE
10
36.044739
20
3.605127
11
36.061004
21
3.288305
8
0
62
5
5
B1
0
LINE
10
20.041745
20
10.802995
11
16.582878
21
4.873195
8
0
62
5
5
B2
0
LINE
10
23.447669
20
4.842629
11
20.041745
21
10.802995
8
0
62
5
5
B3
0
LINE
10
16.582878
20
4.873195
11
23.447669
21
4.842629
8
0
62
5
5
B4
0
ENDBLK
0
BLOCK
2
00062
3
00062
8
0
70
66
10
0.0
20
0.0
5
B5
0
LINE
10
0.000000
20
0.000000
11
20.000000
21
0.000000
8
0
62
5
5
B6
0
LINE
10
20.000000
20
0.000000
11
20.000000
21
40.000000
8
0
62
5
5
B7
0
LINE
10
20.000000
20
40.000000
11
0.000000
21
40.000000
8
0
62
5
5
B8
0
LINE
10
0.000000
20
40.000000
11
0.000000
21
0.000000
8
0
62
5
5
B9
0
LINE
10
0.000000
20
25.000000
11
20.000000
21
25.000000
8
0
62
5
5
BA
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
BB
0
CIRCLE
10
20.000000
20
0.000000
40
1.250000
8
0
62
1
5
BC
0
LINE
10
6.250000
20
21.250000
11
2.500000
21
21.250000
8
0
62
5
5
BD
0
LINE
10
2.500000
20
21.250000
11
2.500000
21
11.250000
8
0
62
5
5
BE
0
LINE
10
2.500000
20
11.250000
11
6.250000
21
11.250000
8
0
62
5
5
BF
0
LINE
10
6.250000
20
11.250000
11
6.250000
21
15.000000
8
0
62
5
5
C0
0
LINE
10
6.250000
20
15.000000
11
5.000000
21
15.000000
8
0
62
5
5
C1
0
LINE
10
8.750000
20
11.250000
11
8.750000
21
21.250000
8
0
62
5
5
C2
0
LINE
10
8.750000
20
21.250000
11
12.500000
21
21.250000
8
0
62
5
5
C3
0
LINE
10
12.500000
20
21.250000
11
12.500000
21
11.250000
8
0
62
5
5
C4
0
LINE
10
12.500000
20
11.250000
11
12.500000
21
16.250000
8
0
62
5
5
C5
0
LINE
10
12.500000
20
16.250000
11
8.750000
21
16.250000
8
0
62
5
5
C6
0
LINE
10
18.750000
20
21.250000
11
15.000000
21
21.250000
8
0
62
5
5
C7
0
LINE
10
15.000000
20
21.250000
11
15.000000
21
16.250000
8
0
62
5
5
C8
0
LINE
10
15.000000
20
16.250000
11
18.750000
21
16.250000
8
0
62
5
5
C9
0
LINE
10
18.750000
20
16.250000
11
18.750000
21
11.250000
8
0
62
5
5
CA
0
LINE
10
6.250000
20
21.250000
11
2.500000
21
21.250000
8
0
62
5
5
CB
0
LINE
10
2.500000
20
21.250000
11
2.500000
21
11.250000
8
0
62
5
5
CC
0
LINE
10
2.500000
20
11.250000
11
6.250000
21
11.250000
8
0
62
5
5
CD
0
LINE
10
6.250000
20
11.250000
11
6.250000
21
15.000000
8
0
62
5
5
CE
0
LINE
10
6.250000
20
15.000000
11
5.000000
21
15.000000
8
0
62
5
5
CF
0
LINE
10
8.750000
20
11.250000
11
8.750000
21
21.250000
8
0
62
5
5
D0
0
LINE
10
8.750000
20
21.250000
11
12.500000
21
21.250000
8
0
62
5
5
D1
0
LINE
10
12.500000
20
21.250000
11
12.500000
21
11.250000
8
0
62
5
5
D2
0
LINE
10
12.500000
20
11.250000
11
12.500000
21
16.250000
8
0
62
5
5
D3
0
LINE
10
12.500000
20
16.250000
11
8.750000
21
16.250000
8
0
62
5
5
D4
0
LINE
10
18.750000
20
21.250000
11
15.000000
21
21.250000
8
0
62
5
5
D5
0
LINE
10
15.000000
20
21.250000
11
15.000000
21
16.250000
8
0
62
5
5
D6
0
LINE
10
15.000000
20
16.250000
11
18.750000
21
16.250000
8
0
62
5
5
D7
0
LINE
10
18.750000
20
16.250000
11
18.750000
21
11.250000
8
0
62
5
5
D8
0
LINE
10
15.000000
20
11.250000
11
18.750000
21
11.250000
8
0
62
5
5
D9
0
ENDBLK
0
BLOCK
2
00882
3
00882
8
0
70
66
10
0.0
20
0.0
5
DA
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
DB
0
CIRCLE
10
20.000000
20
0.000000
40
1.250000
8
0
62
1
5
DC
0
LINE
10
3.750000
20
3.750000
11
3.750000
21
-3.750000
8
0
62
5
5
DD
0
LINE
10
3.750000
20
-3.750000
11
16.250000
21
3.750000
8
0
62
5
5
DE
0
LINE
10
16.250000
20
3.750000
11
16.250000
21
-3.750000
8
0
62
5
5
DF
0
LINE
10
16.250000
20
-3.750000
11
3.750000
21
3.750000
8
0
62
5
5
E0
0
LINE
10
3.750000
20
0.000000
11
0.000000
21
0.000000
8
0
62
5
5
E1
0
LINE
10
16.250000
20
0.000000
11
20.000000
21
0.000000
8
0
62
5
5
E2
0
LINE
10
10.000000
20
0.000000
11
10.000000
21
5.000000
8
0
62
5
5
E3
0
LINE
10
10.000000
20
5.000000
11
2.000000
21
5.000000
8
0
62
5
5
E4
0
LINE
10
10.000000
20
5.000000
11
11.000000
21
5.000000
8
0
62
5
5
E5
0
LINE
10
13.750000
20
-2.250000
11
13.750000
21
-6.850000
8
0
62
5
5
E6
0
LINE
10
16.250000
20
-6.850000
11
16.250000
21
-5.350000
8
0
62
5
5
E7
0
LINE
10
16.250000
20
-6.850000
11
11.250000
21
-6.850000
8
0
62
5
5
E8
0
LINE
10
11.250000
20
-6.850000
11
11.250000
21
-5.350000
8
0
62
5
5
E9
0
ENDBLK
0
BLOCK
2
00380
3
00380
8
0
70
66
10
0.0
20
0.0
5
EA
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
EB
0
LINE
10
0.000000
20
0.000000
11
10.000000
21
0.000000
8
0
62
5
5
EC
0
LINE
10
10.000000
20
0.000000
11
10.000000
21
10.000000
8
0
62
5
5
ED
0
CIRCLE
10
10.000000
20
10.000000
40
1.250000
8
0
62
1
5
EE
0
ENDBLK
0
BLOCK
2
00800
3
00800
8
0
70
66
10
0.0
20
0.0
5
EF
0
LINE
10
0.000000
20
0.000000
11
100.000000
21
0.000000
8
0
62
5
5
F0
0
ENDBLK
0
BLOCK
2
00390
3
00390
8
0
70
66
10
0.0
20
0.0
5
F1
0
LINE
10
0.000000
20
1.000000
11
0.000000
21
2.000000
8
0
62
5
5
F2
0
LINE
10
0.000000
20
2.000000
11
20.000000
21
2.000000
8
0
62
5
5
F3
0
LINE
10
20.000000
20
2.000000
11
20.000000
21
1.000000
8
0
62
5
5
F4
0
LINE
10
20.000000
20
1.000000
11
0.000000
21
1.000000
8
0
62
5
5
F5
0
LINE
10
0.000000
20
1.000000
11
0.000000
21
2.000000
8
0
62
5
5
F6
0
LINE
10
0.000000
20
-1.000000
11
20.000000
21
-1.000000
8
0
62
5
5
F7
0
LINE
10
20.000000
20
-1.000000
11
20.000000
21
-2.000000
8
0
62
5
5
F8
0
LINE
10
20.000000
20
-2.000000
11
0.000000
21
-2.000000
8
0
62
5
5
F9
0
LINE
10
0.000000
20
-2.000000
11
0.000000
21
-1.000000
8
0
62
5
5
FA
0
CIRCLE
10
0.000000
20
0.000000
40
1.000000
8
0
62
1
5
FB
0
LINE
10
0.000000
20
2.000000
11
0.000000
21
-2.000000
8
0
62
5
5
FC
0
LINE
10
20.000000
20
2.000000
11
20.000000
21
-2.000000
8
0
62
5
5
FD
0
LINE
10
0.000000
20
2.000000
11
20.000000
21
2.000000
8
0
62
5
5
FE
0
LINE
10
20.000000
20
1.000000
11
0.000000
21
1.000000
8
0
62
5
5
FF
0
CIRCLE
10
20.000000
20
0.000000
40
1.000000
8
0
62
1
5
100
0
LINE
10
0.000000
20
2.000000
11
20.000000
21
2.000000
8
0
62
5
5
101
0
LINE
10
20.000000
20
2.000000
11
20.000000
21
1.000000
8
0
62
5
5
102
0
LINE
10
20.000000
20
1.000000
11
0.000000
21
1.000000
8
0
62
5
5
103
0
ENDBLK
0
BLOCK
2
00930
3
00930
8
0
70
66
10
0.0
20
0.0
5
104
0
CIRCLE
10
0.000000
20
0.000000
40
1.250000
8
0
62
1
5
105
0
CIRCLE
10
20.000000
20
0.000000
40
1.250000
8
0
62
1
5
106
0
POINT
10
11.250000
20
0.000000
8
0
62
5
5
107
0
LINE
10
3.750000
20
3.750000
11
3.750000
21
-3.750000
8
0
62
5
5
108
0
LINE
10
3.750000
20
-3.750000
11
16.250000
21
3.750000
8
0
62
5
5
109
0
LINE
10
16.250000
20
3.750000
11
16.250000
21
-3.750000
8
0
62
5
5
10A
0
LINE
10
16.250000
20
-3.750000
11
3.750000
21
3.750000
8
0
62
5
5
10B
0
LINE
10
3.750000
20
0.000000
11
0.000000
21
0.000000
8
0
62
5
5
10C
0
LINE
10
16.250000
20
0.000000
11
20.000000
21
0.000000
8
0
62
5
5
10D
0
CIRCLE
10
10.000000
20
0.000000
40
2.500000
8
0
62
5
5
10E
0
ENDBLK
0
ENDSEC
0
SECTION
2
ENTITIES
0
INSERT
2
00451
66
1
10
335.000000
20
-245.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
1
0
SEQEND
5
10F
0
TEXT
10
230.392305
20
-459.000000
40
4.571429
1
P6
50
0.000000
41
1.000000
72
1
73
1
11
230.392305
21
-459.000000
8
0
62
1
5
110
0
INSERT
2
00380
66
1
10
230.000000
20
-435.000000
41
1.000000
42
1.000000
50
180.000000
8
0
62
7
5
111
0
SEQEND
5
112
0
TEXT
10
226.000000
20
-450.392305
40
4.571429
1
P7
50
0.000000
41
1.000000
72
1
73
1
11
226.000000
21
-450.392305
8
0
62
1
5
113
0
INSERT
2
00380
66
1
10
230.000000
20
-435.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
114
0
SEQEND
5
115
0
TEXT
10
236.000000
20
-445.392305
40
4.571429
1
P8
50
0.000000
41
1.000000
72
1
73
1
11
236.000000
21
-445.392305
8
0
62
1
5
116
0
INSERT
2
00800
66
1
10
240.000000
20
-430.000000
41
1.000000
42
1.000000
50
90.000000
8
0
62
7
5
117
0
SEQEND
5
118
0
TEXT
10
146.000000
20
-435.392305
40
4.571429
1
P9
50
0.000000
41
1.000000
72
1
73
1
11
146.000000
21
-435.392305
8
0
62
1
5
119
0
INSERT
2
00800
66
1
10
240.000000
20
-350.000000
41
1.000000
42
1.000000
50
90.000000
8
0
62
7
5
11A
0
SEQEND
5
11B
0
TEXT
10
250.392305
20
-344.000000
40
4.571429
1
P10
50
0.000000
41
1.000000
72
1
73
1
11
250.392305
21
-344.000000
8
0
62
1
5
11C
0
INSERT
2
00380
66
1
10
250.000000
20
-245.000000
41
1.000000
42
1.000000
50
180.000000
8
0
62
7
5
11D
0
SEQEND
5
11E
0
TEXT
10
243.999999
20
-234.607696
40
4.571429
1
P11
50
0.000000
41
1.000000
72
1
73
1
11
243.999999
21
-234.607696
8
0
62
1
5
11F
0
INSERT
2
00800
66
1
10
240.000000
20
-245.000000
41
0.500000
42
0.500000
50
0.000000
8
0
62
7
5
120
0
SEQEND
5
121
0
TEXT
10
191.000000
20
-255.392305
40
4.571429
1
P12
50
0.000000
41
1.000000
72
1
73
1
11
191.000000
21
-255.392305
8
0
62
1
5
122
0
INSERT
2
00390
66
1
10
260.000000
20
-245.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
123
0
SEQEND
5
124
0
TEXT
10
266.000000
20
-255.392305
40
4.571429
1
P13
50
0.000000
41
1.000000
72
1
73
1
11
266.000000
21
-255.392305
8
0
62
1
5
125
0
TEXT
10
341.000000
20
-255.392305
40
4.571429
1
P1
50
0.000000
41
1.000000
72
1
73
1
11
341.000000
21
-255.392305
8
0
62
1
5
126
0
INSERT
2
00930
66
1
10
240.000000
20
-270.000000
41
1.000000
42
1.000000
50
270.000000
8
0
62
7
5
127
0
SEQEND
5
128
0
TEXT
10
246.000000
20
-280.392305
40
4.571429
1
P14
50
0.000000
41
1.000000
72
1
73
1
11
246.000000
21
-280.392305
8
0
62
1
5
129
0
INSERT
2
00870
66
1
10
310.000000
20
-245.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
12A
0
SEQEND
5
12B
0
TEXT
10
316.000000
20
-255.392305
40
4.571429
1
P2
50
0.000000
41
1.000000
72
1
73
1
11
316.000000
21
-255.392305
8
0
62
1
5
12C
0
INSERT
2
00880
66
1
10
285.000000
20
-245.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
12D
0
SEQEND
5
12E
0
TEXT
10
291.000000
20
-255.392305
40
4.571429
1
P3
50
0.000000
41
1.000000
72
1
73
1
11
291.000000
21
-255.392305
8
0
62
1
5
12F
0
INSERT
2
94007
66
1
10
255.000000
20
-310.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
130
0
SEQEND
5
131
0
INSERT
2
94005
66
1
10
255.000000
20
-105.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
132
0
SEQEND
5
133
0
LINE
10
265.000000
20
-305.000000
11
265.000000
21
-485.000000
8
ASSI_PARETI_NUOVO
62
0
5
134
0
LINE
10
255.000000
20
-305.000000
11
275.000000
21
-305.000000
8
ASSI_PARETI_NUOVO
62
3
5
135
0
LINE
10
275.000000
20
-485.000000
11
255.000000
21
-485.000000
8
ASSI_PARETI_NUOVO
62
4
5
136
0
POLYLINE
66
1
70
1
8
0
62
7
5
137
0
VERTEX
10
255.000000
20
-305.000000
8
0
62
7
5
138
0
VERTEX
10
275.000000
20
-305.000000
8
0
62
7
5
139
0
VERTEX
10
275.000000
20
-485.000000
8
0
62
7
5
13A
0
VERTEX
10
255.000000
20
-485.000000
8
0
62
7
5
13B
0
SEQEND
5
13C
0
INSERT
2
90400
66
1
10
335.000000
20
-210.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
13D
0
SEQEND
5
13E
0
TEXT
10
341.000000
20
-220.392305
40
4.571429
1
P4
50
0.000000
41
1.000000
72
1
73
1
11
341.000000
21
-220.392305
8
0
62
1
5
13F
0
INSERT
2
00062
66
1
10
205.000000
20
-505.000000
41
1.000000
42
1.000000
50
0.000000
8
0
62
7
5
140
0
SEQEND
5
141
0
TEXT
10
211.000000
20
-515.392305
40
4.571429
1
P5
50
0.000000
41
1.000000
72
1
73
1
11
211.000000
21
-515.392305
8
0
62
1
5
142
0
INSERT
2
00882
66
1
10
220.000000
20
-465.000000
41
1.000000
42
1.000000
50
90.000000
8
0
62
7
5
143
0
SEQEND
5
144
0
ENDSEC
0
EOF`;
useEffect(() => {
const parseReal = () => {
const lines = dxfContent.split('\n').map(l => l.trim());
const blocksMap = {};
const entitiesList = [];
let i = 0;
const readGroup = () => {
if (i >= lines.length) return null;
const code = parseInt(lines[i++]);
const value = lines[i++];
return { code, value };
};
const peekCode = () => {
if (i >= lines.length) return null;
return parseInt(lines[i]);
};
const parseEntityBody = (type) => {
const entity = { type };
while (i < lines.length) {
if (peekCode() === 0) break;
const group = readGroup();
if (!group) break;
const { code, value } = group;
if (code === 10) entity.x = parseFloat(value);
if (code === 20) entity.y = parseFloat(value);
if (code === 11) entity.x1 = parseFloat(value);
if (code === 21) entity.y1 = parseFloat(value);
if (code === 40) entity.r = parseFloat(value);
if (code === 50) entity.angle = parseFloat(value);
if (code === 51) entity.endAngle = parseFloat(value);
if (code === 1) entity.text = String(value);
if (code === 2) entity.blockName = value;
if (code === 41) entity.scaleX = parseFloat(value);
if (code === 42) entity.scaleY = parseFloat(value);
if (code === 62) entity.colorIndex = parseInt(value);
}
return entity;
};
let inEntities = false;
let inBlocks = false;
while (i < lines.length) {
const group = readGroup();
if (!group) break;
if (group.code === 0 && group.value === 'SECTION') {
const next = readGroup();
if (next && next.value === 'BLOCKS') inBlocks = true;
if (next && next.value === 'ENTITIES') inEntities = true;
} else if (group.code === 0 && group.value === 'ENDSEC') {
inBlocks = false;
inEntities = false;
} else if (inBlocks && group.code === 0 && group.value === 'BLOCK') {
let blockName = '';
let blockEntities = [];
while (i < lines.length) {
const bGroup = readGroup();
if (!bGroup) break;
if (bGroup.code === 0 && bGroup.value === 'ENDBLK') break;
if (bGroup.code === 2) blockName = bGroup.value;
if (bGroup.code === 0) {
const entity = parseEntityBody(bGroup.value);
if (entity) blockEntities.push(entity);
}
}
if (blockName) blocksMap[blockName] = blockEntities;
} else if (inEntities && group.code === 0) {
const entity = parseEntityBody(group.value);
if (entity) entitiesList.push(entity);
}
}
setBlocks(blocksMap);
setEntities(entitiesList);
calculateBounds(entitiesList, blocksMap);
setLoading(false);
};
parseReal();
}, []);
const calculateBounds = (ents, blks) => {
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
const processEntity = (e, offsetX = 0, offsetY = 0, scaleX = 1, scaleY = 1) => {
const update = (x, y) => {
if (isNaN(x) || isNaN(y)) return;
minX = Math.min(minX, x);
minY = Math.min(minY, y);
maxX = Math.max(maxX, x);
maxY = Math.max(maxY, y);
};
if (e.type === 'LINE') {
update(e.x * scaleX + offsetX, e.y * scaleY + offsetY);
update(e.x1 * scaleX + offsetX, e.y1 * scaleY + offsetY);
} else if (e.type === 'CIRCLE' || e.type === 'ARC') {
const r = e.r || 0;
update((e.x - r) * scaleX + offsetX, (e.y - r) * scaleY + offsetY);
update((e.x + r) * scaleX + offsetX, (e.y + r) * scaleY + offsetY);
} else if (e.type === 'INSERT') {
const blockEnts = blks[e.blockName] || [];
blockEnts.forEach(be => processEntity(be, e.x + offsetX, e.y + offsetY, e.scaleX || 1, e.scaleY || 1));
} else if (e.x !== undefined) {
update(e.x * scaleX + offsetX, e.y * scaleY + offsetY);
}
};
ents.forEach(e => processEntity(e));
if (minX === Infinity) {
setViewBox({ x: 0, y: 0, width: 500, height: 500 });
} else {
const margin = 20;
// Normalizzazione viewBox per SVG (Y invertita rispetto a DXF)
setViewBox({
x: minX - margin,
y: -(maxY + margin),
width: (maxX - minX) + margin * 2,
height: (maxY - minY) + margin * 2
});
}
};
const getColor = (index) => {
const colors = {
1: '#ff0000', 2: '#f6b93b', 3: '#00ff00', 4: '#00ffff',
5: '#0000ff', 6: '#ff00ff', 7: '#2c3e50'
};
return colors[index] || '#333';
};
const renderEntity = (e, key) => {
const color = getColor(e.colorIndex);
const commonProps = { stroke: color, strokeWidth: "0.5", fill: "none" };
switch (e.type) {
case 'LINE':
return ;
case 'CIRCLE':
return ;
case 'ARC':
return ;
case 'TEXT':
return (
{String(e.text || '')}
);
case 'INSERT':
const blockEnts = blocks[e.blockName] || [];
const rotation = e.angle || 0;
return (
{blockEnts.map((be, i) => renderEntity(be, `be-${key}-${i}`))}
);
default:
return null;
}
};
const handlePrint = () => {
// Breve ritardo per assicurarsi che il DOM sia stabile
setTimeout(() => {
window.print();
}, 200);
};
if (loading) {
return (
);
}
return (
ELABORAZIONE PDF...
{/* Header - Nasconde durante la stampa */}
{/* Drawing Space */}
{/* SVG Container - Forzato per la stampa */}
{/* Info Box - Nasconde in stampa */}
{/* Stili CSS Critici per la stampa */}
);
};
export default App;Esportatore PDF Tecnico
Disegno: 0019-2026.dxf
NOTE PER L'ESPORTAZIONE:
Dopo aver cliccato "Esporta", assicurati di impostare Layout: Orizzontale e Margini: Nessuno nelle impostazioni della stampante.
