3D modeling & numerical simulation

### Profile - completing the profile

 Once the first part of your wire is created you need to compute the complete profile.

 simple way to do this is to: - compute a new wire by reflecting the existing one. - add the reflected wire to the initial one.

 To apply a transformation on shapes (including wires), you first need to define the properties of a 3D geometric transformation by using the gp_Trsf class. This affinity transformation can be a translation, a rotation, a scale, a reflection or a combination of these. In our case, we need to define a reflection with respect to the X axis of the global coordinate system. An axis, defined with the gp_Ax1 class, is built out of a point and a direction (3D unitary vector). There are two ways to define this axis. The first way is to define it from scratch, using its geometric definition: - X axis is located at (0 , 0 , 0) - use the gp_Pnt class. - X axis direction is (1 , 0 , 0) - use the gp_Dir class. A gp_Dir instance is created out of its X, Y and Z coordinates. gp_Pnt aOrigin(0 , 0 , 0); gp_Dir xDir(1 , 0 , 0); gp_Ax1 xAxis(aOrigin , xDir); The second and simplest way is to use the geometric constants defined in the gp package (origin, main directions and axis of the global coordinate system). To get the X axis, just call the gp::OX method: gp_Ax1 xAxis = gp::OX(); As previously explained, the property of a 3D geometric transformation is defined with the gp_Trsf class. There are two different ways to use this class: - by defining a transformation matrix from scratch - by using the appropriate methods corresponding to the required transformation (SetTranslation for a translation, SetMirror for a reflection, etc.): the matrix is automatically computed. As the simplest approach is always the best, you should use the SetMirror method with the axis as the center of symmetry. gp_Trsf aTrsf; aTrsf.SetMirror(xAxis); You now have all necessary data to apply the transformation with the BRepBuilderAPI_Transform class by specifying: - the shape on which the transformation must be applied. - the geometric transformation BRepBuilderAPI_Transform aBRepTrsf(aWire , aTrsf); BRepBuilderAPI_Transform does not modify the nature of the shape: the result of the reflected wire remains a wire. But the function-like call or the BRepBuilderAPI_Transform::Shape method returns a TopoDS_Shape object: TopoDS_Shape aMirroredShape = aBRepTrsf.Shape(); What you need is a method to consider the resulting reflected shape as a wire. The TopoDS global functions provides this kind of service by casting a shape into its real type. To cast the transformed wire, use the TopoDS::Wire method. TopoDS_Wire aMirroredWire = TopoDS::Wire(aBRepTrsf.Shape()); The bottle's profile is almost finished. You have created two wires : aWire and aMirroredWire. You need to concatenate them to compute a single shape. To do this, you use the BRepBuilderAPI_MakeWire class as follows: - create an instance of BRepBuilderAPI_MakeWire. - add all edges of the two wires by using the Add method on this object. BRepBuilderAPI_MakeWire mkWire; mkWire.Add(aWire); mkWire.Add(aMirroredWire); TopoDS_Wire myWireProfile = mkWire.Wire(); next step previous step

 login pass registration

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