@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,294 @@
|
|
|
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
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
19
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
20
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
21
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
22
|
+
function step(op) {
|
|
23
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
24
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
25
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
26
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
27
|
+
switch (op[0]) {
|
|
28
|
+
case 0: case 1: t = op; break;
|
|
29
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
30
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
31
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
32
|
+
default:
|
|
33
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
34
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
35
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
36
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
37
|
+
if (t[2]) _.ops.pop();
|
|
38
|
+
_.trys.pop(); continue;
|
|
39
|
+
}
|
|
40
|
+
op = body.call(thisArg, _);
|
|
41
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
42
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
46
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
47
|
+
if (!m) return o;
|
|
48
|
+
var i = m.call(o), r, ar = [], e;
|
|
49
|
+
try {
|
|
50
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
51
|
+
}
|
|
52
|
+
catch (error) { e = { error: error }; }
|
|
53
|
+
finally {
|
|
54
|
+
try {
|
|
55
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
56
|
+
}
|
|
57
|
+
finally { if (e) throw e.error; }
|
|
58
|
+
}
|
|
59
|
+
return ar;
|
|
60
|
+
};
|
|
61
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
62
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
63
|
+
if (ar || !(i in from)) {
|
|
64
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
65
|
+
ar[i] = from[i];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
69
|
+
};
|
|
70
|
+
/** Largest canvas side; keeps memory bounded for huge scans. */
|
|
71
|
+
export var PDF_IMAGE_MAX_CANVAS_SIDE = 4096;
|
|
72
|
+
/**
|
|
73
|
+
* Computes the axis-aligned box and canvas transform for an image.
|
|
74
|
+
*
|
|
75
|
+
* The canvas resolution keeps the image's own pixel density along its
|
|
76
|
+
* sharper axis, capped at `maxSide` pixels.
|
|
77
|
+
*
|
|
78
|
+
* @param toCad - Unit square → model space (see {@link PdfImportedImage}).
|
|
79
|
+
* @param pixelWidth - Image width in pixels.
|
|
80
|
+
* @param pixelHeight - Image height in pixels.
|
|
81
|
+
* @param maxSide - Largest canvas side in pixels.
|
|
82
|
+
* @returns The placement, or `undefined` for a degenerate image.
|
|
83
|
+
*/
|
|
84
|
+
export function acapPdfImagePlacement(toCad, pixelWidth, pixelHeight, maxSide) {
|
|
85
|
+
if (maxSide === void 0) { maxSide = PDF_IMAGE_MAX_CANVAS_SIDE; }
|
|
86
|
+
var a = toCad.a, b = toCad.b, c = toCad.c, d = toCad.d, e = toCad.e, f = toCad.f;
|
|
87
|
+
var uLength = Math.hypot(a, b);
|
|
88
|
+
var vLength = Math.hypot(c, d);
|
|
89
|
+
if (!(pixelWidth > 0) ||
|
|
90
|
+
!(pixelHeight > 0) ||
|
|
91
|
+
!(uLength > 1e-9) ||
|
|
92
|
+
!(vLength > 1e-9) ||
|
|
93
|
+
Math.abs(a * d - b * c) < 1e-12) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
var xs = [e, e + a, e + c, e + a + c];
|
|
97
|
+
var ys = [f, f + b, f + d, f + b + d];
|
|
98
|
+
var minX = Math.min.apply(Math, __spreadArray([], __read(xs), false));
|
|
99
|
+
var maxX = Math.max.apply(Math, __spreadArray([], __read(xs), false));
|
|
100
|
+
var minY = Math.min.apply(Math, __spreadArray([], __read(ys), false));
|
|
101
|
+
var maxY = Math.max.apply(Math, __spreadArray([], __read(ys), false));
|
|
102
|
+
var width = maxX - minX;
|
|
103
|
+
var height = maxY - minY;
|
|
104
|
+
var k = Math.max(pixelWidth / uLength, pixelHeight / vLength);
|
|
105
|
+
k = Math.min(k, maxSide / Math.max(width, height));
|
|
106
|
+
var canvasWidth = Math.max(1, Math.round(width * k));
|
|
107
|
+
var canvasHeight = Math.max(1, Math.round(height * k));
|
|
108
|
+
// Use the rounded size so the image fills the canvas exactly.
|
|
109
|
+
var kx = canvasWidth / width;
|
|
110
|
+
var ky = canvasHeight / height;
|
|
111
|
+
// Pixel (px, py) → unit (px/W, 1 - py/H) → model → canvas (y down).
|
|
112
|
+
return {
|
|
113
|
+
box: { x: minX, y: minY, width: width, height: height },
|
|
114
|
+
canvasWidth: canvasWidth,
|
|
115
|
+
canvasHeight: canvasHeight,
|
|
116
|
+
transform: [
|
|
117
|
+
(kx * a) / pixelWidth,
|
|
118
|
+
(-ky * b) / pixelWidth,
|
|
119
|
+
(-kx * c) / pixelHeight,
|
|
120
|
+
(ky * d) / pixelHeight,
|
|
121
|
+
kx * (c + e - minX),
|
|
122
|
+
ky * (maxY - d - f)
|
|
123
|
+
]
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
var IMAGE_KIND_GRAYSCALE_1BPP = 1;
|
|
127
|
+
var IMAGE_KIND_RGB_24BPP = 2;
|
|
128
|
+
var IMAGE_KIND_RGBA_32BPP = 3;
|
|
129
|
+
/**
|
|
130
|
+
* Converts PDF.js raw pixel data to RGBA.
|
|
131
|
+
*
|
|
132
|
+
* @param image - Decoded image with `kind` and `data`.
|
|
133
|
+
* @returns RGBA bytes (`width × height × 4`), or `undefined` when the data
|
|
134
|
+
* is missing, short or of an unknown kind.
|
|
135
|
+
*/
|
|
136
|
+
export function acapPdfImageToRgba(image) {
|
|
137
|
+
var _a = image.width, width = _a === void 0 ? 0 : _a, _b = image.height, height = _b === void 0 ? 0 : _b, kind = image.kind, data = image.data;
|
|
138
|
+
if (!(width > 0) || !(height > 0) || !data)
|
|
139
|
+
return undefined;
|
|
140
|
+
var pixels = width * height;
|
|
141
|
+
var out = new Uint8ClampedArray(pixels * 4);
|
|
142
|
+
if (kind === IMAGE_KIND_RGBA_32BPP) {
|
|
143
|
+
if (data.length < pixels * 4)
|
|
144
|
+
return undefined;
|
|
145
|
+
out.set(Array.prototype.slice.call(data, 0, pixels * 4));
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
if (kind === IMAGE_KIND_RGB_24BPP) {
|
|
149
|
+
if (data.length < pixels * 3)
|
|
150
|
+
return undefined;
|
|
151
|
+
for (var i = 0, j = 0; i < pixels; i++, j += 3) {
|
|
152
|
+
out[i * 4] = data[j];
|
|
153
|
+
out[i * 4 + 1] = data[j + 1];
|
|
154
|
+
out[i * 4 + 2] = data[j + 2];
|
|
155
|
+
out[i * 4 + 3] = 255;
|
|
156
|
+
}
|
|
157
|
+
return out;
|
|
158
|
+
}
|
|
159
|
+
if (kind === IMAGE_KIND_GRAYSCALE_1BPP) {
|
|
160
|
+
// Rows are padded to whole bytes; a set bit is white (as PDF.js draws it).
|
|
161
|
+
var rowBytes = Math.ceil(width / 8);
|
|
162
|
+
if (data.length < rowBytes * height)
|
|
163
|
+
return undefined;
|
|
164
|
+
for (var y = 0; y < height; y++) {
|
|
165
|
+
for (var x = 0; x < width; x++) {
|
|
166
|
+
var bit = data[y * rowBytes + (x >> 3)] & (0x80 >> (x & 7));
|
|
167
|
+
var value = bit ? 255 : 0;
|
|
168
|
+
var o = (y * width + x) * 4;
|
|
169
|
+
out[o] = value;
|
|
170
|
+
out[o + 1] = value;
|
|
171
|
+
out[o + 2] = value;
|
|
172
|
+
out[o + 3] = 255;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return out;
|
|
176
|
+
}
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
/** Channel ceiling for "black ink" pixels (matches vector contrast ink). */
|
|
180
|
+
var INK_CHANNEL_MAX = 64;
|
|
181
|
+
/** Share of visible pixels that must be dark for an image to count as ink. */
|
|
182
|
+
var INK_SHARE = 0.95;
|
|
183
|
+
/**
|
|
184
|
+
* Lays dark ink on transparency (QR codes, stamps, signatures) onto white
|
|
185
|
+
* paper, in place.
|
|
186
|
+
*
|
|
187
|
+
* Such images rely on the white PDF page behind them; on a dark CAD canvas
|
|
188
|
+
* their black ink would all but disappear. Coloured or fully opaque images
|
|
189
|
+
* are left alone, so artwork over coloured areas keeps its transparency.
|
|
190
|
+
*
|
|
191
|
+
* @param rgba - RGBA pixels, modified when flattened.
|
|
192
|
+
* @returns `true` when the image was flattened.
|
|
193
|
+
*/
|
|
194
|
+
export function acapPdfFlattenInkOnPaper(rgba) {
|
|
195
|
+
var visible = 0;
|
|
196
|
+
var dark = 0;
|
|
197
|
+
var translucent = false;
|
|
198
|
+
for (var i = 0; i < rgba.length; i += 4) {
|
|
199
|
+
var alpha = rgba[i + 3];
|
|
200
|
+
if (alpha < 255)
|
|
201
|
+
translucent = true;
|
|
202
|
+
if (alpha < 128)
|
|
203
|
+
continue;
|
|
204
|
+
visible++;
|
|
205
|
+
if (rgba[i] < INK_CHANNEL_MAX &&
|
|
206
|
+
rgba[i + 1] < INK_CHANNEL_MAX &&
|
|
207
|
+
rgba[i + 2] < INK_CHANNEL_MAX) {
|
|
208
|
+
dark++;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (!translucent || visible === 0 || dark < visible * INK_SHARE) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
for (var i = 0; i < rgba.length; i += 4) {
|
|
215
|
+
var alpha = rgba[i + 3] / 255;
|
|
216
|
+
if (alpha >= 1)
|
|
217
|
+
continue;
|
|
218
|
+
for (var channel = 0; channel < 3; channel++) {
|
|
219
|
+
rgba[i + channel] = Math.round(rgba[i + channel] * alpha + 255 * (1 - alpha));
|
|
220
|
+
}
|
|
221
|
+
rgba[i + 3] = 255;
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Draws a PDF.js image with its placement into an upright PNG. Browser only
|
|
227
|
+
* (uses `document` canvases).
|
|
228
|
+
*
|
|
229
|
+
* @param image - Decoded PDF.js image.
|
|
230
|
+
* @param toCad - Unit square → model space, already scaled and placed.
|
|
231
|
+
* @returns The PNG and its box, or `undefined` when it cannot be drawn.
|
|
232
|
+
*/
|
|
233
|
+
export function acapPdfRasterizeImage(image, toCad) {
|
|
234
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
235
|
+
var width, height, placement, pixels, pixelContext, imageData, rgba, source, canvas, context, png;
|
|
236
|
+
var _a, _b;
|
|
237
|
+
return __generator(this, function (_c) {
|
|
238
|
+
switch (_c.label) {
|
|
239
|
+
case 0:
|
|
240
|
+
width = (_a = image.width) !== null && _a !== void 0 ? _a : 0;
|
|
241
|
+
height = (_b = image.height) !== null && _b !== void 0 ? _b : 0;
|
|
242
|
+
placement = acapPdfImagePlacement(toCad, width, height);
|
|
243
|
+
if (!placement)
|
|
244
|
+
return [2 /*return*/, undefined
|
|
245
|
+
// Work on RGBA so ink-on-transparency can be put on paper either way.
|
|
246
|
+
];
|
|
247
|
+
pixels = document.createElement('canvas');
|
|
248
|
+
pixels.width = width;
|
|
249
|
+
pixels.height = height;
|
|
250
|
+
pixelContext = pixels.getContext('2d');
|
|
251
|
+
if (!pixelContext)
|
|
252
|
+
return [2 /*return*/, undefined];
|
|
253
|
+
if (typeof ImageBitmap !== 'undefined' &&
|
|
254
|
+
image.bitmap instanceof ImageBitmap) {
|
|
255
|
+
pixelContext.drawImage(image.bitmap, 0, 0);
|
|
256
|
+
imageData = pixelContext.getImageData(0, 0, width, height);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
rgba = acapPdfImageToRgba(image);
|
|
260
|
+
if (!rgba)
|
|
261
|
+
return [2 /*return*/, undefined];
|
|
262
|
+
imageData = pixelContext.createImageData(width, height);
|
|
263
|
+
imageData.data.set(rgba);
|
|
264
|
+
}
|
|
265
|
+
acapPdfFlattenInkOnPaper(imageData.data);
|
|
266
|
+
pixelContext.putImageData(imageData, 0, 0);
|
|
267
|
+
source = pixels;
|
|
268
|
+
canvas = document.createElement('canvas');
|
|
269
|
+
canvas.width = placement.canvasWidth;
|
|
270
|
+
canvas.height = placement.canvasHeight;
|
|
271
|
+
context = canvas.getContext('2d');
|
|
272
|
+
if (!context)
|
|
273
|
+
return [2 /*return*/, undefined];
|
|
274
|
+
context.imageSmoothingEnabled = true;
|
|
275
|
+
context.setTransform.apply(context, __spreadArray([], __read(placement.transform), false));
|
|
276
|
+
context.drawImage(source, 0, 0, width, height);
|
|
277
|
+
return [4 /*yield*/, new Promise(function (resolve) {
|
|
278
|
+
return canvas.toBlob(resolve, 'image/png');
|
|
279
|
+
})];
|
|
280
|
+
case 1:
|
|
281
|
+
png = _c.sent();
|
|
282
|
+
if (!png)
|
|
283
|
+
return [2 /*return*/, undefined];
|
|
284
|
+
return [2 /*return*/, {
|
|
285
|
+
png: png,
|
|
286
|
+
box: placement.box,
|
|
287
|
+
pixelWidth: placement.canvasWidth,
|
|
288
|
+
pixelHeight: placement.canvasHeight
|
|
289
|
+
}];
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=pdfImportImages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfImportImages.js","sourceRoot":"","sources":["../src/pdfImportImages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns extracted PDF page content into placed, de-duplicated CAD shape
|
|
3
|
+
* descriptors. Pure data in, pure data out: entity construction happens in
|
|
4
|
+
* `AcApPdfImportConvertor` so this stage stays unit-testable.
|
|
5
|
+
*/
|
|
6
|
+
import type { AcApResolvedPdfImportOptions } from './AcApPdfImportOptions';
|
|
7
|
+
import type { PdfImportPageContent } from './pdfVectorImport';
|
|
8
|
+
import { type PdfRecognizedShape } from './recognition/pdfCurveRecognition';
|
|
9
|
+
/** One shape ready to become a CAD entity. */
|
|
10
|
+
export interface PdfImportShapeItem {
|
|
11
|
+
shape: PdfRecognizedShape;
|
|
12
|
+
layerName?: string;
|
|
13
|
+
color?: string;
|
|
14
|
+
/** Stroke width in millimeters (unscaled paper width). */
|
|
15
|
+
lineWidth?: number;
|
|
16
|
+
/** Dash pattern in millimeters (unscaled), for dashed strokes. */
|
|
17
|
+
dashPattern?: number[];
|
|
18
|
+
/** True when the source subpath was filled. */
|
|
19
|
+
filled?: boolean;
|
|
20
|
+
/** True when a filled subpath was also stroked. */
|
|
21
|
+
stroked?: boolean;
|
|
22
|
+
fillColor?: string;
|
|
23
|
+
/** Subpaths painted together share this value (one hatch, many loops). */
|
|
24
|
+
paintGroup?: number;
|
|
25
|
+
/** Clip the subpath was painted under (`PdfImportPageContent.clipPaths`). */
|
|
26
|
+
clipPath?: number;
|
|
27
|
+
}
|
|
28
|
+
/** Shape counts, for logging and tests. */
|
|
29
|
+
export type PdfImportShapeStats = Record<PdfRecognizedShape['kind'], number> & {
|
|
30
|
+
duplicates: number;
|
|
31
|
+
};
|
|
32
|
+
/** Result of {@link buildPdfImportShapes}. */
|
|
33
|
+
export interface PdfImportShapeResult {
|
|
34
|
+
items: PdfImportShapeItem[];
|
|
35
|
+
stats: PdfImportShapeStats;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Recognizes, places and de-duplicates every subpath of a page.
|
|
39
|
+
*
|
|
40
|
+
* @param content - Extracted page content (texts are ignored here).
|
|
41
|
+
* @param options - Resolved import options (placement, recognition, dedup).
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildPdfImportShapes(content: Pick<PdfImportPageContent, 'subpaths'>, options: AcApResolvedPdfImportOptions): PdfImportShapeResult;
|
|
44
|
+
/**
|
|
45
|
+
* One CAD paint, in PDF paint order: a single shape (stroke or outline), or
|
|
46
|
+
* every subpath of one fill operator (becomes one solid hatch).
|
|
47
|
+
*/
|
|
48
|
+
export type PdfImportPaint = {
|
|
49
|
+
kind: 'shape';
|
|
50
|
+
item: PdfImportShapeItem;
|
|
51
|
+
} | {
|
|
52
|
+
kind: 'fill';
|
|
53
|
+
items: PdfImportShapeItem[];
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Orders shapes and fills as the PDF painted them, so a fill never covers
|
|
57
|
+
* text or linework painted after it (e.g. white glyphs on a coloured box).
|
|
58
|
+
*
|
|
59
|
+
* @param items - Shapes from {@link buildPdfImportShapes}, in paint order.
|
|
60
|
+
* @param fillHatches - When `false`, fills stay outlines (no `fill` paints).
|
|
61
|
+
*/
|
|
62
|
+
export declare function orderPdfImportPaints(items: readonly PdfImportShapeItem[], fillHatches: boolean): PdfImportPaint[];
|
|
63
|
+
//# sourceMappingURL=pdfImportShapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfImportShapes.d.ts","sourceRoot":"","sources":["../src/pdfImportShapes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,KAAK,EAEV,oBAAoB,EAGrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,mCAAmC,CAAA;AAE1C,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,2CAA2C;AAC3C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG;IAC7E,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,KAAK,EAAE,mBAAmB,CAAA;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,EAC/C,OAAO,EAAE,4BAA4B,GACpC,oBAAoB,CAmDtB;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAA;AAEjD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,kBAAkB,EAAE,EACpC,WAAW,EAAE,OAAO,GACnB,cAAc,EAAE,CAkBlB"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns extracted PDF page content into placed, de-duplicated CAD shape
|
|
3
|
+
* descriptors. Pure data in, pure data out: entity construction happens in
|
|
4
|
+
* `AcApPdfImportConvertor` so this stage stays unit-testable.
|
|
5
|
+
*/
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __values = (this && this.__values) || function(o) {
|
|
18
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
19
|
+
if (m) return m.call(o);
|
|
20
|
+
if (o && typeof o.length === "number") return {
|
|
21
|
+
next: function () {
|
|
22
|
+
if (o && i >= o.length) o = void 0;
|
|
23
|
+
return { value: o && o[i++], done: !o };
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
27
|
+
};
|
|
28
|
+
import { recognizePdfCurves } from './recognition/pdfCurveRecognition';
|
|
29
|
+
/**
|
|
30
|
+
* Recognizes, places and de-duplicates every subpath of a page.
|
|
31
|
+
*
|
|
32
|
+
* @param content - Extracted page content (texts are ignored here).
|
|
33
|
+
* @param options - Resolved import options (placement, recognition, dedup).
|
|
34
|
+
*/
|
|
35
|
+
export function buildPdfImportShapes(content, options) {
|
|
36
|
+
var e_1, _a, e_2, _b;
|
|
37
|
+
var _c, _d, _e, _f, _g, _h, _j, _k;
|
|
38
|
+
var stats = {
|
|
39
|
+
line: 0,
|
|
40
|
+
circle: 0,
|
|
41
|
+
arc: 0,
|
|
42
|
+
ellipse: 0,
|
|
43
|
+
polyline: 0,
|
|
44
|
+
spline: 0,
|
|
45
|
+
duplicates: 0
|
|
46
|
+
};
|
|
47
|
+
var items = [];
|
|
48
|
+
var seen = new Map();
|
|
49
|
+
var place = createPlacement(options);
|
|
50
|
+
try {
|
|
51
|
+
for (var _l = __values(content.subpaths), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
52
|
+
var subpath = _m.value;
|
|
53
|
+
try {
|
|
54
|
+
for (var _o = (e_2 = void 0, __values(subpathShapes(subpath, options))), _p = _o.next(); !_p.done; _p = _o.next()) {
|
|
55
|
+
var shape = _p.value;
|
|
56
|
+
var placed = place(shape);
|
|
57
|
+
if (options.removeDuplicates) {
|
|
58
|
+
// Fill state is not part of the key: a fill and a stroke of the same
|
|
59
|
+
// outline are one shape, whose fill is merged into the kept item.
|
|
60
|
+
var key = "".concat((_c = subpath.layerName) !== null && _c !== void 0 ? _c : '', "|").concat((_d = subpath.color) !== null && _d !== void 0 ? _d : '', "|").concat((_f = (_e = subpath.dashPattern) === null || _e === void 0 ? void 0 : _e.join(',')) !== null && _f !== void 0 ? _f : '', "|").concat(shapeKey(placed));
|
|
61
|
+
var existing = seen.get(key);
|
|
62
|
+
if (existing) {
|
|
63
|
+
mergeDuplicate(existing, subpath);
|
|
64
|
+
stats.duplicates++;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
stats[placed.kind]++;
|
|
69
|
+
var item = {
|
|
70
|
+
shape: placed,
|
|
71
|
+
layerName: subpath.layerName,
|
|
72
|
+
color: subpath.color,
|
|
73
|
+
lineWidth: subpath.lineWidth,
|
|
74
|
+
dashPattern: subpath.dashPattern,
|
|
75
|
+
filled: subpath.filled,
|
|
76
|
+
stroked: subpath.stroked,
|
|
77
|
+
fillColor: subpath.fillColor,
|
|
78
|
+
paintGroup: subpath.paintGroup,
|
|
79
|
+
clipPath: subpath.clipPath
|
|
80
|
+
};
|
|
81
|
+
items.push(item);
|
|
82
|
+
if (options.removeDuplicates) {
|
|
83
|
+
seen.set("".concat((_g = subpath.layerName) !== null && _g !== void 0 ? _g : '', "|").concat((_h = subpath.color) !== null && _h !== void 0 ? _h : '', "|").concat((_k = (_j = subpath.dashPattern) === null || _j === void 0 ? void 0 : _j.join(',')) !== null && _k !== void 0 ? _k : '', "|").concat(shapeKey(placed)), item);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
88
|
+
finally {
|
|
89
|
+
try {
|
|
90
|
+
if (_p && !_p.done && (_b = _o.return)) _b.call(_o);
|
|
91
|
+
}
|
|
92
|
+
finally { if (e_2) throw e_2.error; }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
97
|
+
finally {
|
|
98
|
+
try {
|
|
99
|
+
if (_m && !_m.done && (_a = _l.return)) _a.call(_l);
|
|
100
|
+
}
|
|
101
|
+
finally { if (e_1) throw e_1.error; }
|
|
102
|
+
}
|
|
103
|
+
return { items: items, stats: stats };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Orders shapes and fills as the PDF painted them, so a fill never covers
|
|
107
|
+
* text or linework painted after it (e.g. white glyphs on a coloured box).
|
|
108
|
+
*
|
|
109
|
+
* @param items - Shapes from {@link buildPdfImportShapes}, in paint order.
|
|
110
|
+
* @param fillHatches - When `false`, fills stay outlines (no `fill` paints).
|
|
111
|
+
*/
|
|
112
|
+
export function orderPdfImportPaints(items, fillHatches) {
|
|
113
|
+
var e_3, _a;
|
|
114
|
+
var paints = [];
|
|
115
|
+
var fills = new Map();
|
|
116
|
+
try {
|
|
117
|
+
for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
|
|
118
|
+
var item = items_1_1.value;
|
|
119
|
+
if (fillHatches && item.filled && item.paintGroup !== undefined) {
|
|
120
|
+
var group = fills.get(item.paintGroup);
|
|
121
|
+
if (group)
|
|
122
|
+
group.push(item);
|
|
123
|
+
else {
|
|
124
|
+
var created = [item];
|
|
125
|
+
fills.set(item.paintGroup, created);
|
|
126
|
+
paints.push({ kind: 'fill', items: created });
|
|
127
|
+
}
|
|
128
|
+
// A pure fill becomes only a hatch; fill + stroke keeps the outline.
|
|
129
|
+
if (!item.stroked)
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
paints.push({ kind: 'shape', item: item });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
136
|
+
finally {
|
|
137
|
+
try {
|
|
138
|
+
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
|
|
139
|
+
}
|
|
140
|
+
finally { if (e_3) throw e_3.error; }
|
|
141
|
+
}
|
|
142
|
+
return paints;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Folds a duplicate subpath into the item already kept: a fill adds its fill
|
|
146
|
+
* colour and paint group, a stroke marks a fill as stroked.
|
|
147
|
+
*/
|
|
148
|
+
function mergeDuplicate(item, subpath) {
|
|
149
|
+
var _a;
|
|
150
|
+
if (subpath.filled && !item.filled) {
|
|
151
|
+
item.filled = true;
|
|
152
|
+
item.stroked = true;
|
|
153
|
+
item.fillColor = subpath.fillColor;
|
|
154
|
+
item.paintGroup = subpath.paintGroup;
|
|
155
|
+
}
|
|
156
|
+
else if (!subpath.filled && item.filled) {
|
|
157
|
+
item.stroked = true;
|
|
158
|
+
item.lineWidth = (_a = item.lineWidth) !== null && _a !== void 0 ? _a : subpath.lineWidth;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function subpathShapes(subpath, options) {
|
|
162
|
+
var _a;
|
|
163
|
+
if (options.recognizeCurves) {
|
|
164
|
+
var segments = (_a = subpath.segments) !== null && _a !== void 0 ? _a : segmentsFromPoints(subpath.points);
|
|
165
|
+
return recognizePdfCurves(segments, options.curveRecognition);
|
|
166
|
+
}
|
|
167
|
+
return [flatShape(subpath.points)];
|
|
168
|
+
}
|
|
169
|
+
/** Earlier-release behaviour: 2 points → line, otherwise a polyline. */
|
|
170
|
+
function flatShape(points) {
|
|
171
|
+
if (points.length === 2) {
|
|
172
|
+
return { kind: 'line', start: points[0], end: points[1] };
|
|
173
|
+
}
|
|
174
|
+
var first = points[0];
|
|
175
|
+
var last = points[points.length - 1];
|
|
176
|
+
var closed = Math.hypot(first.x - last.x, first.y - last.y) < 1e-6;
|
|
177
|
+
var verts = closed ? points.slice(0, -1) : points;
|
|
178
|
+
return {
|
|
179
|
+
kind: 'polyline',
|
|
180
|
+
vertices: verts.map(function (p) { return ({ x: p.x, y: p.y, bulge: 0 }); }),
|
|
181
|
+
closed: closed
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function segmentsFromPoints(points) {
|
|
185
|
+
var out = [];
|
|
186
|
+
for (var i = 0; i < points.length - 1; i++) {
|
|
187
|
+
out.push({ kind: 'line', p0: points[i], p1: points[i + 1] });
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
function createPlacement(options) {
|
|
192
|
+
var scale = options.scale, insertionPoint = options.insertionPoint;
|
|
193
|
+
var identity = scale === 1 && insertionPoint.x === 0 && insertionPoint.y === 0;
|
|
194
|
+
var pt = function (p) { return ({
|
|
195
|
+
x: insertionPoint.x + p.x * scale,
|
|
196
|
+
y: insertionPoint.y + p.y * scale
|
|
197
|
+
}); };
|
|
198
|
+
return function (shape) {
|
|
199
|
+
if (identity)
|
|
200
|
+
return shape;
|
|
201
|
+
switch (shape.kind) {
|
|
202
|
+
case 'line':
|
|
203
|
+
return __assign(__assign({}, shape), { start: pt(shape.start), end: pt(shape.end) });
|
|
204
|
+
case 'circle':
|
|
205
|
+
case 'arc':
|
|
206
|
+
return __assign(__assign({}, shape), { center: pt(shape.center), radius: shape.radius * scale });
|
|
207
|
+
case 'ellipse':
|
|
208
|
+
return __assign(__assign({}, shape), { center: pt(shape.center), majorAxis: {
|
|
209
|
+
x: shape.majorAxis.x * scale,
|
|
210
|
+
y: shape.majorAxis.y * scale
|
|
211
|
+
} });
|
|
212
|
+
case 'polyline':
|
|
213
|
+
return __assign(__assign({}, shape), { vertices: shape.vertices.map(function (v) { return (__assign(__assign({}, pt(v)), { bulge: v.bulge })); }) });
|
|
214
|
+
case 'spline':
|
|
215
|
+
return __assign(__assign({}, shape), { controlPoints: shape.controlPoints.map(pt) });
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
var KEY_PRECISION = 1e4;
|
|
220
|
+
function k(value) {
|
|
221
|
+
return Math.round(value * KEY_PRECISION);
|
|
222
|
+
}
|
|
223
|
+
function pk(p) {
|
|
224
|
+
return "".concat(k(p.x), ",").concat(k(p.y));
|
|
225
|
+
}
|
|
226
|
+
function shapeKey(shape) {
|
|
227
|
+
switch (shape.kind) {
|
|
228
|
+
case 'line': {
|
|
229
|
+
// Direction does not matter for a duplicate line.
|
|
230
|
+
var a = pk(shape.start);
|
|
231
|
+
var b = pk(shape.end);
|
|
232
|
+
return "L".concat(a < b ? "".concat(a, ";").concat(b) : "".concat(b, ";").concat(a));
|
|
233
|
+
}
|
|
234
|
+
case 'circle':
|
|
235
|
+
return "C".concat(pk(shape.center), ";").concat(k(shape.radius));
|
|
236
|
+
case 'arc':
|
|
237
|
+
return "A".concat(pk(shape.center), ";").concat(k(shape.radius), ";").concat(k(shape.startAngle), ";").concat(k(shape.endAngle));
|
|
238
|
+
case 'ellipse':
|
|
239
|
+
return "E".concat(pk(shape.center), ";").concat(pk(shape.majorAxis), ";").concat(k(shape.radiusRatio), ";").concat(k(shape.startAngle), ";").concat(k(shape.endAngle));
|
|
240
|
+
case 'polyline':
|
|
241
|
+
return "P".concat(shape.closed ? 1 : 0).concat(shape.vertices
|
|
242
|
+
.map(function (v) { return "".concat(pk(v), "/").concat(k(v.bulge)); })
|
|
243
|
+
.join(';'));
|
|
244
|
+
case 'spline':
|
|
245
|
+
return "S".concat(shape.controlPoints.map(pk).join(';'));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=pdfImportShapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfImportShapes.js","sourceRoot":"","sources":["../src/pdfImportShapes.ts"],"names":[],"mappings":"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"}
|