CADViewer, with it’s flexible design and use of standard toolkits, can be integrated with any Database Management Application and be used with a multitude of custom data-driven applications.
This Tutorial
This tutorial describes the extension to SVG produced by the CAD converter AutoXchange 2020, that CADViewer utilizes for unit transformations, page-change, dimensioning, etc. when modelling a DWG file as SVG.
This tutorial contains the following sections:
- 1: Definition of the <metadata> tag cadviewer_worldUnits.
- 2: Definition of the <metadata> tag cadviewer_drawingCoordinates.
- 3: Definition of the <metadata> tag cadviewer_ViewportClipping.
- 4: Definition of the <metadata> tag cadviewer_multiPages.
- 5: Variables in the <defs> root section.
- 6: Modelspace viewport classes defined the <defs> section.
- 7: SVG viewport classes defined the <defs> section.
- 8: Using the transformation content to calculate distances.
Please reference our Download section, to download AutoXchange 2020 and CADViewer to test with your own files.
1: cadviewer_worldUnits
AutoXchange represents a number of Unit variables that AutoCAD DWG exposes in the cadviewer_worldUnits matrix in the <metadata> section:
<text id="cadviewer_worldUnits">
{ "globalOrigin": { "x": -7101.72, "y" : 15047.9},
"units": "mm",
"measurementType": "Metric",
"lengthType": "Decimal",
"lengthPrecision": 4,
"blockUnitsFormat": "Undefined",
"svgToWorldUnits": 5.79325,
"worldToSVGUnits": 0.172615
}
</text>
Values from the originating CAD system are:
- measurementType
- lengthType
- lengthPrecision
- blockUnitsFormat
Calculated values to use in the current SVG file are:
- svgToWorldUnits
- worldToSVGUnits
Assumed units in drawing, as perceived by AX2020 at conversion, are:
- units
NOTE: AutoCAD DWG does not contain a unit definition. The assumed unit definition is based on the values of: measurementType, lengthType, lengthPrecision and blockUnitsFormat in combination. The application programmer can make their own assumptions based on these settings. CADViewer includes a Calibrate command, where users can change units or recalibrate if needed.
2: cadviewer_drawingCoordinates
For the current Model or Layout, AutoXchange calculated a transformation between the DWG and SVG extents. For general distance calculation, see section 8, calculate distances.
<text id="cadviewer_drawingCoordinates">
{ "DWG":
{ "lowerLeft": { "x": -7101.72, "y" : 15047.9},
"upperRight": { "x": 7118.24, "y" : 25000.7}
},
"SVG":
{ "lowerLeft": { "x": 22.7133, "y" : 1718},
"upperRight": { "x": 2477.29, "y" : 0}
},
"Drawing Height": 1718
}
</text>
3: cadviewer_ViewportClipping
In case of a PaperSpace Layout, where the viewport to the modelspace is clipped, the viewport path is exposed through cadviewer_ViewportClipping in the <metadata> section:
<text id="cadviewer_ViewportClipping">
{ "paths":
{
[[20,15.5] , [230,15.5] , [230,35] , [326,35] , [326,292] , [20,292] ],
[[326,292] , [326,35] , [415,35] , [415,292] ]
}
}
</text>
4: cadviewer_multiPages
Since SVG is a single page format only, AutoXchange 2020 computes a multipage navigation matrix, when the original drawing is processed for ModelSpace and all Layouts, see cadviewer_multiPages in the <metadata> section:
<text id="cadviewer_multiPages">
{ "multiPages": 3,
"currentPage":1,
"pages" : [
{ "fileName":"bru_52a_basic", "pageName":"ModelSpace"},
{ "fileName":"bru_52a_basic__Layout01", "pageName":"Pr\u00E9sentation1"},
{ "fileName":"bru_52a_basic__Layout02", "pageName":"Pr\u00E9sentation2"}
]
}
</text>
5: Root Section
In the root section of the <defs>, a number of control variables are exposed, for application programmers the important ones are tmsNumberOfLayouts described below in Modelspace viewport classes and tmsNumberOfSVGViewports described below in SVG viewport classes.
<defs>
<style id="cv_styles" type = "text/css">
<![CDATA[
svg{ background-color: white; opacity: 1.}
:root {
--tmsMinLineWidth: 0.6;
--tmsHLWidth: 0.6;
--tmsNumberOfLayouts: 3;
--tmsNumberOfSVGViewports: 1;
--tmsMinFixedLineWidth: 0.2;
--tmsbPostFix: 0;
}
]]></style>
</defs>
6: Modelspace viewport classes
For each PaperSpace Layout, the Viewports defined into the ModelSpace are exposed as .sLO_xx classes. These class definitions contains the Scale Factor and extents of each ModelSpace Viewport
<defs>
<style id="cv_styles" type = "text/css">
<![CDATA[
.sLO_0 {
scale: 1;
x: -62.7155;
y: -1.36865;
width: 545.431;
height: 299.737;
}
.sLO_1 {
scale: 0.0199062;
x: 20;
y: 15.5;
width: 306;
height: 276.5;
}
.sLO_2 {
scale: 0.0994258;
x: 326;
y: 35;
width: 89;
height: 257;
}
]]></style>
</defs>
7: SVG viewport classes
For each PaperSpace Layout, the SVG Viewports mapping a ModelSpace Viewport are defined as .sSVGViewport__xx classes. In most cases there will be just one SVGViewport in a given Layout, but there can be multiple.
<defs>
<style id="cv_styles" type = "text/css">
<![CDATA[
.sSVGViewport_0 {
x: 0;
y: 0.161616;
width: 2500;
height: 1767.68;
}
]]></style>
</defs>
NOTE: If the SVG Viewport is a clipping mask, the .sSVGViewport__xx will be suppressed and instead represented by the cadviewer_ViewportClipping variable in the <metadata> section.
8: Calculate Distances
Distances in the drawing are calculated differently, depending if they are in ModelSpace or in the PaperSpace Layouts
ModelSpace
Distances in ModelSpace are directly transformed using the svgToWorldUnits variable.
distanceDWG = distanceSVG * svgToWorldUnits;
Layout with Rectangular Viewport
The distances in Layouts Viewports needs to be scaled based on the Viewport scale factor and the relative width (or height) factor between the SVG viewport and the DWG viewport into ModelSpace coordinates.
distanceDWG = distanceSVG * sLO_1.width/(sSVGViewport_0.width*sLO_1.scale);
Layout with Clipped Viewport
The application programmer needs to calculate the clipped SVG viewport extents as defined from the path in cadviewer_ViewportClipping, and then apply the same transformation as above in Layout with Rectangular Viewport.