@mlightcad/cad-pdf-plugin 1.8.0-preview.2 → 1.8.0-preview.4
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/LICENSE +21 -21
- package/README.md +280 -186
- package/dist/cad-pdf-plugin-register.js +29 -11
- package/dist/cad-pdf-plugin-register.umd.cjs +1 -1
- package/dist/cad-pdf-plugin.js +17568 -8428
- package/dist/cad-pdf-plugin.umd.cjs +847 -13
- package/lib/AcApConvertToPdfCmd.d.ts.map +1 -1
- package/lib/AcApConvertToPdfCmd.js +14 -3
- package/lib/AcApConvertToPdfCmd.js.map +1 -1
- package/lib/AcApImportPdfCmd.d.ts +5 -3
- package/lib/AcApImportPdfCmd.d.ts.map +1 -1
- package/lib/AcApImportPdfCmd.js +5 -3
- package/lib/AcApImportPdfCmd.js.map +1 -1
- package/lib/AcApImportPdfPromptCmd.d.ts +16 -0
- package/lib/AcApImportPdfPromptCmd.d.ts.map +1 -0
- package/lib/AcApImportPdfPromptCmd.js +89 -0
- package/lib/AcApImportPdfPromptCmd.js.map +1 -0
- package/lib/AcApPdfBlockCmd.d.ts +15 -0
- package/lib/AcApPdfBlockCmd.d.ts.map +1 -0
- package/lib/AcApPdfBlockCmd.js +75 -0
- package/lib/AcApPdfBlockCmd.js.map +1 -0
- package/lib/AcApPdfDimCmd.d.ts +20 -0
- package/lib/AcApPdfDimCmd.d.ts.map +1 -0
- package/lib/AcApPdfDimCmd.js +413 -0
- package/lib/AcApPdfDimCmd.js.map +1 -0
- package/lib/AcApPdfDimSession.d.ts +82 -0
- package/lib/AcApPdfDimSession.d.ts.map +1 -0
- package/lib/AcApPdfDimSession.js +252 -0
- package/lib/AcApPdfDimSession.js.map +1 -0
- package/lib/AcApPdfFontResolver.d.ts.map +1 -1
- package/lib/AcApPdfFontResolver.js +2 -5
- package/lib/AcApPdfFontResolver.js.map +1 -1
- package/lib/AcApPdfHatchCmd.d.ts +33 -0
- package/lib/AcApPdfHatchCmd.d.ts.map +1 -0
- package/lib/AcApPdfHatchCmd.js +411 -0
- package/lib/AcApPdfHatchCmd.js.map +1 -0
- package/lib/AcApPdfHatchSession.d.ts +122 -0
- package/lib/AcApPdfHatchSession.d.ts.map +1 -0
- package/lib/AcApPdfHatchSession.js +357 -0
- package/lib/AcApPdfHatchSession.js.map +1 -0
- package/lib/AcApPdfImportConvertor.d.ts +47 -5
- package/lib/AcApPdfImportConvertor.d.ts.map +1 -1
- package/lib/AcApPdfImportConvertor.js +999 -108
- package/lib/AcApPdfImportConvertor.js.map +1 -1
- package/lib/AcApPdfImportOptions.d.ts +116 -0
- package/lib/AcApPdfImportOptions.d.ts.map +1 -0
- package/lib/AcApPdfImportOptions.js +31 -0
- package/lib/AcApPdfImportOptions.js.map +1 -0
- package/lib/AcApPdfImportResources.d.ts +41 -0
- package/lib/AcApPdfImportResources.d.ts.map +1 -0
- package/lib/AcApPdfImportResources.js +52 -0
- package/lib/AcApPdfImportResources.js.map +1 -0
- package/lib/AcApPdfPlugin.d.ts +3 -3
- package/lib/AcApPdfPlugin.d.ts.map +1 -1
- package/lib/AcApPdfPlugin.js +23 -5
- package/lib/AcApPdfPlugin.js.map +1 -1
- package/lib/AcApPdfScaleCmd.d.ts +22 -0
- package/lib/AcApPdfScaleCmd.d.ts.map +1 -0
- package/lib/AcApPdfScaleCmd.js +185 -0
- package/lib/AcApPdfScaleCmd.js.map +1 -0
- package/lib/AcApPdfTextCmd.d.ts +73 -0
- package/lib/AcApPdfTextCmd.d.ts.map +1 -0
- package/lib/AcApPdfTextCmd.js +777 -0
- package/lib/AcApPdfTextCmd.js.map +1 -0
- package/lib/AcApPdfTextSession.d.ts +232 -0
- package/lib/AcApPdfTextSession.d.ts.map +1 -0
- package/lib/AcApPdfTextSession.js +826 -0
- package/lib/AcApPdfTextSession.js.map +1 -0
- package/lib/acapPdfI18n.d.ts +11 -0
- package/lib/acapPdfI18n.d.ts.map +1 -0
- package/lib/acapPdfI18n.js +57 -0
- package/lib/acapPdfI18n.js.map +1 -0
- package/lib/acapPdfPrompts.d.ts +12 -0
- package/lib/acapPdfPrompts.d.ts.map +1 -0
- package/lib/acapPdfPrompts.js +100 -0
- package/lib/acapPdfPrompts.js.map +1 -0
- package/lib/index.d.ts +28 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +28 -0
- package/lib/index.js.map +1 -1
- package/lib/pdfDeprecatedMatching.d.ts +27 -0
- package/lib/pdfDeprecatedMatching.d.ts.map +1 -0
- package/lib/pdfDeprecatedMatching.js +20 -0
- package/lib/pdfDeprecatedMatching.js.map +1 -0
- package/lib/pdfDimStrokeTexts.d.ts +55 -0
- package/lib/pdfDimStrokeTexts.d.ts.map +1 -0
- package/lib/pdfDimStrokeTexts.js +274 -0
- package/lib/pdfDimStrokeTexts.js.map +1 -0
- package/lib/pdfDimensionConvert.d.ts +80 -0
- package/lib/pdfDimensionConvert.d.ts.map +1 -0
- package/lib/pdfDimensionConvert.js +566 -0
- package/lib/pdfDimensionConvert.js.map +1 -0
- package/lib/pdfEntityStrokes.d.ts +13 -0
- package/lib/pdfEntityStrokes.d.ts.map +1 -0
- package/lib/pdfEntityStrokes.js +86 -0
- package/lib/pdfEntityStrokes.js.map +1 -0
- package/lib/pdfHatchRecover.d.ts +57 -0
- package/lib/pdfHatchRecover.d.ts.map +1 -0
- package/lib/pdfHatchRecover.js +315 -0
- package/lib/pdfHatchRecover.js.map +1 -0
- package/lib/pdfImportAppend.d.ts +24 -0
- package/lib/pdfImportAppend.d.ts.map +1 -0
- package/lib/pdfImportAppend.js +35 -0
- package/lib/pdfImportAppend.js.map +1 -0
- package/lib/pdfImportEntities.d.ts +63 -0
- package/lib/pdfImportEntities.d.ts.map +1 -0
- package/lib/pdfImportEntities.js +307 -0
- package/lib/pdfImportEntities.js.map +1 -0
- package/lib/pdfImportImages.d.ts +90 -0
- package/lib/pdfImportImages.d.ts.map +1 -0
- package/lib/pdfImportImages.js +294 -0
- package/lib/pdfImportImages.js.map +1 -0
- package/lib/pdfImportShapes.d.ts +63 -0
- package/lib/pdfImportShapes.d.ts.map +1 -0
- package/lib/pdfImportShapes.js +248 -0
- package/lib/pdfImportShapes.js.map +1 -0
- package/lib/pdfVectorImport.d.ts +218 -5
- package/lib/pdfVectorImport.d.ts.map +1 -1
- package/lib/pdfVectorImport.js +566 -98
- package/lib/pdfVectorImport.js.map +1 -1
- package/lib/recognition/pdfCurveRecognition.d.ts +91 -0
- package/lib/recognition/pdfCurveRecognition.d.ts.map +1 -0
- package/lib/recognition/pdfCurveRecognition.js +506 -0
- package/lib/recognition/pdfCurveRecognition.js.map +1 -0
- package/lib/recognition/pdfDimDigitRecognition.d.ts +18 -0
- package/lib/recognition/pdfDimDigitRecognition.d.ts.map +1 -0
- package/lib/recognition/pdfDimDigitRecognition.js +520 -0
- package/lib/recognition/pdfDimDigitRecognition.js.map +1 -0
- package/lib/recognition/pdfDimensionPattern.d.ts +173 -0
- package/lib/recognition/pdfDimensionPattern.d.ts.map +1 -0
- package/lib/recognition/pdfDimensionPattern.js +1023 -0
- package/lib/recognition/pdfDimensionPattern.js.map +1 -0
- package/lib/recognition/pdfFormBlocks.d.ts +58 -0
- package/lib/recognition/pdfFormBlocks.d.ts.map +1 -0
- package/lib/recognition/pdfFormBlocks.js +260 -0
- package/lib/recognition/pdfFormBlocks.js.map +1 -0
- package/lib/recognition/pdfGlyphClustering.d.ts +81 -0
- package/lib/recognition/pdfGlyphClustering.d.ts.map +1 -0
- package/lib/recognition/pdfGlyphClustering.js +1005 -0
- package/lib/recognition/pdfGlyphClustering.js.map +1 -0
- package/lib/recognition/pdfGlyphDictionary.d.ts +49 -0
- package/lib/recognition/pdfGlyphDictionary.d.ts.map +1 -0
- package/lib/recognition/pdfGlyphDictionary.js +188 -0
- package/lib/recognition/pdfGlyphDictionary.js.map +1 -0
- package/lib/recognition/pdfHatchFaces.d.ts +84 -0
- package/lib/recognition/pdfHatchFaces.d.ts.map +1 -0
- package/lib/recognition/pdfHatchFaces.js +1285 -0
- package/lib/recognition/pdfHatchFaces.js.map +1 -0
- package/lib/recognition/pdfHatchRecognition.d.ts +222 -0
- package/lib/recognition/pdfHatchRecognition.d.ts.map +1 -0
- package/lib/recognition/pdfHatchRecognition.js +3781 -0
- package/lib/recognition/pdfHatchRecognition.js.map +1 -0
- package/lib/recognition/pdfRecGeometry.d.ts +67 -0
- package/lib/recognition/pdfRecGeometry.d.ts.map +1 -0
- package/lib/recognition/pdfRecGeometry.js +365 -0
- package/lib/recognition/pdfRecGeometry.js.map +1 -0
- package/lib/recognition/pdfTextFontKind.d.ts +16 -0
- package/lib/recognition/pdfTextFontKind.d.ts.map +1 -0
- package/lib/recognition/pdfTextFontKind.js +51 -0
- package/lib/recognition/pdfTextFontKind.js.map +1 -0
- package/lib/recognition/pdfTextMerge.d.ts +71 -0
- package/lib/recognition/pdfTextMerge.d.ts.map +1 -0
- package/lib/recognition/pdfTextMerge.js +382 -0
- package/lib/recognition/pdfTextMerge.js.map +1 -0
- package/lib/recognition/pdfTextRunMerge.d.ts +28 -0
- package/lib/recognition/pdfTextRunMerge.d.ts.map +1 -0
- package/lib/recognition/pdfTextRunMerge.js +90 -0
- package/lib/recognition/pdfTextRunMerge.js.map +1 -0
- package/lib/register.d.ts +8 -2
- package/lib/register.d.ts.map +1 -1
- package/lib/register.js +29 -4
- package/lib/register.js.map +1 -1
- package/lib/ui/AcUiPdfDimPanel.d.ts +55 -0
- package/lib/ui/AcUiPdfDimPanel.d.ts.map +1 -0
- package/lib/ui/AcUiPdfDimPanel.js +347 -0
- package/lib/ui/AcUiPdfDimPanel.js.map +1 -0
- package/lib/ui/AcUiPdfHatchPanel.d.ts +57 -0
- package/lib/ui/AcUiPdfHatchPanel.d.ts.map +1 -0
- package/lib/ui/AcUiPdfHatchPanel.js +420 -0
- package/lib/ui/AcUiPdfHatchPanel.js.map +1 -0
- package/lib/ui/AcUiPdfImportDialog.d.ts +120 -0
- package/lib/ui/AcUiPdfImportDialog.d.ts.map +1 -0
- package/lib/ui/AcUiPdfImportDialog.js +673 -0
- package/lib/ui/AcUiPdfImportDialog.js.map +1 -0
- package/lib/ui/AcUiPdfTextPanel.d.ts +95 -0
- package/lib/ui/AcUiPdfTextPanel.d.ts.map +1 -0
- package/lib/ui/AcUiPdfTextPanel.js +775 -0
- package/lib/ui/AcUiPdfTextPanel.js.map +1 -0
- package/package.json +11 -11
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function(o) {
|
|
2
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
if (o && typeof o.length === "number") return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
+
};
|
|
12
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
+
if (!m) return o;
|
|
15
|
+
var i = m.call(o), r, ar = [], e;
|
|
16
|
+
try {
|
|
17
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
+
}
|
|
19
|
+
catch (error) { e = { error: error }; }
|
|
20
|
+
finally {
|
|
21
|
+
try {
|
|
22
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
+
}
|
|
24
|
+
finally { if (e) throw e.error; }
|
|
25
|
+
}
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
29
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
30
|
+
if (ar || !(i in from)) {
|
|
31
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
32
|
+
ar[i] = from[i];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
36
|
+
};
|
|
37
|
+
import { AcDbHatch, AcDbHatchPatternType, AcDbLinetypeTableRecord, AcDbTextStyleTableRecord, AcGeCircArc2d, AcGeEllipseArc2d, AcGeLine2d, AcGeLoop2d, AcGePoint2d, HATCH_PATTERN_SOLID, HATCH_PATTERN_USER } from '@mlightcad/data-model';
|
|
38
|
+
import { cubicAt } from './recognition/pdfRecGeometry';
|
|
39
|
+
/** Name prefix for linetypes created from PDF dash patterns. */
|
|
40
|
+
export var PDF_DASH_LINETYPE_PREFIX = 'PDF_DASH_';
|
|
41
|
+
/**
|
|
42
|
+
* Returns the linetype for a dash pattern (alternating dash, gap lengths in
|
|
43
|
+
* drawing units), creating it on first use. Equal patterns share one record.
|
|
44
|
+
*/
|
|
45
|
+
export function acapPdfEnsureDashLinetype(db, pattern) {
|
|
46
|
+
var key = pattern.map(function (n) { return n.toFixed(4); }).join('_');
|
|
47
|
+
var name = "".concat(PDF_DASH_LINETYPE_PREFIX).concat(hashString(key));
|
|
48
|
+
var table = db.tables.linetypeTable;
|
|
49
|
+
if (table.has(name))
|
|
50
|
+
return name;
|
|
51
|
+
// CAD linetype: positive = dash (pen down), negative = gap (pen up).
|
|
52
|
+
var elements = pattern.map(function (length, i) { return ({
|
|
53
|
+
elementLength: i % 2 === 0 ? Math.max(length, 1e-6) : -Math.max(length, 1e-6),
|
|
54
|
+
elementTypeFlag: 0
|
|
55
|
+
}); });
|
|
56
|
+
table.add(new AcDbLinetypeTableRecord({
|
|
57
|
+
name: name,
|
|
58
|
+
description: "PDF dash ".concat(pattern.map(function (n) { return n.toFixed(2); }).join(',')),
|
|
59
|
+
totalPatternLength: elements.reduce(function (sum, e) { return sum + Math.abs(e.elementLength); }, 0),
|
|
60
|
+
pattern: elements
|
|
61
|
+
}));
|
|
62
|
+
return name;
|
|
63
|
+
}
|
|
64
|
+
function hashString(s) {
|
|
65
|
+
var h = 2166136261;
|
|
66
|
+
for (var i = 0; i < s.length; i++) {
|
|
67
|
+
h ^= s.charCodeAt(i);
|
|
68
|
+
h = Math.imul(h, 16777619);
|
|
69
|
+
}
|
|
70
|
+
return (h >>> 0).toString(16);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Hatch loop for a closed shape, or `undefined` for open ones (lines, arcs,
|
|
74
|
+
* open polylines and splines).
|
|
75
|
+
*/
|
|
76
|
+
export function acapPdfShapeToLoop(shape) {
|
|
77
|
+
var loop = new AcGeLoop2d();
|
|
78
|
+
switch (shape.kind) {
|
|
79
|
+
case 'circle':
|
|
80
|
+
loop.add(new AcGeCircArc2d({ x: shape.center.x, y: shape.center.y }, shape.radius, 0, Math.PI * 2, false));
|
|
81
|
+
return loop;
|
|
82
|
+
case 'ellipse': {
|
|
83
|
+
var full = Math.abs(shape.endAngle - shape.startAngle - Math.PI * 2) < 1e-9;
|
|
84
|
+
if (!full)
|
|
85
|
+
return undefined;
|
|
86
|
+
var major = Math.hypot(shape.majorAxis.x, shape.majorAxis.y);
|
|
87
|
+
loop.add(new AcGeEllipseArc2d({ x: shape.center.x, y: shape.center.y, z: 0 }, major, major * shape.radiusRatio, 0, Math.PI * 2, false, Math.atan2(shape.majorAxis.y, shape.majorAxis.x)));
|
|
88
|
+
return loop;
|
|
89
|
+
}
|
|
90
|
+
case 'polyline': {
|
|
91
|
+
var v = shape.vertices;
|
|
92
|
+
// Two vertices enclose an area only when a bulge rounds one side
|
|
93
|
+
// (e.g. a semicircular tab closed by its chord).
|
|
94
|
+
var encloses = v.length >= 3 ||
|
|
95
|
+
(v.length === 2 && v.some(function (vertex) { return Math.abs(vertex.bulge) > 1e-12; }));
|
|
96
|
+
if (!shape.closed || !encloses)
|
|
97
|
+
return undefined;
|
|
98
|
+
for (var i = 0; i < v.length; i++) {
|
|
99
|
+
var a = v[i];
|
|
100
|
+
var b = v[(i + 1) % v.length];
|
|
101
|
+
if (Math.abs(a.bulge) > 1e-12) {
|
|
102
|
+
loop.add(new AcGeCircArc2d({ x: a.x, y: a.y }, { x: b.x, y: b.y }, a.bulge));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
loop.add(new AcGeLine2d(new AcGePoint2d(a.x, a.y), new AcGePoint2d(b.x, b.y)));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return loop;
|
|
109
|
+
}
|
|
110
|
+
case 'spline': {
|
|
111
|
+
// Closed Bezier chain: sample each cubic into the loop.
|
|
112
|
+
var c = shape.controlPoints;
|
|
113
|
+
if (c.length < 4)
|
|
114
|
+
return undefined;
|
|
115
|
+
var first = c[0];
|
|
116
|
+
var last = c[c.length - 1];
|
|
117
|
+
if (Math.hypot(first.x - last.x, first.y - last.y) > 1e-6)
|
|
118
|
+
return undefined;
|
|
119
|
+
var points = [first];
|
|
120
|
+
for (var i = 0; i + 3 < c.length; i += 3) {
|
|
121
|
+
for (var k = 1; k <= 8; k++) {
|
|
122
|
+
points.push(cubicAt(c[i], c[i + 1], c[i + 2], c[i + 3], k / 8));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
for (var i = 0; i < points.length - 1; i++) {
|
|
126
|
+
loop.add(new AcGeLine2d(new AcGePoint2d(points[i].x, points[i].y), new AcGePoint2d(points[i + 1].x, points[i + 1].y)));
|
|
127
|
+
}
|
|
128
|
+
return loop;
|
|
129
|
+
}
|
|
130
|
+
default:
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Solid hatch over the given loops (even-odd, so inner loops are holes).
|
|
136
|
+
*
|
|
137
|
+
* @returns The hatch, or `undefined` when no loop is closed.
|
|
138
|
+
*/
|
|
139
|
+
export function acapPdfCreateSolidHatch(db, loops) {
|
|
140
|
+
var e_1, _a;
|
|
141
|
+
if (loops.length === 0)
|
|
142
|
+
return undefined;
|
|
143
|
+
var hatch = new AcDbHatch();
|
|
144
|
+
// patternName needs a database context.
|
|
145
|
+
hatch.database = db;
|
|
146
|
+
hatch.patternName = HATCH_PATTERN_SOLID;
|
|
147
|
+
hatch.patternType = AcDbHatchPatternType.Predefined;
|
|
148
|
+
hatch.isSolidFill = true;
|
|
149
|
+
// No boundary objects back the loops, so the hatch is not associative
|
|
150
|
+
// (HPASSOC would otherwise apply and hide its boundary grips).
|
|
151
|
+
hatch.associative = false;
|
|
152
|
+
try {
|
|
153
|
+
for (var loops_1 = __values(loops), loops_1_1 = loops_1.next(); !loops_1_1.done; loops_1_1 = loops_1.next()) {
|
|
154
|
+
var loop = loops_1_1.value;
|
|
155
|
+
hatch.add(loop);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
159
|
+
finally {
|
|
160
|
+
try {
|
|
161
|
+
if (loops_1_1 && !loops_1_1.done && (_a = loops_1.return)) _a.call(loops_1);
|
|
162
|
+
}
|
|
163
|
+
finally { if (e_1) throw e_1.error; }
|
|
164
|
+
}
|
|
165
|
+
return hatch;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Pattern hatch over the given loops (even-odd, so inner loops are holes).
|
|
169
|
+
*
|
|
170
|
+
* The hatch keeps the recognized definition lines verbatim, the same way a
|
|
171
|
+
* DXF hatch does, so it draws exactly what was matched against the PDF.
|
|
172
|
+
*
|
|
173
|
+
* @param pattern - Pattern name / type, scale and angle to record.
|
|
174
|
+
* @param lines - Definition lines in drawing coordinates.
|
|
175
|
+
* @returns The hatch, or `undefined` when no loop is closed.
|
|
176
|
+
*/
|
|
177
|
+
export function acapPdfCreatePatternHatch(db, loops, pattern, lines) {
|
|
178
|
+
var e_2, _a, e_3, _b;
|
|
179
|
+
if (loops.length === 0 || lines.length === 0)
|
|
180
|
+
return undefined;
|
|
181
|
+
var hatch = new AcDbHatch();
|
|
182
|
+
hatch.database = db;
|
|
183
|
+
// Explicit lines first: with them in place the pattern name no longer
|
|
184
|
+
// regenerates lines from the PAT library. A non-predefined type drops any
|
|
185
|
+
// lines the database defaults (HPNAME) already generated.
|
|
186
|
+
hatch.patternType = AcDbHatchPatternType.UserDefined;
|
|
187
|
+
hatch.definitionLines.length = 0;
|
|
188
|
+
try {
|
|
189
|
+
for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
|
|
190
|
+
var line = lines_1_1.value;
|
|
191
|
+
hatch.definitionLines.push({
|
|
192
|
+
angle: line.angle,
|
|
193
|
+
base: { x: line.base.x, y: line.base.y },
|
|
194
|
+
offset: { x: line.offset.x, y: line.offset.y },
|
|
195
|
+
dashLengths: __spreadArray([], __read(line.dashLengths), false)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
200
|
+
finally {
|
|
201
|
+
try {
|
|
202
|
+
if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
|
|
203
|
+
}
|
|
204
|
+
finally { if (e_2) throw e_2.error; }
|
|
205
|
+
}
|
|
206
|
+
if (pattern.type === 'predefined') {
|
|
207
|
+
hatch.patternType = AcDbHatchPatternType.Predefined;
|
|
208
|
+
hatch.patternName = pattern.name;
|
|
209
|
+
hatch.patternScale = pattern.scale;
|
|
210
|
+
hatch.patternAngle = pattern.angle;
|
|
211
|
+
}
|
|
212
|
+
else if (pattern.type === 'userDefined') {
|
|
213
|
+
hatch.patternType = AcDbHatchPatternType.UserDefined;
|
|
214
|
+
hatch.patternName = HATCH_PATTERN_USER;
|
|
215
|
+
hatch.patternScale = 1;
|
|
216
|
+
hatch.patternDouble = pattern.double;
|
|
217
|
+
hatch.patternAngle = pattern.angle;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// A measured pattern: the definition lines already hold angle and size.
|
|
221
|
+
hatch.patternType = AcDbHatchPatternType.Custom;
|
|
222
|
+
hatch.patternName = pattern.name;
|
|
223
|
+
hatch.patternScale = 1;
|
|
224
|
+
hatch.patternAngle = 0;
|
|
225
|
+
}
|
|
226
|
+
hatch.isSolidFill = false;
|
|
227
|
+
hatch.associative = false;
|
|
228
|
+
try {
|
|
229
|
+
for (var loops_2 = __values(loops), loops_2_1 = loops_2.next(); !loops_2_1.done; loops_2_1 = loops_2.next()) {
|
|
230
|
+
var loop = loops_2_1.value;
|
|
231
|
+
hatch.add(loop);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
235
|
+
finally {
|
|
236
|
+
try {
|
|
237
|
+
if (loops_2_1 && !loops_2_1.done && (_b = loops_2.return)) _b.call(loops_2);
|
|
238
|
+
}
|
|
239
|
+
finally { if (e_3) throw e_3.error; }
|
|
240
|
+
}
|
|
241
|
+
return hatch;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Font family from a PDF font name: drops the subset tag (`ABCDEF+`) and
|
|
245
|
+
* weight / style suffixes (`Arial-BoldMT` → `Arial`, `Arial,Bold` → `Arial`).
|
|
246
|
+
*/
|
|
247
|
+
export function acapPdfFontFamily(name) {
|
|
248
|
+
var family = name.replace(/^[A-Z]{6}\+/, '').split(',')[0];
|
|
249
|
+
family = family.replace(/[- ](Bold|Italic|Oblique|BoldItalic|BoldOblique|Regular|Roman|Light|Medium|Semibold|Black|Book)+(MT|PS|PSMT)?$/i, '');
|
|
250
|
+
family = family.replace(/(PSMT|MT|PS)$/, '');
|
|
251
|
+
return family.trim() || name;
|
|
252
|
+
}
|
|
253
|
+
/** Prefix of text styles created for PDF fonts. */
|
|
254
|
+
export var PDF_TEXT_STYLE_PREFIX = 'PDF_';
|
|
255
|
+
/**
|
|
256
|
+
* Returns the `PDF_<family>` text style for a font family, creating it on
|
|
257
|
+
* first use with that family as its (TrueType) font.
|
|
258
|
+
*/
|
|
259
|
+
export function acapPdfEnsureTextStyle(db, family) {
|
|
260
|
+
var name = "".concat(PDF_TEXT_STYLE_PREFIX).concat(family).replace(/[;=<>`\\,|*?":/]/g, '_');
|
|
261
|
+
var table = db.tables.textStyleTable;
|
|
262
|
+
if (table.has(name))
|
|
263
|
+
return name;
|
|
264
|
+
table.add(new AcDbTextStyleTableRecord({
|
|
265
|
+
name: name,
|
|
266
|
+
standardFlag: 0,
|
|
267
|
+
fixedTextHeight: 0,
|
|
268
|
+
widthFactor: 1,
|
|
269
|
+
obliqueAngle: 0,
|
|
270
|
+
textGenerationFlag: 0,
|
|
271
|
+
lastHeight: 2.5,
|
|
272
|
+
font: family,
|
|
273
|
+
bigFont: '',
|
|
274
|
+
extendedFont: family
|
|
275
|
+
}));
|
|
276
|
+
return name;
|
|
277
|
+
}
|
|
278
|
+
/** Text style created for recovered SHX line text. */
|
|
279
|
+
export var PDF_SHX_TEXT_STYLE = "".concat(PDF_TEXT_STYLE_PREFIX, "SHX");
|
|
280
|
+
/** SHX font and big font of {@link PDF_SHX_TEXT_STYLE}. */
|
|
281
|
+
export var PDF_SHX_FONT = 'txt';
|
|
282
|
+
export var PDF_SHX_BIG_FONT = 'gbcbig';
|
|
283
|
+
/** Width factors outside this range mean a bad measurement, not real text. */
|
|
284
|
+
var MIN_FIT_WIDTH_FACTOR = 0.1;
|
|
285
|
+
var MAX_FIT_WIDTH_FACTOR = 10;
|
|
286
|
+
/**
|
|
287
|
+
* Width factor that makes text span its PDF advance width.
|
|
288
|
+
*
|
|
289
|
+
* The CAD font usually differs from the PDF font, so text with the PDF's
|
|
290
|
+
* own width factor runs long or short. Scaling by the measured width keeps
|
|
291
|
+
* each run inside the space it had on the page.
|
|
292
|
+
*
|
|
293
|
+
* @param pdfWidthFactor - Width factor from the PDF text matrix (fallback).
|
|
294
|
+
* @param pdfWidth - Advance width of the run in the PDF, in drawing units.
|
|
295
|
+
* @param naturalWidth - Width of the same text in the CAD font at width
|
|
296
|
+
* factor 1, in drawing units.
|
|
297
|
+
*/
|
|
298
|
+
export function acapPdfFitWidthFactor(pdfWidthFactor, pdfWidth, naturalWidth) {
|
|
299
|
+
if (pdfWidth === undefined ||
|
|
300
|
+
naturalWidth === undefined ||
|
|
301
|
+
!(pdfWidth > 0) ||
|
|
302
|
+
!(naturalWidth > 0)) {
|
|
303
|
+
return pdfWidthFactor;
|
|
304
|
+
}
|
|
305
|
+
return Math.min(MAX_FIT_WIDTH_FACTOR, Math.max(MIN_FIT_WIDTH_FACTOR, pdfWidth / naturalWidth));
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=pdfImportEntities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfImportEntities.js","sourceRoot":"","sources":["../src/pdfImportEntities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF image paints → raster pictures for `AcDbRasterImage`.
|
|
3
|
+
*
|
|
4
|
+
* `AcDbRasterImage` places an upright rectangle, but a PDF image can be
|
|
5
|
+
* rotated, mirrored or skewed. Each image is therefore redrawn, with its full
|
|
6
|
+
* transform, into an axis-aligned canvas covering its bounding box; pixels
|
|
7
|
+
* outside the image stay transparent.
|
|
8
|
+
*/
|
|
9
|
+
import type { PdfImportedImage } from './pdfVectorImport';
|
|
10
|
+
/** Affine map `x' = a·x + c·y + e`, `y' = b·x + d·y + f`. */
|
|
11
|
+
export type PdfImageAffine = PdfImportedImage['toCad'];
|
|
12
|
+
/** Where and how large to draw one image. */
|
|
13
|
+
export interface PdfImagePlacement {
|
|
14
|
+
/** Axis-aligned model-space box (lower-left corner and size). */
|
|
15
|
+
box: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
21
|
+
canvasWidth: number;
|
|
22
|
+
canvasHeight: number;
|
|
23
|
+
/**
|
|
24
|
+
* Canvas `setTransform(a, b, c, d, e, f)` that maps image pixel
|
|
25
|
+
* coordinates (origin top-left, y down) onto the canvas.
|
|
26
|
+
*/
|
|
27
|
+
transform: [number, number, number, number, number, number];
|
|
28
|
+
}
|
|
29
|
+
/** Largest canvas side; keeps memory bounded for huge scans. */
|
|
30
|
+
export declare const PDF_IMAGE_MAX_CANVAS_SIDE = 4096;
|
|
31
|
+
/**
|
|
32
|
+
* Computes the axis-aligned box and canvas transform for an image.
|
|
33
|
+
*
|
|
34
|
+
* The canvas resolution keeps the image's own pixel density along its
|
|
35
|
+
* sharper axis, capped at `maxSide` pixels.
|
|
36
|
+
*
|
|
37
|
+
* @param toCad - Unit square → model space (see {@link PdfImportedImage}).
|
|
38
|
+
* @param pixelWidth - Image width in pixels.
|
|
39
|
+
* @param pixelHeight - Image height in pixels.
|
|
40
|
+
* @param maxSide - Largest canvas side in pixels.
|
|
41
|
+
* @returns The placement, or `undefined` for a degenerate image.
|
|
42
|
+
*/
|
|
43
|
+
export declare function acapPdfImagePlacement(toCad: PdfImageAffine, pixelWidth: number, pixelHeight: number, maxSide?: number): PdfImagePlacement | undefined;
|
|
44
|
+
/** PDF.js decoded image (`page.objs` entry or inline image data). */
|
|
45
|
+
export interface PdfJsImageLike {
|
|
46
|
+
width?: number;
|
|
47
|
+
height?: number;
|
|
48
|
+
/** PDF.js `ImageKind`: 1 = 1-bit gray, 2 = RGB, 3 = RGBA. */
|
|
49
|
+
kind?: number;
|
|
50
|
+
data?: ArrayLike<number>;
|
|
51
|
+
/** Present when PDF.js decoded the image into a bitmap. */
|
|
52
|
+
bitmap?: unknown;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Converts PDF.js raw pixel data to RGBA.
|
|
56
|
+
*
|
|
57
|
+
* @param image - Decoded image with `kind` and `data`.
|
|
58
|
+
* @returns RGBA bytes (`width × height × 4`), or `undefined` when the data
|
|
59
|
+
* is missing, short or of an unknown kind.
|
|
60
|
+
*/
|
|
61
|
+
export declare function acapPdfImageToRgba(image: PdfJsImageLike): Uint8ClampedArray | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Lays dark ink on transparency (QR codes, stamps, signatures) onto white
|
|
64
|
+
* paper, in place.
|
|
65
|
+
*
|
|
66
|
+
* Such images rely on the white PDF page behind them; on a dark CAD canvas
|
|
67
|
+
* their black ink would all but disappear. Coloured or fully opaque images
|
|
68
|
+
* are left alone, so artwork over coloured areas keeps its transparency.
|
|
69
|
+
*
|
|
70
|
+
* @param rgba - RGBA pixels, modified when flattened.
|
|
71
|
+
* @returns `true` when the image was flattened.
|
|
72
|
+
*/
|
|
73
|
+
export declare function acapPdfFlattenInkOnPaper(rgba: Uint8ClampedArray): boolean;
|
|
74
|
+
/** One image redrawn as an upright PNG, ready for `AcDbRasterImage`. */
|
|
75
|
+
export interface PdfRasterizedImage {
|
|
76
|
+
png: Blob;
|
|
77
|
+
box: PdfImagePlacement['box'];
|
|
78
|
+
pixelWidth: number;
|
|
79
|
+
pixelHeight: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Draws a PDF.js image with its placement into an upright PNG. Browser only
|
|
83
|
+
* (uses `document` canvases).
|
|
84
|
+
*
|
|
85
|
+
* @param image - Decoded PDF.js image.
|
|
86
|
+
* @param toCad - Unit square → model space, already scaled and placed.
|
|
87
|
+
* @returns The PNG and its box, or `undefined` when it cannot be drawn.
|
|
88
|
+
*/
|
|
89
|
+
export declare function acapPdfRasterizeImage(image: PdfJsImageLike, toCad: PdfImageAffine): Promise<PdfRasterizedImage | undefined>;
|
|
90
|
+
//# sourceMappingURL=pdfImportImages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfImportImages.d.ts","sourceRoot":"","sources":["../src/pdfImportImages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,6DAA6D;AAC7D,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;AAEtD,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAC5D;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,OAAO,CAAA;AAE7C;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,SAA4B,GAClC,iBAAiB,GAAG,SAAS,CA6C/B;AAED,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACxB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,GACpB,iBAAiB,GAAG,SAAS,CAuC/B;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CA+BzE;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,IAAI,CAAA;IACT,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAgDzC"}
|