实现导出Json格式,命令ExportData

yh2
ChenX 5 years ago
parent 23a26a55a7
commit 932b36437f

@ -0,0 +1,73 @@
import { Command } from "../Editor/CommandMachine";
import { Board } from "../DatabaseServices/Entity/Board";
import { SweepSolid } from "../DatabaseServices/3DSolid/SweepSolid";
import { app } from "../ApplicationServices/Application";
import { PromptStatus } from "../Editor/PromptResult";
import { Polyline } from "../DatabaseServices/Entity/Polyline";
import { Circle } from "../DatabaseServices/Entity/Circle";
import { ExtrudeSolid } from "../DatabaseServices/Entity/Extrude";
import { Curve } from "../DatabaseServices/Entity/Curve";
import { FileSystem } from "../Common/FileSystem";
export class Command_ExportData implements Command
{
async exec()
{
let ssRes = await app.Editor.GetSelection({ Filter: { filterTypes: [Board, SweepSolid] } });
if (ssRes.Status !== PromptStatus.OK) return;
let ents = ssRes.SelectSet.SelectEntityList;
let d: { Entitys: Object[]; } = { Entitys: [] };
for (let e of ents)
{
if (e instanceof Board)
d.Entitys.push(ConvertBoard2Data(e));
else if (e instanceof SweepSolid)
d.Entitys.push(ConverSweep2Data(e));
}
FileSystem.WriteFile("fff.json", JSON.stringify(d));
}
}
function Curve2Data(cu: Curve): Object
{
let cud: any = {};
if (cu instanceof Polyline)
{
cud.Type = "Polyline";
let { pts, buls } = cu.PtsBuls;
cud.Pts = pts;
cud.Buls = buls;
}
else if (cu instanceof Circle)
{
cud.Type = "Circle";
cud.Center = cu.Center;
cud.Radius = cu.Radius;
}
return cud;
}
function ConvertBoard2Data(br: ExtrudeSolid): Object
{
let ed: any = {};
ed.Type = "Extrude";
ed.OCS = br.OCS.toArray();
ed.Thickness = br.Thickness;
ed.Contour = Curve2Data(br.ContourCurve);
ed.Holes = br.Grooves.map(ConvertBoard2Data);
return ed;
}
function ConverSweep2Data(e: SweepSolid)
{
let ed: any = {};
ed.Type = "Sweep";
ed.OCS = e.OCS.toArray();
ed.Contour = Curve2Data(e.Contour);
ed.Path = Curve2Data(e.Path);
return ed;
}

@ -1,52 +1,52 @@
import { ExtrudeGeometry, Matrix4, Mesh, Shape, Vector2, Vector3 } from 'three';
import { ExtrudeGeometry, Matrix4, Mesh, Shape, Vector2 } from 'three';
import { Shape2 } from '../../DatabaseServices/Shape2';
import { equaln, polar } from '../../Geometry/GeUtils';
import { AsVector3, equaln, polar } from '../../Geometry/GeUtils';
import { RotateUVs } from '../../Geometry/RotateUV';
export namespace CreateBoardUtil
{
//解析二维圆弧类.
//解析二维圆弧
export class Arc2d
{
m_StartAn: number;
m_EndAn: number;
m_StartPoint: Vector2;
m_EndPoint: Vector2;
m_Center: Vector2;
m_Radius: number;
_StartAn: number;
_EndAn: number;
_StartPoint: Vector2;
_EndPoint: Vector2;
_Center: Vector2;
_Radius: number;
constructor(p1: Vector2, p2: Vector2, bul: number)
{
this.m_StartPoint = p1.clone();
this.m_EndPoint = p2.clone();
this._StartPoint = p1.clone();
this._EndPoint = p2.clone();
let vec: Vector2 = p2.clone().sub(p1);
let len = vec.length();
let an = vec.angle();
this.m_Radius = len / Math.sin(2 * Math.atan(bul)) / 2;
this._Radius = len / Math.sin(2 * Math.atan(bul)) / 2;
let allAngle = Math.atan(bul) * 4;
let delDis = bul * len / 2;
let toDis = this.m_Radius - delDis;
let toDis = this._Radius - delDis;
an += Math.PI * 0.5;
this.m_Center = p1.clone().add(p2);
this.m_Center.multiplyScalar(0.5);
this._Center = p1.clone().add(p2);
this._Center.multiplyScalar(0.5);
polar(this.m_Center, an, toDis);
polar(this._Center, an, toDis);
this.m_StartAn = p1.clone().sub(this.m_Center).angle();
this.m_EndAn = p2.clone().sub(this.m_Center).angle();
this._StartAn = p1.clone().sub(this._Center).angle();
this._EndAn = p2.clone().sub(this._Center).angle();
if (bul < 0)
{
//一个神奇的特性 它需要这么做
this.m_StartAn -= Math.PI;
this.m_EndAn -= Math.PI;
this._StartAn -= Math.PI;
this._EndAn -= Math.PI;
}
}
}
//创建轮廓 通过点表和凸度
export function createPath(pts: Vector2[], buls: number[]): Shape
//创建轮廓 通过点表和凸度
export function CreatePath(pts: Vector2[], buls: number[]): Shape
{
let shape = new Shape2();
if (pts.length === 0) return shape;
@ -67,19 +67,14 @@ export namespace CreateBoardUtil
//http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮
//https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5
let arc2 = new Arc2d(pt, nextPt, buls[i]);
let cen = arc2.m_Center;
shape.absarc(cen.x, cen.y, arc2.m_Radius, arc2.m_StartAn, arc2.m_EndAn, buls[i] < 0);
let cen = arc2._Center;
shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0);
}
}
return shape;
}
export function getVec(data: object): Vector3
{
return new Vector3(data["x"], data["y"], data["z"]);
}
//创建板件 暂时这么写
//创建板件 暂时这么写
export function createBoard(boardData: object)
{
var pts: Vector2[] = new Array();
@ -94,10 +89,10 @@ export namespace CreateBoardUtil
//InitBoardMat
{
var xD = getVec(boardData["XVec"]);
var yD = getVec(boardData["YVec"]);
var ZD = getVec(boardData["ZVec"]);
var pBase = getVec(boardData["BasePoint"]).multiplyScalar(0.001);
var xD = AsVector3(boardData["XVec"]);
var yD = AsVector3(boardData["YVec"]);
var ZD = AsVector3(boardData["ZVec"]);
var pBase = AsVector3(boardData["BasePoint"]).multiplyScalar(0.001);
boardMat.makeBasis(xD, yD, ZD);
boardMat.setPosition(pBase);
@ -106,13 +101,13 @@ export namespace CreateBoardUtil
for (let i = 0; i < boardPts.length; i++)
{
var pt = getVec(boardPts[i]).multiplyScalar(0.001);
var pt = AsVector3(boardPts[i]).multiplyScalar(0.001);
pt.applyMatrix4(matInv);
pts.push(new Vector2(pt.x, pt.y));
buls.push(boardBuls[i]);
}
var sp = createPath(pts, buls);
var sp = CreatePath(pts, buls);
var extrudeSettings = {
steps: 1,
bevelEnabled: false,

@ -35,6 +35,15 @@ export class SweepSolid extends Entity
}
}
get Contour()
{
return this._Contour;
}
get Path()
{
return this._PathCurve;
}
Reverse()
{
this.WriteAllObjectRecord();

@ -126,10 +126,10 @@ export class Polyline extends Curve
* .
* :
* pl.AddVertexAt(pl.NumberOfVerticesk,p);//在末尾插入一个点
*
*
* @param {number} index
* @param {Vector2} pt
* @returns {this}
* @returns {this}
* @memberof Polyline
*/
AddVertexAt(index: number, pt: Vector2 | Vector2[]): this
@ -199,9 +199,9 @@ export class Polyline extends Curve
}
/**
*
*
* @param {number} index
* @param {Vector2} pt
*
* @param {number} index
* @param {Vector2} pt
* @memberof Polyline
*/
SetPointAt(index: number, pt: Vector2): this
@ -1175,7 +1175,7 @@ export class Polyline extends Curve
get Shape()
{
let { pts, buls } = this.PtsBuls;
let curve = CreateBoardUtil.createPath(pts, buls);
let curve = CreateBoardUtil.CreatePath(pts, buls);
return curve;
}
get SVG()

@ -147,6 +147,7 @@ import { Command_TestSimply } from "../Nest/Test/TestSimply";
import { Command_TestYH } from "../Nest/Test/TestYH";
import { ICommand } from '../UI/Components/CommandPanel/CommandList';
import { commandMachine } from './CommandMachine';
import { Command_ExportData } from "../Add-on/ExportData";
export function registerCommand()
{
@ -398,6 +399,10 @@ export function registerCommand()
commandMachine.RegisterCommand("drilltemplate", new ShowDrillingTemplate());
commandMachine.RegisterCommand("checkmodeing", new CheckModeling());
commandMachine.RegisterCommand("exportdata", new Command_ExportData());
RegistCustomCommand();
}

Loading…
Cancel
Save