提升多段线的长度精度

pull/80/head
ChenX 6 years ago
parent 6353bfcc77
commit 1df541f503

@ -2,198 +2,198 @@
exports[`IKKGK圆与直线补圆弧 1`] = `1`;
exports[`IKKGK圆与直线补圆弧 2`] = `44.99809767964709`;
exports[`IKKGK圆与直线补圆弧 2`] = `44.99893545255324`;
exports[`IKKGK圆与直线补圆弧 3`] = `1`;
exports[`IKKGK圆与直线补圆弧 4`] = `44.99809767964709`;
exports[`IKKGK圆与直线补圆弧 4`] = `44.99893545255324`;
exports[`IKKGK圆与直线补圆弧 5`] = `1`;
exports[`IKKGK圆与直线补圆弧 6`] = `52.52605376818707`;
exports[`IKKGK圆与直线补圆弧 6`] = `52.52699197436397`;
exports[`中间区域需要圆裁剪 1`] = `1`;
exports[`中间区域需要圆裁剪 2`] = `24.711300177432392`;
exports[`中间区域需要圆裁剪 2`] = `24.711300177432424`;
exports[`圆求交错误导致的线丢失 1`] = `4148.643077512141`;
exports[`圆求交错误导致的线丢失 1`] = `4148.6552839918695`;
exports[`圆求交错误导致的线丢失 2`] = `4425.2680383915285`;
exports[`圆求交错误导致的线丢失 2`] = `4425.280774659357`;
exports[`圆求交错误导致的线丢失 3`] = `4021.8883370297244`;
exports[`圆求交错误导致的线丢失 3`] = `4021.9003332433504`;
exports[`圆求交错误导致的线丢失 4`] = `4581.211144290334`;
exports[`圆求交错误导致的线丢失 4`] = `4581.2242286506635`;
exports[`圆求交错误导致的线丢失 5`] = `3900.596094685299`;
exports[`圆求交错误导致的线丢失 5`] = `3900.6079069452912`;
exports[`圆求交错误导致的线丢失 6`] = `4757.455003004337`;
exports[`圆求交错误导致的线丢失 6`] = `4757.468532252381`;
exports[`圆求交错误导致的线丢失 7`] = `3783.7370117939813`;
exports[`圆求交错误导致的线丢失 7`] = `3783.748662100121`;
exports[`圆求交错误导致的线丢失 8`] = `4971.998320028233`;
exports[`圆求交错误导致的线丢失 8`] = `4972.012479701851`;
exports[`圆求交错误导致的线丢失 9`] = `1148.6589057383728`;
exports[`圆求交错误导致的线丢失 9`] = `1148.6632687596884`;
exports[`圆求交错误导致的线丢失 10`] = `5979.860045322116`;
exports[`圆求交错误导致的线丢失 10`] = `5979.881810920416`;
exports[`圆求交错误导致的线丢失 11`] = `1049.9556072438302`;
exports[`圆求交错误导致的线丢失 11`] = `1049.9599133172644`;
exports[`圆求交错误导致的线丢失 12`] = `6051.204453232351`;
exports[`圆求交错误导致的线丢失 12`] = `6051.226641876329`;
exports[`圆求交错误导致的线丢失 13`] = `722.4723063967795`;
exports[`圆求交错误导致的线丢失 13`] = `722.4732418587954`;
exports[`圆求交错误导致的线丢失 14`] = `6316.957052295357`;
exports[`圆求交错误导致的线丢失 14`] = `6316.980887212943`;
exports[`复杂圆盘选点 1`] = `1`;
exports[`复杂圆盘选点 2`] = `197.02243978484844`;
exports[`复杂圆盘选点 2`] = `197.02551075687774`;
exports[`复杂圆盘选点 3`] = `1`;
exports[`复杂圆盘选点 4`] = `190.8250601645778`;
exports[`复杂圆盘选点 4`] = `190.82843823827844`;
exports[`复杂圆盘选点 5`] = `1`;
exports[`复杂圆盘选点 6`] = `204.53759288661757`;
exports[`复杂圆盘选点 6`] = `204.54080647675428`;
exports[`复杂圆盘选点 7`] = `1`;
exports[`复杂圆盘选点 8`] = `205.56709149039025`;
exports[`复杂圆盘选点 8`] = `205.57027795132643`;
exports[`复杂圆盘选点 9`] = `1`;
exports[`复杂圆盘选点 10`] = `206.8201634712139`;
exports[`复杂圆盘选点 10`] = `206.82332282556683`;
exports[`多段线存在0长度线段导致偏移错误 1`] = `1`;
exports[`多段线存在0长度线段导致偏移错误 2`] = `81933.49238918608`;
exports[`多段线存在0长度线段导致偏移错误 2`] = `81933.70549460054`;
exports[`多段线存在0长度线段导致偏移错误 3`] = `1`;
exports[`多段线存在0长度线段导致偏移错误 4`] = `86143.95799639553`;
exports[`多段线存在0长度线段导致偏移错误 4`] = `86144.16549499573`;
exports[`拱门偏移 1`] = `1`;
exports[`拱门偏移 2`] = `4.314156035548454`;
exports[`拱门偏移 2`] = `4.314159265358979`;
exports[`拱门偏移 3`] = `1`;
exports[`拱门偏移 4`] = `6.827404319936081`;
exports[`拱门偏移 4`] = `6.827433388230814`;
exports[`海豚圆选点导致的错误 1`] = `1`;
exports[`海豚圆选点导致的错误 2`] = `1591.1950206532852`;
exports[`海豚圆选点导致的错误 2`] = `1591.1982232513822`;
exports[`海豚圆选点导致的错误 3`] = `1`;
exports[`海豚圆选点导致的错误 4`] = `1827.6300887246364`;
exports[`海豚圆选点导致的错误 4`] = `1827.6352392619829`;
exports[`简单图形因为点在线内算法错误导致的丢失 1`] = `8.675026988029915`;
exports[`简单图形因为点在线内算法错误导致的丢失 1`] = `8.675189454805246`;
exports[`简单图形因为点在线内算法错误导致的丢失 2`] = `8.252659494518674`;
exports[`简单图形因为点在线内算法错误导致的丢失 2`] = `8.252841733482935`;
exports[`简单图形因为点在线内算法错误导致的丢失 3`] = `6.802593049888034`;
exports[`简单图形因为点在线内算法错误导致的丢失 3`] = `6.802689012735881`;
exports[`简单图形因为点在线内算法错误导致的丢失 4`] = `6.045525633131274`;
exports[`简单图形因为点在线内算法错误导致的丢失 4`] = `6.045609380056393`;
exports[`补充bug测试 1`] = `7385.097729441212`;
exports[`补充bug测试 1`] = `7385.123391644447`;
exports[`补充bug测试 2`] = `7455.833952762297`;
exports[`补充bug测试 2`] = `7455.861403941378`;
exports[`补圆弧测试 补圆弧测试1 1`] = `1`;
exports[`补圆弧测试 补圆弧测试1 2`] = `202.39234999237365`;
exports[`补圆弧测试 补圆弧测试1 2`] = `202.39253405175808`;
exports[`补圆弧测试 补圆弧测试1 3`] = `1`;
exports[`补圆弧测试 补圆弧测试1 4`] = `202.97100463130596`;
exports[`补圆弧测试 补圆弧测试1 4`] = `202.97120101469034`;
exports[`补圆弧测试 补圆弧测试1 5`] = `1`;
exports[`补圆弧测试 补圆弧测试1 6`] = `203.63347010543052`;
exports[`补圆弧测试 补圆弧测试1 6`] = `203.63368101398322`;
exports[`补圆弧测试 补圆弧测试1 7`] = `1`;
exports[`补圆弧测试 补圆弧测试1 8`] = `204.40220678622498`;
exports[`补圆弧测试 补圆弧测试1 8`] = `204.40243508941455`;
exports[`补圆弧测试 补圆弧测试1 9`] = `1`;
exports[`补圆弧测试 补圆弧测试1 10`] = `205.30911616294782`;
exports[`补圆弧测试 补圆弧测试1 10`] = `205.30936570465025`;
exports[`补圆弧测试 补圆弧测试1 11`] = `1`;
exports[`补圆弧测试 补圆弧测试1 12`] = `206.40134291797384`;
exports[`补圆弧测试 补圆弧测试1 12`] = `206.40161902342368`;
exports[`补圆弧测试 补圆弧测试1 13`] = `1`;
exports[`补圆弧测试 补圆弧测试1 14`] = `207.75214121305123`;
exports[`补圆弧测试 补圆弧测试1 14`] = `207.75245158170867`;
exports[`补圆弧测试 补圆弧测试1 15`] = `1`;
exports[`补圆弧测试 补圆弧测试1 16`] = `209.48307101962263`;
exports[`补圆弧测试 补圆弧测试1 16`] = `209.48342742923182`;
exports[`补圆弧测试 补圆弧测试1 17`] = `1`;
exports[`补圆弧测试 补圆弧测试1 18`] = `211.8150599171729`;
exports[`补圆弧测试 补圆弧测试1 18`] = `211.81548185565424`;
exports[`补圆弧测试 补圆弧测试1 19`] = `1`;
exports[`补圆弧测试 补圆弧测试1 20`] = `215.20865129706962`;
exports[`补圆弧测试 补圆弧测试1 20`] = `215.20917509215795`;
exports[`补圆弧测试 补圆弧测试1 21`] = `1`;
exports[`补圆弧测试 补圆弧测试1 22`] = `220.89085248936073`;
exports[`补圆弧测试 补圆弧测试1 22`] = `220.89156198708565`;
exports[`补圆弧测试 补圆弧测试1 23`] = `1`;
exports[`补圆弧测试 补圆弧测试1 24`] = `243.05075247271327`;
exports[`补圆弧测试 补圆弧测试1 24`] = `243.05208882995845`;
exports[`补圆弧测试 补圆弧测试1 25`] = `1`;
exports[`补圆弧测试 补圆弧测试1 26`] = `236.6991306483004`;
exports[`补圆弧测试 补圆弧测试1 26`] = `236.7000505929851`;
exports[`补圆弧测试 补圆弧测试1 27`] = `1`;
exports[`补圆弧测试 补圆弧测试1 28`] = `236.69932095661932`;
exports[`补圆弧测试 补圆弧测试1 28`] = `236.7000505929851`;
exports[`补圆弧测试 补圆弧测试1 29`] = `1`;
exports[`补圆弧测试 补圆弧测试1 30`] = `205.62990409788847`;
exports[`补圆弧测试 补圆弧测试1 30`] = `205.63007530643267`;
exports[`补圆弧测试 补圆弧测试1 31`] = `1`;
exports[`补圆弧测试 补圆弧测试1 32`] = `198.55214618601138`;
exports[`补圆弧测试 补圆弧测试1 32`] = `198.5522282383345`;
exports[`补圆弧测试 补圆弧测试1 33`] = `1`;
exports[`补圆弧测试 补圆弧测试1 34`] = `195.91344487061264`;
exports[`补圆弧测试 补圆弧测试1 34`] = `195.9134975736565`;
exports[`补圆弧测试 补圆弧测试1 35`] = `1`;
exports[`补圆弧测试 补圆弧测试1 36`] = `194.55183899140644`;
exports[`补圆弧测试 补圆弧测试1 36`] = `194.55187803685857`;
exports[`补圆弧测试 补圆弧测试1 37`] = `1`;
exports[`补圆弧测试 补圆弧测试1 38`] = `193.73991606924534`;
exports[`补圆弧测试 补圆弧测试1 38`] = `193.73994771001938`;
exports[`补圆弧测试 补圆弧测试1 39`] = `1`;
exports[`补圆弧测试 补圆弧测试1 40`] = `193.2116315246781`;
exports[`补圆弧测试 补圆弧测试1 40`] = `193.2116587563558`;
exports[`补圆弧测试 补圆弧测试1 41`] = `1`;
exports[`补圆弧测试 补圆弧测试1 42`] = `192.84670578048616`;
exports[`补圆弧测试 补圆弧测试1 42`] = `192.84673020284995`;
exports[`补圆弧测试 补圆弧测试1 43`] = `1`;
exports[`补圆弧测试 补圆弧测试1 44`] = `192.58324938493251`;
exports[`补圆弧测试 补圆弧测试1 44`] = `192.58327191623619`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 1`] = `54789.14760701891`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 1`] = `54789.24964851233`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 2`] = `54907.17933624483`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 2`] = `54907.28173780603`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 3`] = `55497.39792073307`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 3`] = `55497.502122668855`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 4`] = `56678.13326318633`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 4`] = `56678.241066044815`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 5`] = `57859.26303559798`;
exports[`闭合多段线判断精度和重复交点参数导致偏移丢失 5`] = `57859.37443960542`;

@ -1,25 +1,25 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`补充bug测试#IKWGF 1`] = `1.1376402440608806`;
exports[`补充bug测试#IKWGF 1`] = `1.1376403544773543`;
exports[`补充bug测试#IKWGF 2`] = `0.44573816538516137`;
exports[`补充bug测试#IKWGF 2`] = `0.4457395323615238`;
exports[`补充bug测试#IKWGF 3`] = `10.73282822209507`;
exports[`补充bug测试#IKWGF 3`] = `10.73298136409425`;
exports[`补充bug测试#IKWGF 4`] = `12.786755410504352`;
exports[`补充bug测试#IKWGF 4`] = `12.786911814880927`;
exports[`补充bug测试#IKWGF 5`] = `0.6246933329215183`;
exports[`补充bug测试#IKWGF 5`] = `0.6246933440840137`;
exports[`补充bug测试#IKWGF 6`] = `10.586543051841131`;
exports[`补充bug测试#IKWGF 6`] = `10.586693752451833`;
exports[`补充bug测试#IKWGF 7`] = `14.066950838248612`;
exports[`补充bug测试#IKWGF 7`] = `14.067113755971715`;
exports[`补充bug测试#IKWGF 8`] = `2.168984971098264`;
exports[`补充bug测试#IKWGF 9`] = `11.890848111457423`;
exports[`补充bug测试#IKWGF 9`] = `11.891017922899268`;
exports[`补充bug测试#IKWGF 10`] = `1.0803373815793473`;
exports[`补充bug测试#IKWGF 10`] = `1.0803374679586226`;
exports[`补充bug测试#IKWGF 11`] = `0.39474205429703246`;
exports[`补充bug测试#IKWGF 11`] = `0.39474593983890766`;
exports[`补充bug测试#IKWGF 12`] = `10.698715561269278`;
exports[`补充bug测试#IKWGF 12`] = `10.698868451254269`;

@ -8,7 +8,7 @@ Vector3 {
}
`;
exports[`多段线 多段线点获取弧长 1`] = `35.70780177742267`;
exports[`多段线 多段线点获取弧长 1`] = `35.70796326794897`;
exports[`多段线 存在大圆弧的多段线面积 1`] = `-24.019436375469752`;

@ -0,0 +1,25 @@
import { Command } from "../Editor/CommandMachine";
import { app } from "../ApplicationServices/Application";
import { PromptStatus } from "../Editor/PromptResult";
import { Curve } from "../DatabaseServices/Curve";
export class Command_Length implements Command
{
async exec()
{
while (true)
{
let enRes = await app.m_Editor.GetEntity();
if (enRes.Status === PromptStatus.OK)
{
if (enRes.Entity instanceof Curve)
{
app.m_Editor.Prompt(enRes.Entity.Length.toFixed(8));
}
}
else
return;
}
}
}

@ -254,7 +254,7 @@ export class Polyline extends Curve
}
get Length()
{
return this.Shape.getLength();
return this.Explode().reduce((l, cu) => l + cu.Length, 0);
}
/**

@ -67,6 +67,7 @@ import { commandMachine } from './CommandMachine';
import { Sweep } from '../Add-on/Sweep';
import { Command_Scale } from '../Add-on/Scale';
import { Command_Break } from '../Add-on/Break';
import { Command_Length } from '../Add-on/Length';
export function registerCommand()
{
@ -148,6 +149,7 @@ export function registerCommand()
commandMachine.RegisterCommand("f", new CommandFillet());
commandMachine.RegisterCommand("O", new Command_Offset());
commandMachine.RegisterCommand("Length", new Command_Length());
commandMachine.RegisterCommand("br2", new Command_DrawBoard2());

Loading…
Cancel
Save