圆弧支持三维

pull/59/head
ChenX 7 years ago
parent fa711e22a7
commit 6ef7c70c74

@ -64,7 +64,7 @@ exports[`圆弧偏移 15`] = `3.141592653589793`;
exports[`圆弧偏移 16`] = `25`;
exports[`圆弧切割参数重复 1`] = `3`;
exports[`圆弧切割参数重复 1`] = `2`;
exports[`圆弧合并 1`] = `1`;

@ -290,24 +290,24 @@ Vector3 {
exports[`获得点,来自参数 37`] = `
Vector3 {
"x": -0.7725424859373677,
"y": 2.377641290737884,
"x": -0.7725424859373663,
"y": 2.3776412907378845,
"z": 0,
}
`;
exports[`获得点,来自参数 38`] = `
Vector3 {
"x": 7.377641290737885,
"y": 3.272542485937366,
"x": 7.377641290737884,
"y": 3.2725424859373664,
"z": 0,
}
`;
exports[`获得点,来自参数 39`] = `
Vector3 {
"x": -2.0225424859373655,
"y": 1.469463130731187,
"x": -2.022542485937366,
"y": 1.4694631307311867,
"z": 0,
}
`;
@ -315,7 +315,7 @@ Vector3 {
exports[`获得点,来自参数 40`] = `
Vector3 {
"x": 6.469463130731187,
"y": 4.5225424859373655,
"y": 4.522542485937366,
"z": 0,
}
`;
@ -323,14 +323,14 @@ Vector3 {
exports[`获得点,来自参数 41`] = `
Vector3 {
"x": -2.5,
"y": 5.3593771978611406e-15,
"y": 4.747053798287464e-15,
"z": 0,
}
`;
exports[`获得点,来自参数 42`] = `
Vector3 {
"x": 5.000000000000005,
"x": 5.000000000000004,
"y": 5,
"z": 0,
}
@ -830,16 +830,16 @@ Vector3 {
exports[`获得点,来自参数 115`] = `
Vector3 {
"x": -0.7725424859373677,
"y": 2.377641290737884,
"x": -0.7725424859373704,
"y": 2.377641290737883,
"z": 0,
}
`;
exports[`获得点,来自参数 116`] = `
Vector3 {
"x": 7.377641290737884,
"y": 3.27254248593737,
"x": 7.377641290737883,
"y": 3.272542485937371,
"z": 0,
}
`;
@ -847,7 +847,7 @@ Vector3 {
exports[`获得点,来自参数 117`] = `
Vector3 {
"x": -2.377641290737885,
"y": 0.7725424859373652,
"y": 0.7725424859373646,
"z": 0,
}
`;

@ -67,7 +67,7 @@ Array [
"bul": 0,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
"y": 2.5,
},
},
]
@ -79,7 +79,7 @@ Array [
"bul": 0.41421356237309503,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
"y": 2.5,
},
},
Object {
@ -350,7 +350,7 @@ Array [
"bul": 0.41421356237309503,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
"y": 2.5,
},
},
Object {
@ -399,7 +399,7 @@ Array [
"bul": 0,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
"y": 2.5,
},
},
]
@ -573,733 +573,3 @@ Array [
},
]
`;
exports[`多切刀 1`] = `
Array [
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
Object {
"bul": 1,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
]
`;
exports[`多切刀 2`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
]
`;
exports[`多切刀 3`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
]
`;
exports[`多切刀 4`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
]
`;
exports[`多切刀 5`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
Object {
"bul": -1,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
]
`;
exports[`多切刀 6`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
]
`;
exports[`多切刀 7`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
]
`;
exports[`多切刀 8`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
]
`;
exports[`多切刀 9`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 5,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
]
`;
exports[`多切刀 10`] = `
Array [
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
Object {
"bul": 1,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
]
`;
exports[`多切刀 11`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
]
`;
exports[`多切刀 12`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
]
`;
exports[`多切刀 13`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
]
`;
exports[`多切刀 14`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
Object {
"bul": -1,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
]
`;
exports[`多切刀 15`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
]
`;
exports[`多切刀 16`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
]
`;
exports[`多切刀 17`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
]
`;
exports[`多切刀 18`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 5,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
]
`;
exports[`多切刀闭合 1`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
]
`;
exports[`多切刀闭合 2`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
]
`;
exports[`多切刀闭合 3`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
]
`;
exports[`多切刀闭合 4`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
Object {
"bul": -1,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
]
`;
exports[`多切刀闭合 5`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
]
`;
exports[`多切刀闭合 6`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
]
`;
exports[`多切刀闭合 7`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
]
`;
exports[`多切刀闭合 8`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 5,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
Object {
"bul": 1,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
]
`;
exports[`多切刀闭合 9`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
]
`;
exports[`多切刀闭合 10`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 6.4694631307311825,
"y": 0.4774575140626309,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
]
`;
exports[`多切刀闭合 11`] = `
Array [
Object {
"bul": 0.24007875908011606,
"pt": Vector2 {
"x": 7.5,
"y": 2.4999999999999996,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
]
`;
exports[`多切刀闭合 12`] = `
Array [
Object {
"bul": 0.15838444032453625,
"pt": Vector2 {
"x": 6.469463130731183,
"y": 4.522542485937368,
},
},
Object {
"bul": -1,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
]
`;
exports[`多切刀闭合 13`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 5,
"y": 5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
]
`;
exports[`多切刀闭合 14`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 3.530536869268815,
"y": 5.477457514062634,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
]
`;
exports[`多切刀闭合 15`] = `
Array [
Object {
"bul": -0.2400787590801159,
"pt": Vector2 {
"x": 2.5,
"y": 7.5,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
]
`;
exports[`多切刀闭合 16`] = `
Array [
Object {
"bul": -0.15838444032453644,
"pt": Vector2 {
"x": 3.5305368692688166,
"y": 9.522542485937368,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 5,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 10,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
Object {
"bul": 0,
"pt": Vector2 {
"x": 0,
"y": 0,
},
},
Object {
"bul": 1,
"pt": Vector2 {
"x": 5,
"y": 0,
},
},
]
`;

@ -42,8 +42,6 @@ export class Command_Move implements Command
AllowDrawRubberBand: true
});
app.m_Editor.ClearSnapEntity();
if (ptRes.Status != PromptStatus.OK) return;
app.m_Viewer.m_GripScene.UpdateAll();
}
}

@ -0,0 +1,9 @@
import { Matrix4, Vector3 } from 'three';
export function matrixSetVector(mat: Matrix4, col: number, v: Vector3)
{
let index = col * 4;
mat.elements[index] = v.x;
mat.elements[index + 1] = v.y;
mat.elements[index + 2] = v.z;
}

@ -1,9 +1,9 @@
import * as THREE from 'three';
import { Box3, Matrix4, Object3D, ShapeGeometry, Vector2, Vector3 } from 'three';
import { arraySortByNumber } from '../Common/ArrayExt';
import { ColorMaterial } from '../Common/ColorPalette';
import { Vec2DTo3D, getCircleCenter } from '../Common/CurveUtils';
import { angle, angleTo2Pi, equaln, midPoint, polar, equal } from '../Geometry/GeUtils';
import { matrixSetVector } from '../Common/Matrix4Utils';
import { angle, angleTo2Pi, equal, equaln, midPoint, polar } from '../Geometry/GeUtils';
import { RenderType } from '../GraphicsSystem/Enum';
import { IntersectArcAndArc, IntersectCircleAndArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../GraphicsSystem/IntersectWith';
import { Factory } from './CADFactory';
@ -31,18 +31,15 @@ export class Arc extends Curve
constructor(center?: Vector3, radius?: number, startAngle?: number, endAngle?: number, normal?: Vector3)
{
super();
center && this.m_Center.copy(center);
normal && this.m_Normal.copy(normal);
center && this.m_Matrix.setPosition(center);
normal && matrixSetVector(this.m_Matrix, 2, normal);
this.m_Radius = radius || 0;
if (startAngle) this.m_StartAngle = angleTo2Pi(startAngle);
if (endAngle) this.m_EndAngle = angleTo2Pi(endAngle);
}
private m_Center = new Vector3(0, 0, 0);
private m_Radius: number = 0;
private m_StartAngle: number = 0;
private m_EndAngle: number = 0;
private m_Normal = new Vector3(0, 0, 1);
/**
* 线
*
@ -53,23 +50,23 @@ export class Arc extends Curve
get Center()
{
return this.m_Center.clone();
return new Vector3().setFromMatrixPosition(this.m_Matrix);
}
set Center(v: Vector3)
{
this.WriteAllObjectRecord();
this.m_Center.copy(v);
this.m_Matrix.setPosition(v);
this.Update();
}
get Normal()
{
return this.m_Normal.clone();
return new Vector3().setFromMatrixColumn(this.m_Matrix, 2);
}
set Normal(v: Vector3)
{
this.WriteAllObjectRecord();
this.m_Normal.copy(v);
matrixSetVector(this.m_Matrix, 2, v);
this.Update();
}
@ -148,19 +145,21 @@ export class Arc extends Curve
//******************** Curve function start*****************//
get StartPoint()
{
return polar(this.Center, this.StartAngle, this.m_Radius) as Vector3;
return polar(new Vector3(), this.m_StartAngle, this.m_Radius).applyMatrix4(this.OCS);
}
set StartPoint(v: Vector3)
{
this.StartAngle = angle(v.clone().sub(this.m_Center));
let vTemp = v.clone().applyMatrix4(this.OCSInv);
this.StartAngle = angle(vTemp);
}
get EndPoint()
{
return polar(this.Center, this.m_EndAngle, this.m_Radius) as Vector3;
return polar(new Vector3(), this.m_EndAngle, this.m_Radius).applyMatrix4(this.OCS);
}
set EndPoint(v: Vector3)
{
this.EndAngle = angle(v.clone().sub(this.m_Center));
let vTemp = v.clone().applyMatrix4(this.OCSInv);
this.EndAngle = angle(vTemp);
}
get StartParam()
{
@ -177,7 +176,7 @@ export class Arc extends Curve
GetPointAtParam(param: number)
{
let an = this.GetAngleAtParam(param);
return polar(this.Center, an, this.m_Radius) as Vector3;
return polar(new Vector3(), an, this.m_Radius).applyMatrix4(this.OCS);
}
GetPointAtDistance(distance: number)
{
@ -201,10 +200,12 @@ export class Arc extends Curve
{
if (this.m_Radius == 0 ||
this.AllAngle == 0 ||
!equaln(pt.distanceToSquared(this.m_Center), this.m_Radius * this.m_Radius, 1e-6))
!equaln(pt.distanceToSquared(this.Center), this.m_Radius * this.m_Radius, 1e-6))
return NaN;
let ptTmp = pt.clone().applyMatrix4(this.OCSInv);
//角度
let an = angle(pt.clone().sub(this.m_Center));
let an = angle(ptTmp);
return this.GetParamAtAngle(an);
}
@ -236,7 +237,6 @@ export class Arc extends Curve
GetAngleAtParam(param: number)
{
return angleTo2Pi(this.m_StartAngle + param * this.AllAngle * (this.m_Clockwise ? -1 : 1));
}
@ -286,7 +286,7 @@ export class Arc extends Curve
if (cu instanceof Arc)
{
this.WriteAllObjectRecord();
if (equal(cu.Center, this.m_Center) && equaln(cu.m_Radius, this.m_Radius))
if (equal(cu.Center, this.Center) && equaln(cu.m_Radius, this.m_Radius))
{
let [sa, ea] = [cu.StartAngle, cu.EndAngle];
if (cu.m_Clockwise != this.m_Clockwise)
@ -453,6 +453,10 @@ export class Arc extends Curve
if (p2 instanceof Vector2)
p2 = Vec2DTo3D(p2);
let ocsInv = this.OCSInv;
p1 = p1.clone().applyMatrix4(ocsInv);
p2 = p2.clone().applyMatrix4(ocsInv);
//弦向量
let chordV = p2.clone().sub(p1);
//弦角度
@ -469,13 +473,14 @@ export class Arc extends Curve
let toCenterAn = chordAn + Math.PI * 0.5;//弦角度转90
//圆心
this.m_Center = midPoint(p1, p2);
polar(this.m_Center, toCenterAn, this.m_Radius - (bul * chordLengthHalf));
let center = midPoint(p1, p2);
polar(center, toCenterAn, this.m_Radius - (bul * chordLengthHalf));
this.Center = center.clone().applyMatrix4(this.OCS);
this.m_Radius = Math.abs(this.m_Radius);
this.m_StartAngle = angle(p1.clone().sub(this.m_Center));
this.m_EndAngle = angle(p2.clone().sub(this.m_Center));
this.m_StartAngle = angle(p1.clone().sub(center));
this.m_EndAngle = angle(p2.clone().sub(center));
this.m_Clockwise = bul < 0;
@ -486,12 +491,19 @@ export class Arc extends Curve
{
if (!(pt1 && pt2 && pt3))
return;
this.m_Center = getCircleCenter(pt1, pt2, pt3);
let ocsInv = this.OCSInv;
pt1 = pt1.clone().applyMatrix4(ocsInv);
pt2 = pt2.clone().applyMatrix4(ocsInv);
pt3 = pt3.clone().applyMatrix4(ocsInv);
let center = getCircleCenter(pt1, pt2, pt3);
this.Center = center.clone().applyMatrix4(this.OCS);
//用圆心和其中一个点求距离得到半径:
this.m_Radius = this.m_Center.distanceTo(pt1);
this.m_Radius = center.distanceTo(pt1);
//起始角度 端点角度
this.m_StartAngle = angle(pt1.clone().sub(this.Center));
this.m_EndAngle = angle(pt3.clone().sub(this.Center));
this.m_StartAngle = angle(pt1.clone().sub(center));
this.m_EndAngle = angle(pt3.clone().sub(center));
//求出向量p1->p2,p1->p3
let p1 = pt2.clone().sub(pt1);
let p2 = pt3.clone().sub(pt1);
@ -518,7 +530,7 @@ export class Arc extends Curve
private UpdateGeometry(geo: THREE.Geometry)
{
let shape = new THREE.Shape();
shape.absarc(this.m_Center.x, this.m_Center.y, this.m_Radius, this.m_StartAngle, this.m_EndAngle, this.m_Clockwise);
shape.absarc(0, 0, this.m_Radius, this.m_StartAngle, this.m_EndAngle, this.m_Clockwise);
geo.setFromPoints(shape.getPoints(60));
geo.verticesNeedUpdate = true;
}
@ -538,8 +550,6 @@ export class Arc extends Curve
ApplyMatrix(m: Matrix4)
{
super.ApplyMatrix(m);
this.m_Normal.applyMatrix4(m);
this.m_Center.applyMatrix4(m);
this.Update();
}
GetSnapPoints(): Array<THREE.Vector3>
@ -552,7 +562,7 @@ export class Arc extends Curve
this.StartPoint,
this.GetPointAtParam(0.5),
this.EndPoint,
this.m_Center.clone(),
this.Center.clone(),
]
}
@ -568,7 +578,7 @@ export class Arc extends Curve
p.add(vec);
if (index > 2)
{
this.m_Center = this.m_Center.add(vec);
this.Center = this.Center.add(vec);
}
else
{
@ -587,11 +597,9 @@ export class Arc extends Curve
{
let an: number;
if (typeof pt === "number")
{
an = this.GetAngleAtParam(pt);
}
else
an = angle(pt.sub(this.m_Center));
an = angle(pt.clone().applyMatrix4(this.OCSInv));
an += Math.PI * 0.5 * (this.m_Clockwise ? -1 : 1);
return polar(new Vector3(), an, this.m_Radius) as Vector3;
@ -612,8 +620,11 @@ export class Arc extends Curve
{
super.ReadFile(file);
let ver = file.Read();
this.m_Center.fromArray(file.Read());
this.m_Normal.fromArray(file.Read());
if (ver === 1)
{
this.Center = new Vector3().fromArray(file.Read());
this.Normal = new Vector3().fromArray(file.Read());
}
this.m_Radius = file.Read();
this.m_StartAngle = file.Read();
this.m_EndAngle = file.Read();
@ -623,9 +634,7 @@ export class Arc extends Curve
WriteFile(file: CADFile)
{
super.WriteFile(file);
file.Write(1);
file.Write(this.m_Center.toArray());
file.Write(this.m_Normal.toArray());
file.Write(2);
file.Write(this.m_Radius);
file.Write(this.m_StartAngle);
file.Write(this.m_EndAngle);

@ -67,6 +67,10 @@ export class Entity extends CADObject
{
return this.m_Matrix.clone();
}
get OCSInv(): Matrix4
{
return new Matrix4().getInverse(this.m_Matrix);
}
/**
* .

@ -35,7 +35,7 @@ export function fixAngle(an: number, fixAngle: number, fuzz: number = 0.1)
}
//改变向量v 不拷贝新向量 返回自身
export function polar(v: Vector3 | Vector2, an: number, dis: number): Vector3 | Vector2
export function polar<T extends Vector2 | Vector3>(v: T, an: number, dis: number): T
{
v.x += Math.cos(an) * dis;
v.y += Math.sin(an) * dis;

Loading…
Cancel
Save