Open CASCADE, the 3D modelling kernel
3D modeling & numerical simulation

Search the Forums
See All Topics
Open CASCADEShowroomGet it!Developer CornerSupport and ProductsAbout us
Technical overview
Areas of use
Advantages
FAQ
Screenshots
Shape factory
Shape gallery
Demonstrations
What's new
System requirements
Download Center
Public license
Documentation
Getting started
Forums
Open Source community
Training and e-learning
A-la Carte Support
Value-added software
Complementary Components
Customer Corner
Company Profile
Marketing Materials
Contact Us
News
Home / Developer Corner / Forums / Usage issues / BRepOffsetAPI_MakeOffset of an open TopoDS_Wire

BRepOffsetAPI_MakeOffset of an open TopoDS_Wire

BRepOffsetAPI_MakeOffset of an open TopoDS_Wire
Steph 2012/08/20 19:58
Hi,

I have some problems since the 6.5.3 release to create the offset of an open TopoDS_Wire.
The TopoDS_Wire in this case is really simple. It contains an unique straight TopoDS_Edge (see attached brep).
The used code is the next one :

The TopoDS_Wire "wire" contains the read ExtractedWire.brep.

try
{
const double dDistance = 5.0;
TopoDS_Wire offsetWire;

BRepOffsetAPI_MakeOffset aOffAlgo(wire,GeomAbs_Arc);
aOffAlgo.Perform(dDistance);

if (aOffAlgo.IsDone())
{
const TopoDS_Shape& shape = aOffAlgo.Shape();
if (!shape.IsNull() && shape.ShapeType()==TopAbs_WIRE)
offsetWire = TopoDS::Wire(shape);
}
}
catch (Standard_Failure)
{
Handle(Standard_Failure) E = Standard_Failure::Caught();
return;
}

When the Perform method is called, the method crash and throw a Standard_Failure exception.
So my question is if it is possible to generate the offset of an open wire ?
I remember to succeed making it before the new release (the offset wire have a "capsule" form shape of wire type which surround the original wire).

Thanks to indicate if it is a regression bug of the 6.5.3.

Stéphane.



You have to be logged in to download the attached file
Steph 2012/08/20 20:55
I've make some other tests and the offset of an open wire work in the majority of the cases except when the edge is a straight edge !!!
It's really strange because if with a curve edge it work like a charm... It's seem to be a bug of a specific case of a straight edge.
Pawel 2012/08/21 13:22
Hi Steph,

actually the documentation says the algorithm (BRepOffsetAPI_MakeOffset) needs "a set of
wires contained in a planar face". Although this is actually the case for a line, the plane cannot be computed and so an exception is produced (Standard_Failure not Standard_ConstructionError as the documentation says).

Not sure why it worked in previous versions but this behaviour seems OK to me.

Pawel
Forum supervisor 2012/08/21 14:42
Dear Steph,
Indeed the documentation says that the algorithm expects "a set of
wires contained in a planar face". Pay your attention on the last words "...in a planar face".
The provided edge has no connection with any surface (make dump of the edge).
See the next example when offset is built from a straight edge
box b 100 100 100
explo b E
don b_1
wire w1 b_1
mkoffset r w1 1 10
fit

See result in the attached picture.
Regards
You have to be logged in to download the attached file
Steph 2012/08/21 15:50
Hi Supervisor,

Really interesting.
So what you're saying me is that the construction of my wire and of it's edge(s) is bad done and must be associated to a plane (with that i will avoid the posted code fix) ?

If so how can be done ?

Is there any method to set a plane to an existing wire or iterating over the edges to each edge ?

Thanks.
Forum supervisor 2012/08/21 16:37
Dear Steph,
I just payed your attention to the documentation note and its right understanding.
Unfortunately I can't answer to the question because we are not providing technical
consulting on the Forum. If you need our professional support you may contact us via
the Contact Form http://www.opencascade.org/about/contacts/.
Regards
Steph 2012/08/21 14:53
Hi Pawel, thanks for the answer.

You're absolutely right. If the wire contains two edges which allow to compute the plane the offset of an open wire work perfectly.
My case is a specific case of a wire with only one edge. So you're right the plane can't be computed as can pass through this wire an infinite number of planes.

So if it is of interest of other people i add in my code before calling the offset this part of code :

//Check if it possible to compute the plane. In my case can't
BRepBuilderAPI_FindPlane findPlane(wire);
if (!findPlane.Found())
{
//So i create an face from the XOY plane for instance and add it the wire.

const gp_Pln& plane = gp_Pln(gp_Ax3(gp::XOY()));

BRepBuilderAPI_MakeFace makeFace(plane);
makeFace.Add(wire);

//And now the offset is well computed
BRepOffsetAPI_MakeOffset aOffAlgo(makeFace.Face(),GeomAbs_Arc);
aOffAlgo.Perform(dDistance);
}

Thanks a lot.
 
 
Latest news
  • Open CASCADE Technology 6.7.1 is available for download!
  • Open CASCADE Technology 6.7.0 is available for download!
  • Open CASCADE Technology 6.6.0 is available for download!

  • © OPEN CASCADE 2000 - 2014  |  Search  |  Contacts   |  Site map