diff --git a/__test__/Polyline/__snapshots__/offset.test.ts.snap b/__test__/Polyline/__snapshots__/offset.test.ts.snap index e15ffba7a..598e8f59f 100644 --- a/__test__/Polyline/__snapshots__/offset.test.ts.snap +++ b/__test__/Polyline/__snapshots__/offset.test.ts.snap @@ -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`; diff --git a/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap b/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap index efcab8e0c..d84fdbac4 100644 --- a/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap +++ b/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap @@ -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`; diff --git a/__test__/Polyline/__snapshots__/polyline.test.ts.snap b/__test__/Polyline/__snapshots__/polyline.test.ts.snap index d34f81a29..a3fe33c76 100644 --- a/__test__/Polyline/__snapshots__/polyline.test.ts.snap +++ b/__test__/Polyline/__snapshots__/polyline.test.ts.snap @@ -8,7 +8,7 @@ Vector3 { } `; -exports[`多段线 多段线点获取弧长 1`] = `35.70780177742267`; +exports[`多段线 多段线点获取弧长 1`] = `35.70796326794897`; exports[`多段线 存在大圆弧的多段线面积 1`] = `-24.019436375469752`; diff --git a/src/Add-on/Length.ts b/src/Add-on/Length.ts new file mode 100644 index 000000000..f70edfe03 --- /dev/null +++ b/src/Add-on/Length.ts @@ -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; + } + } +} diff --git a/src/DatabaseServices/Polyline.ts b/src/DatabaseServices/Polyline.ts index 98021adf3..79027d5d5 100644 --- a/src/DatabaseServices/Polyline.ts +++ b/src/DatabaseServices/Polyline.ts @@ -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); } /** diff --git a/src/Editor/CommandRegister.ts b/src/Editor/CommandRegister.ts index 41938380b..5c2e4d6b9 100644 --- a/src/Editor/CommandRegister.ts +++ b/src/Editor/CommandRegister.ts @@ -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());