For all issues regarding the Forums use, please, refer to the Forum Rules.

Our Solutions

Need professional assistance?
Consider our:

Support Offerings

 

Need to speed up your development?
Have a look at our:

Samples & Tools

 

Need some functionality extending standard OCCT capabilities?
Check out our:

Adv. Components

Related pages

selfintersection of wires during offsetting

Divya's picture
Forums: 

Hi,

I am trying to offset a wire multiple no of times till no of obtained offset wires is achieved.But,instead of coming out of loop the code is crashing when it is achieved!

here is the code sample:

void CImportExportDoc::Offset(TopoDS_Wire &W)
{
const GeomAbs_JoinType Join=GeomAbs_Arc;
Handle(AIS_Shape) ais7=new AIS_Shape(W);
BRepOffsetAPI_MakeOffset off(W,GeomAbs_Arc);
Standard_Real dist2 = -200;
Standard_Real NoW,NoE;
do{
off.Perform(dist2); //the code crashes here
TopoDS_Shape S5= off.Shape();
ShapeAnalysis_ShapeContents SA; //to analyse the given shape
SA.Perform(S5);
NoW=SA.NbWires(); //no. of wires in the shape
NoE=SA.NbEdges(); //no. of edges in the wire
TopExp_Explorer Exp1;
for(Exp1.Init(S5,TopAbs_EDGE);Exp1.More();Exp1.Next()) //exploring the shape into edges
{
TopoDS_Edge l_edge = TopoDS::Edge(Exp1.Current());
Handle(Geom_Curve) aCurve = BRep_Tool::Curve(l_edge,u,v);
GeomAdaptor_Curve c(aCurve );
}
dist2=dist2-10;
}while(NoW!=0);
}

Fernando Ghedin's picture

Hello Divya,

Have you checked if the Perform() method raises an exception? It might be helpful.

try
{
(... your code ...)
}
catch (Standard_Failure)
{
Handle (Standard_Failure) lErrorHandle = Standard_Failure::Caught();
Standard_CString lErrorMessage = lErrorHandle->GetMessageString();
}

Now I am curious: is it possible that the Offset of a Wire creates a Shape which has no Wire? Is this what you expect?

Best Regards,
Fernando

P Dolbey's picture

Simple question - whats the value of dist2 when the algorithm crashes. What happens if you change the loop to

do {
...
} while (dist2 != 0);

Pete

P Dolbey's picture

The above runs the risk of not terminating properly if you used dist2 = dist - 11 (or some other number that doesn't terminate). Also NoW amd NoW look like int (or Standard_Integer) to me.

Pete again

P Dolbey's picture

...should read NoW and NoE...

Divya's picture

Tts -1.83. I'm trying to get negative offset here,where it should split into 2or more offset wires if necessary!

Divya's picture

hi!
I just checked using try-catch, Perform() raises an exception.How else can I do offset if perform fails?
Any method to fix this?

Please reply
Divya

Gerrit Bette's picture

I am experiencing the same Problem. I would like to use MakeOffset to 'simplify' my Shape by extruding it a small amount, then shrinking it back. Perform throws an exception if my Extrusion would result in self-intersection in the new shape.

Is this by Design, or is the BRepMakeOffsetAPI still under construction?

In the Documentation it reads alike the lines as if edge-Joining could be performed by this Function.

Contact us

Attention: DO NOT use this form for all kind of request for the removal of your personal data. Please follow this link for such cases.