|
|
|
@ -2,63 +2,70 @@ import DxfParser from "dxf-parser";
|
|
|
|
|
import { app } from "../ApplicationServices/Application";
|
|
|
|
|
import { arrayLast } from "../Common/ArrayExt";
|
|
|
|
|
import { FileSystem } from "../Common/FileSystem";
|
|
|
|
|
import { Arc } from "../DatabaseServices/Entity/Arc";
|
|
|
|
|
import { Circle } from "../DatabaseServices/Entity/Circle";
|
|
|
|
|
import { Line } from "../DatabaseServices/Entity/Line";
|
|
|
|
|
import { Polyline } from "../DatabaseServices/Entity/Polyline";
|
|
|
|
|
import { CommandWrap } from "../Editor/CommandMachine";
|
|
|
|
|
import { AsVector2, AsVector3 } from "../Geometry/GeUtils";
|
|
|
|
|
import { Line } from "../DatabaseServices/Entity/Line";
|
|
|
|
|
import { Circle } from "../DatabaseServices/Entity/Circle";
|
|
|
|
|
import { Arc } from "../DatabaseServices/Entity/Arc";
|
|
|
|
|
|
|
|
|
|
export class Command_DXFImport
|
|
|
|
|
{
|
|
|
|
|
async exec()
|
|
|
|
|
{
|
|
|
|
|
let files = await FileSystem.ChooseFile(".dxf");
|
|
|
|
|
if (!files) return;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < files.length; i++)
|
|
|
|
|
{
|
|
|
|
|
let f = files.item(i);
|
|
|
|
|
|
|
|
|
|
let ext = arrayLast(f.name.split("."));
|
|
|
|
|
if (ext.toUpperCase() === "DXF")
|
|
|
|
|
FileSystem.ChooseFile({
|
|
|
|
|
filter: ".dxf",
|
|
|
|
|
callback: (files) =>
|
|
|
|
|
{
|
|
|
|
|
let parser = new DxfParser();
|
|
|
|
|
let str = await FileSystem.ReadFileAsText(f);
|
|
|
|
|
let dxfDocument = parser.parseSync(str);
|
|
|
|
|
for (let en of dxfDocument.entities)
|
|
|
|
|
CommandWrap(async () =>
|
|
|
|
|
{
|
|
|
|
|
if (en.type === "LWPOLYLINE")
|
|
|
|
|
for (let i = 0; i < files.length; i++)
|
|
|
|
|
{
|
|
|
|
|
let pl = new Polyline();
|
|
|
|
|
pl.LineData = en.vertices.map(p =>
|
|
|
|
|
let f = files.item(i);
|
|
|
|
|
|
|
|
|
|
let ext = arrayLast(f.name.split("."));
|
|
|
|
|
if (ext.toUpperCase() === "DXF")
|
|
|
|
|
{
|
|
|
|
|
return {
|
|
|
|
|
pt: AsVector2(p),
|
|
|
|
|
bul: p.bulge ? p.bulge : 0
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
pl.CloseMark = en.shape;
|
|
|
|
|
app.Database.ModelSpace.Append(pl);
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "ARC")
|
|
|
|
|
{
|
|
|
|
|
let arc = new Arc(AsVector3(en.center), en.radius, en.startAngle, en.endAngle, false);
|
|
|
|
|
app.Database.ModelSpace.Append(arc);
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "CIRCLE")
|
|
|
|
|
{
|
|
|
|
|
let cir = new Circle(AsVector3(en.center), en.radius);
|
|
|
|
|
app.Database.ModelSpace.Append(cir);
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "LINE")
|
|
|
|
|
{
|
|
|
|
|
if (!(en.vertices.length === 2))
|
|
|
|
|
return;
|
|
|
|
|
let line = new Line(AsVector3(en.vertices[0]), AsVector3(en.vertices[1]));
|
|
|
|
|
app.Database.ModelSpace.Append(line);
|
|
|
|
|
let parser = new DxfParser();
|
|
|
|
|
let str = await FileSystem.ReadFileAsText(f);
|
|
|
|
|
let dxfDocument = parser.parseSync(str);
|
|
|
|
|
for (let en of dxfDocument.entities)
|
|
|
|
|
{
|
|
|
|
|
if (en.type === "LWPOLYLINE")
|
|
|
|
|
{
|
|
|
|
|
let pl = new Polyline();
|
|
|
|
|
pl.LineData = en.vertices.map(p =>
|
|
|
|
|
{
|
|
|
|
|
return {
|
|
|
|
|
pt: AsVector2(p),
|
|
|
|
|
bul: p.bulge ? p.bulge : 0
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
pl.CloseMark = en.shape;
|
|
|
|
|
app.Database.ModelSpace.Append(pl);
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "ARC")
|
|
|
|
|
{
|
|
|
|
|
let arc = new Arc(AsVector3(en.center), en.radius, en.startAngle, en.endAngle, false);
|
|
|
|
|
app.Database.ModelSpace.Append(arc);
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "CIRCLE")
|
|
|
|
|
{
|
|
|
|
|
let cir = new Circle(AsVector3(en.center), en.radius);
|
|
|
|
|
app.Database.ModelSpace.Append(cir);
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "LINE")
|
|
|
|
|
{
|
|
|
|
|
if (!(en.vertices.length === 2))
|
|
|
|
|
return;
|
|
|
|
|
let line = new Line(AsVector3(en.vertices[0]), AsVector3(en.vertices[1]));
|
|
|
|
|
app.Database.ModelSpace.Append(line);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}, "dxf插入");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|