public void AsubB(uint idA, uint idB) { CadFigureMesh figA = GetCadFigureMesh(idA); CadFigureMesh figB = GetCadFigureMesh(idB); if (figA == null || figB == null) { ItConsole.println("invalid ID"); return; } HeModel he_a = figA.mHeModel; HeModel he_b = figB.mHeModel; CadMesh a = HeModelConverter.ToCadMesh(he_a); CadMesh b = HeModelConverter.ToCadMesh(he_b); CadMesh c = CarveW.AMinusB(a, b); MeshUtil.SplitAllFace(c); HeModel hem = HeModelConverter.ToHeModel(c); CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH); fig.SetMesh(hem); CadOpe ope = new CadOpeAddFigure(Controller.CurrentLayer.ID, fig.ID); Session.AddOpe(ope); Controller.CurrentLayer.AddFigure(fig); Session.PostRemakeObjectTree(); }
private void testAminusB() { List <CadFigure> figList = Controller.DB.GetSelectedFigList(); if (figList.Count < 2) { return; } if (figList[0].Type != CadFigure.Types.MESH) { return; } if (figList[1].Type != CadFigure.Types.MESH) { return; } CadFigureMesh fig_a = (CadFigureMesh)figList[0]; CadFigureMesh fig_b = (CadFigureMesh)figList[1]; if (fig_a.Current) { CadFigureMesh t = fig_a; fig_a = fig_b; fig_b = t; } ItConsole.println("ID:" + fig_a.ID.ToString() + " - ID:" + fig_b.ID.ToString()); HeModel he_a = fig_a.mHeModel; HeModel he_b = fig_b.mHeModel; CadMesh a = HeModelConverter.ToCadMesh(he_a); CadMesh b = HeModelConverter.ToCadMesh(he_b); CadMesh c = CarveW.AMinusB(a, b); HeModel hem = HeModelConverter.ToHeModel(c); CadFigureMesh fig = (CadFigureMesh)Controller.DB.NewFigure(CadFigure.Types.MESH); fig.SetMesh(hem); Controller.CurrentLayer.AddFigure(fig); }
public static (CadMesh m1, CadMesh m2) CutMeshWithVector( CadMesh src, Vector3d p0, Vector3d p1, Vector3d normal) { Vector3d wv = (p1 - p0).UnitVector(); Vector3d hv = normal; CadMesh cubeA = MeshMaker.CreateUnitCube(wv, hv, MeshMaker.FaceType.QUADRANGLE); MoveMesh(cubeA, -hv / 2); ScaleMesh(cubeA, 10000); MoveMesh(cubeA, (p1 - p0) / 2 + p0); CadMesh cubeB = MeshMaker.CreateUnitCube(wv, hv, MeshMaker.FaceType.QUADRANGLE); MoveMesh(cubeB, hv / 2); ScaleMesh(cubeB, 10000); MoveMesh(cubeB, (p1 - p0) / 2 + p0); CadMesh m1; try { m1 = CarveW.AMinusB(src, cubeA); } catch (Exception e) { return(null, null); } MeshUtil.SplitAllFace(m1); CadMesh m2; try { m2 = CarveW.AMinusB(src, cubeB); } catch (Exception e) { return(null, null); } MeshUtil.SplitAllFace(m2); return(m1, m2); }