From 52776df17133700ab3fcfd39208ee7331a7d3edf Mon Sep 17 00:00:00 2001 From: ChenX Date: Mon, 9 Apr 2018 11:29:17 +0800 Subject: [PATCH] =?UTF-8?q?!57=20=E9=80=89=E6=8B=A9=E5=AE=9E=E4=BD=93,?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=9E=84=E5=BB=BA=E4=BB=A3=E7=A0=81,?= =?UTF-8?q?=E5=B9=B6=E6=B7=BB=E5=8A=A0=E5=A4=8D=E6=9D=82=E9=9D=A2=E5=9F=9F?= =?UTF-8?q?=E7=9A=84=E7=94=9F=E6=88=90=E6=B5=8B=E8=AF=95.=20Merge=20pull?= =?UTF-8?q?=20request=20!57=20from=20ChenX/GenerateCode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/ALG/region.test.ts | 43 ++++++++++++++++++++++++++++++++++- src/Add-on/GenerateCode.ts | 31 +++++++++++++++++++++++++ src/Editor/CommandRegister.ts | 31 +++++++++++++------------ 3 files changed, 89 insertions(+), 16 deletions(-) create mode 100644 src/Add-on/GenerateCode.ts diff --git a/__test__/ALG/region.test.ts b/__test__/ALG/region.test.ts index 139757bc1..c2f9bace1 100644 --- a/__test__/ALG/region.test.ts +++ b/__test__/ALG/region.test.ts @@ -1,5 +1,6 @@ import { Vector3 } from 'three'; - +import { CADFile } from '../../src/DatabaseServices/CADFile'; +import { Curve } from '../../src/DatabaseServices/Curve'; import { Line } from './../../src/DatabaseServices/Line'; import { RegionParse } from './../../src/Geometry/RegionParse'; @@ -226,3 +227,43 @@ test('保护伞', () => expectReg(g); }); + + +test('带圆弧的复杂图形测试', () => +{ + let file = new CADFile(); + file.Data = [ + ["Line", 1, 1, 105, false, 0, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [135.10332884629918, 7.41153204925861, 0], [141.2013396407662, -3.6141642356868466, 0]], + ["Line", 1, 1, 106, false, 1, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [141.2013396407662, -3.6141642356868466, 0], [129.0669141204631, -3.614164235686845, 0]], + ["Line", 1, 1, 107, false, 2, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [129.0669141204631, -3.614164235686845, 0], [118.90356279635137, 9.936970863128803, 0]], + ["Line", 1, 1, 108, false, 3, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [118.90356279635137, 9.936970863128803, 0], [129.25170232635605, 16.219769863488786, 0]], + ["Line", 1, 1, 109, false, 4, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [129.25170232635605, 16.219769863488786, 0], [131.77714114022623, 24.28885485414719, 0]], + ["Line", 1, 1, 110, false, 5, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [131.77714114022623, 24.28885485414719, 0], [121.09714288582433, 18.21968481731883, 0]], + ["Line", 1, 1, 111, false, 6, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [121.09714288582433, 18.21968481731883, 0], [115.57737509027845, 20.531494667657398, 0]], + ["Line", 1, 1, 112, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [115.57737509027845, 20.531494667657398, 0], [118.90356279635137, 9.936970863128803, 0]], + ["Line", 1, 1, 113, false, 0, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [129.25170232635605, 16.219769863488786, 0], [135.10332884629918, 7.41153204925861, 0]], + ["Line", 1, 1, 114, false, 1, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [135.10332884629918, 7.41153204925861, 0], [141.07814750350425, 7.411532049258609, 0]], + ["Line", 1, 1, 115, false, 2, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [141.07814750350425, 7.411532049258609, 0], [150.9951145530921, 6.9187635002107655, 0]], + ["Line", 1, 1, 116, false, 3, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [150.9951145530921, 6.9187635002107655, 0], [146.62179368029246, 22.625761001110725, 0]], + ["Line", 1, 1, 171, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [115.57737509027845, 20.531494667657398, 0], [122.16815443379333, 33.2818808742703, 0]], + ["Line", 1, 1, 172, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [122.16815443379333, 33.2818808742703, 0], [131.77714114022623, 24.28885485414719, 0]], + ["Line", 1, 1, 173, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [131.77714114022623, 24.28885485414719, 0], [140.3389946799325, 29.339732481887566, 0]], + ["Line", 1, 1, 174, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [140.3389946799325, 29.339732481887566, 0], [146.62179368029246, 22.625761001110725, 0]], + ["Arc", 1, 1, 175, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [151.10541370131332, 26.821442121699068, 0], [0, 0, 1], 6.14056907448819, 3.8938276244846772, 6.018122149019185, false], + ["Arc", 1, 1, 176, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [161.1393080144557, 24.097737845466003, 0], [0, 0, 1], 4.256430496141867, 2.8765294954293896, 5.103001249079749, true], + ["Arc", 1, 1, 177, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [164.0426698023552, 17.04682100167833, 0], [0, 0, 1], 3.368852318904628, 1.9614085954899536, 5.109952481560101, false], + ["Arc", 1, 1, 178, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [168.0577082733428, 7.485478534075631, 0], [0, 0, 1], 7.001287685275334, 1.9683598279703076, 3.2491377039705007, true], + ["Arc", 1, 1, 179, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [156.0343039466818, 6.18741259702873, 0], [0, 0, 1], 5.091984278064126, 0.10754505038070734, 2.997466317295445, false], + ["Arc", 1, 1, 180, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [146.05997836303806, 7.635012886374687, 0], [0, 0, 1], 4.986840923627034, 6.139058970885238, 3.1864217771069283, true], + ["Arc", 1, 1, 181, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 1, [138.09073817490173, 7.277519322534491, 0], [0, 0, 1], 2.9904136682983347, 0.04482912351713572, 3.0967635300726575, false]]; + + let cus: Curve[] = []; + for (let i = 0; i < file.Data.length; i++) + { + cus.push(file.ReadObject(undefined) as Curve); + } + let g = new RegionParse(cus); + + expect(g.m_RegionsInternal.length).toBe(7); + expect(g.m_RegionsOutline.length).toBe(1); +}); diff --git a/src/Add-on/GenerateCode.ts b/src/Add-on/GenerateCode.ts new file mode 100644 index 000000000..5f34ba0c7 --- /dev/null +++ b/src/Add-on/GenerateCode.ts @@ -0,0 +1,31 @@ +import { app } from '../ApplicationServices/Application'; +import { Command } from "../Editor/CommandMachine"; +import { PromptStatus } from "../Editor/PromptResult"; +import { CADFile } from '../DatabaseServices/CADFile'; +import { copyTextToClipboard } from '../Common/Utils'; + +/** + * 选择实体,生成构建代码. + * + * @export + * @class Command_GenerateCode + * @implements {Command} + */ +export class Command_GenerateCode implements Command +{ + async exec() + { + let ssRes = await app.m_Editor.GetSelection({ UseSelect: true }); + if (ssRes.Status != PromptStatus.OK) return; + + let file = new CADFile(); + + for (let en of ssRes.SelectSet.SelectEntityList) + { + file.WriteObject(en); + } + copyTextToClipboard(JSON.stringify(file.Data)); + + app.m_Editor.m_CommandStore.Prompt("成功拷贝到剪切板."); + } +} diff --git a/src/Editor/CommandRegister.ts b/src/Editor/CommandRegister.ts index 422bfed15..5fc3ae938 100644 --- a/src/Editor/CommandRegister.ts +++ b/src/Editor/CommandRegister.ts @@ -1,11 +1,15 @@ import { DrawAxis } from '../Add-on/AddAxis'; -import { Command_ClosePt } from '../Add-on/closetest'; +// import { DrawFloor } from '../Add-on/DrawFloor'; +// import { RevTarget, SaveTarget } from '../Add-on/RenderTarget'; +import { Command_Array } from '../Add-on/Array'; +import { Union } from '../Add-on/CSGUnion'; import { Command_Copy } from '../Add-on/Copy'; import { CustomUcs } from '../Add-on/CostumUCS'; -import { Union } from '../Add-on/CSGUnion'; import { DrawArc } from '../Add-on/DrawArc'; import { Command_DrawBoard } from '../Add-on/DrawBoard'; import { DrawAlignedDimension } from '../Add-on/DrawDim/DrawAlignedDimension'; +import { DrawLineAngularDimension } from '../Add-on/DrawDim/DrawLineAngularDimension'; +import { DrawLinearDimension } from '../Add-on/DrawDim/DrawLinearDimension'; import { DrawEllipse } from '../Add-on/DrawEllipse'; import { DrawFloor } from '../Add-on/DrawFloor'; import { DrawGripStretch } from '../Add-on/DrawGripStretch'; @@ -15,27 +19,24 @@ import { DrawRegion } from '../Add-on/DrawRegion'; import { DrawSky } from '../Add-on/DrawSky'; import { DrawSpline } from '../Add-on/DrawSpline'; import { DrawRegTest } from '../Add-on/DrawTestReg'; +import { DrawText } from '../Add-on/DrawText'; import { DrawCircle0 } from '../Add-on/DrawZeroCircle'; import { Entsel } from '../Add-on/Entsel'; import { Command_Erase } from '../Add-on/Erase'; import { Command_Export } from '../Add-on/Export'; import { Command_Extend } from '../Add-on/Extends'; import { CommandFillet } from '../Add-on/Fillet'; -import { Command_INsTest } from '../Add-on/instest'; -import { Fbx } from '../Add-on/loadfbx'; +import { Command_GenerateCode } from '../Add-on/GenerateCode'; import { LoadImg } from '../Add-on/LoadImg'; import { Command_Move } from '../Add-on/Move'; import { Command_Offset, Command_TestOffset } from '../Add-on/Offset'; import { Open } from '../Add-on/Open'; -import { Command_PLTest } from '../Add-on/polytest'; import { Command_RevPl } from '../Add-on/RevPl'; import { Command_Rotate } from '../Add-on/Rotate'; import { Save } from '../Add-on/Save'; -import { Command_Ssget } from '../Add-on/ssget'; import { Stretch } from '../Add-on/Stretch'; import { Command_SwitchCamera } from '../Add-on/SwitchCamera'; import { Command_SwitchPass } from '../Add-on/SwitchPass'; -import { Test } from '../Add-on/test'; import { Command_TestBox } from '../Add-on/TestBox'; import { Command_DrawBoard2 } from '../Add-on/TestDrawBoard'; import { TestDrawDirectionalLight } from '../Add-on/TestDrawDirectionalLight'; @@ -44,15 +45,14 @@ import { TestDrawSpotLight } from '../Add-on/TestDrawSpotLight'; import { Command_Trim } from '../Add-on/Trim'; import { Redo, Undo } from '../Add-on/Undo'; import { ViewToFront, ViewToRight, ViewToTop } from '../Add-on/ViewChange'; -import { commandMachine } from './CommandMachine'; -import { DrawLinearDimension } from '../Add-on/DrawDim/DrawLinearDimension'; -import { DrawLineAngularDimension } from '../Add-on/DrawDim/DrawLineAngularDimension'; -import { Command_DimTest } from '../DatabaseServices/Dimension/dimTest'; -import { DrawText } from '../Add-on/DrawText'; -// import { DrawFloor } from '../Add-on/DrawFloor'; -// import { RevTarget, SaveTarget } from '../Add-on/RenderTarget'; -import { Command_Array } from '../Add-on/Array'; +import { Command_ClosePt } from '../Add-on/closetest'; +import { Command_INsTest } from '../Add-on/instest'; +import { Fbx } from '../Add-on/loadfbx'; +import { Command_PLTest } from '../Add-on/polytest'; import { Command_PtInCu } from '../Add-on/ptincu'; +import { Command_Ssget } from '../Add-on/ssget'; +import { Command_DimTest } from '../DatabaseServices/Dimension/dimTest'; +import { commandMachine } from './CommandMachine'; export function registerCommand() { commandMachine.RegisterCommand("l", new DrawLine()) @@ -160,6 +160,7 @@ export function registerCommand() commandMachine.RegisterCommand("incu", new Command_PtInCu()); + commandMachine.RegisterCommand("code", new Command_GenerateCode()); // commandMachine.RegisterCommand("st", new SaveTarget()) // commandMachine.RegisterCommand("rt", new RevTarget())