Beispiel #1
0
static HeeksObj* Fuse(HeeksObj* s1, HeeksObj* s2){
	try
	{
		TopoDS_Shape sh1, sh2;
		TopoDS_Shape new_shape;
		if(wxGetApp().useOldFuse)new_shape = BRepAlgo_Fuse(((CShape*)s1)->Shape(), ((CShape*)s2)->Shape());
		else new_shape = BRepAlgoAPI_Fuse(((CShape*)s1)->Shape(), ((CShape*)s2)->Shape());

		HeeksObj* new_object = CShape::MakeObject(new_shape, _("Result of Fuse Operation"), SOLID_TYPE_UNKNOWN, ((CShape*)s1)->m_color, ((CShape*)s1)->GetOpacity());
		wxGetApp().Add(new_object, NULL);
		wxGetApp().Remove(s1);
		wxGetApp().Remove(s2);
		return new_object;
	}
	catch (Standard_Failure) {
		Handle_Standard_Failure e = Standard_Failure::Caught();
		wxMessageBox(wxString(_("Error with fuse operation")) + _T(": ") + Ctt(e->GetMessageString()));
		return NULL;
	}
}
Beispiel #2
0
void Werkstuck::LY(float endPunkt, float Rwz, float Lwz, float Rwz2) // прямое фрезерование по оси Х
// endPunkt - конечная точка
{
    if (Zwz<H0) {
        gp_Pnt punkt1(Xwz-Rwz,Ywz,Zwz);
        gp_Pnt punkt2(Xwz+Rwz,Ywz,Zwz);
        gp_Pnt punkt3(Xwz+Rwz,endPunkt,Zwz);
        gp_Pnt punkt4(Xwz,endPunkt,Zwz);
        if (endPunkt>=Ywz) punkt4.SetY(endPunkt+Rwz);
        else punkt4.SetY(endPunkt-Rwz);

        gp_Pnt punkt5(Xwz-Rwz,endPunkt,Zwz);


        Handle(Geom_TrimmedCurve) aSeg1 = GC_MakeSegment(punkt1 , punkt2);
        Handle(Geom_TrimmedCurve) aSeg2 = GC_MakeSegment(punkt2 , punkt3);
        Handle(Geom_TrimmedCurve) aSeg3 = GC_MakeArcOfCircle(punkt3,punkt4 ,punkt5);
        Handle(Geom_TrimmedCurve) aSeg4 = GC_MakeSegment(punkt5 , punkt1);

        TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSeg1);
        TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aSeg2);
        TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSeg3);
        TopoDS_Edge aEdge4 = BRepBuilderAPI_MakeEdge(aSeg4);

        TopoDS_Wire Basis  = BRepBuilderAPI_MakeWire(aEdge1 , aEdge2 , aEdge3, aEdge4);

        TopoDS_Face FlacheBasis = BRepBuilderAPI_MakeFace(Basis);


        if (firstRun) {
            fBasis = FlacheBasis;
            firstRun = false;
        } else {

            fBasis = BRepAlgo_Fuse(fBasis, FlacheBasis);

            gp_Vec PrismVec(0 , 0 , Lwz);

            TopoDS_Shape sLY = BRepPrimAPI_MakePrism(fBasis , PrismVec);

            if (Rwz2>0) {
                BRepFilletAPI_MakeFillet mkFillet(sLY);
                TopExp_Explorer aEdgeExplorer(sLY , TopAbs_EDGE);

                while(aEdgeExplorer.More()) {
                    TopoDS_Edge aEdge = TopoDS::Edge(aEdgeExplorer.Current());
                    mkFillet.Add(Rwz2 , aEdge);
                    aEdgeExplorer.Next();
                }
                sLY = mkFillet.Shape();
            }

            WS = BRepAlgo_Cut(WS,sLY);

            firstRun = true;
        }

        /*gp_Vec PrismVec(0 , 0 , Lwz);

        TopoDS_Shape sLY = BRepPrimAPI_MakePrism(FlacheBasis , PrismVec);

        if (Rwz2>0) {
            BRepFilletAPI_MakeFillet mkFillet(sLY);
            TopExp_Explorer aEdgeExplorer(sLY , TopAbs_EDGE);

            while(aEdgeExplorer.More()){
            TopoDS_Edge aEdge = TopoDS::Edge(aEdgeExplorer.Current());
            mkFillet.Add(Rwz2 , aEdge);
            aEdgeExplorer.Next();
            }
            sLY = mkFillet.Shape();
        }

        WS = BRepAlgo_Cut(WS,sLY);*/

    }
    Ywz=endPunkt;
}