DiscussionsIssue archiveOCCT:Application Framework

Archived issue #0021004

Naming mechanism improvement

Open CASCADEOCCT:Application Frameworkclosed0 public notes

Search issues

Description

The attached patch is result of the development process inside Samcef
Maintenance project. It sufficiently improves quality and safety of the
Topological naming of the specified shape performed by TNaming package.
Now Naming alows:
- to keep (in case of need) the selected shape orientation
- guarantee that the selected shape is belong to the Context
- treats all aggregation shapes (Compounds, Shells and etc.)
- correctly recomputes results of multipple selection
- extends data definition if the selected shape is Wire
- fixes set of pure bugs.

Additional information

Documentation remark, added by Author 2009-05-15 12:33:55:

New features:
Now Naming allows:
- to keep (in case of need) the selected shape orientation
- guarantee that the selected shape belongs to the Context
- treats all aggregation shapes (Compounds, Shells and etc.)
- extends data definition if the selected shape is Wire
- correct recomputation of results after multipple selection
Improvements:


Changes:
The content of the next packages is modified:
BinLDrivers
BinMNaming
MNaming
PNaming
TNaming
TopTools
XmlLDrivers
XmlMNaming
Modified entities:
TNaming:
--------
TNaming.cdl
Attachment 2 (CXX)
TNaming_Identifier.cxx
TNaming_Name.cdl
TNaming_Name.cxx
TNaming_NamedShape.cxx
TNaming_Naming.cdl
TNaming_Naming.cxx
TNaming_NamingTool.cxx
TNaming_Selector.cdl
TNaming_Selector.cxx
TNaming_Tool.cxx

PNaming:
-------
PNaming.cdl
PNaming_Name_1.cdl
PNaming_Name_1.cxx
PNaming_Name_1.lxx
PNaming_Naming_1.cdl
PNaming_Naming_1.cxx

MNaming:
-------
MNaming.cdl
MNaming.cxx
MNaming_NamingRetrievalDriver_1.cdl
MNaming_NamingRetrievalDriver_1.cxx
MNaming_NamingStorageDriver.cxx

TopTools:
--------
TopTools.cdl

BinMNaming:
----------
BinMNaming.cdl
BinMNaming.cxx
BinMNaming_NamingDriver.cxx

BinLDrivers:
-----------
BinLDrivers.cdl
BinLDrivers.cxx
BinLDrivers_DocumentRetrievalDriver.cxx

XmlMNaming:
----------
XmlMNaming.cdl
XmlMNaming.cxx
XmlMNaming_NamingDriver.cxx

XmlLDrivers:
-----------
XmlLDrivers.cxx
XmlLDrivers_DocumentRetrievalDriver.cxx

Basic modifications are done in TNaming package. Modifications made in all other
packages serves only for persistance maintenance.

TNaming package main modifications in API.
-----------------------------------------
1)Enumeration TNaming_NameType is extended for several members:
...
ORIENTATION,
WIREIN

2)New package methods:
    FindUniqueContext(S : Shape from TopoDS; Context : Shape from TopoDS)
    returns Shape from TopoDS;
     ---Purpose: Find unique context of shape <S>

    FindUniqueContextSet(S : Shape from TopoDS; Context : Shape from TopoDS;
                         Arr : in out HArray1OfShape from TopTools)
    returns Shape from TopoDS;
     ---Purpose: Find unique context of shape <S>,which is pure concatenation
     -- of atomic shapes (Compound). The result is concatenation of
     -- single contexts

3)TNaming_Selector class.
API of Select method is changed:

Select (me; Selection : Shape from TopoDS;
            Context : Shape from TopoDS;
            Geometry : Boolean = Standard_False;
            KeepOrientatation : Boolean = Standard_False)
    returns Boolean from Standard;
New boolean variable <KeepOrientatation> is added. By default KeepOrientatation
= False. If KeepOrientatation = True than, than Orientation of selected shape
will be taken into account during recomputation.

4)TNaming_Identifier.cxx - fixed small bug.

5)TNaming_Name class.
--------------------
- added new field <myContextLabel> : Label from TDF;
- added new method for ORIENTATION name solving
static Standard_Boolean ORientation (const TDF_Label& L,
                                     const TDF_LabelMap& Valid,
                                     const TNaming_ListOfNamedShape& Args,
                                     const Handle(TNaming_NamedShape)& Stop);
- added new method for WIREIN name solving
  static Standard_Boolean WireIN(const TDF_Label& L,
                               const TDF_LabelMap& Valid,
                               const TNaming_ListOfNamedShape& Args);
- redisigned method for UNION name soving
  static Standard_Boolean Union (const TDF_Label& L,
                               const TDF_LabelMap& Valid,
                               const TNaming_ListOfNamedShape& Args,
                               const Handle(TNaming_NamedShape)& Stop,
                               const TopAbs_ShapeEnum ShapeType,
                               const TDF_Label& ContextLabel);

6)TNaming_Naming class.
----------------------
a)Modified API of constructor.
Name (myclass; where : Label from TDF;
                 Selection : Shape from TopoDS;
                 Context : Shape from TopoDS;
                 Geometry : Boolean from Standard = Standard_False;
                 KeepOrientation : Boolean from Standard = Standard_False;
                 BNproblem : Boolean from Standard = Standard_False)
returns NamedShape from TNaming;
---Purpose: Creates a Namimg attribute at label <where> to
-- identify the shape <Selection>. Geometry is
-- Standard_True if we are only interested by the
-- underlying geometry (e.g. setting a
-- constraint). <Context> is used to find neighbours of
-- <S> when required by the naming.
-- If KeepOrientation is True the Selection orientation is taken
-- into account. BNproblem == True points out that Context sub-shapes
-- in DF have orientation differences with Context shape itself.

KeepOrientation & BNproblem boolean flags are new one.

b)Modified general Naming data structure building mechanism. Last modifications
makes procedure of Name data structures building:
- recursive
- takes into account selected shape orientation
- treats aggregation shapes (Compounds, Shells ...)
- introduce new names: ORIENTATION, WIREIN

7)TNaming_NamedShape class.
Modified method
void TNaming_Builder::Select (const TopoDS_Shape& S,
                  const TopoDS_Shape& InS);
Now node of old shape (not used before) is used to keep shape orientation in DF.

8)TNaming_Tool class.
--------------------
Modified implementation of the next methods:
- TNaming_Tool::GetShape(const Handle(TNaming_NamedShape)& NS);
- TNaming_Tool::CurrentShape(const Handle(TNaming_NamedShape)& Att);
- TNaming_Tool::CurrentShape(const Handle(TNaming_NamedShape)& Att,
                    const TDF_LabelMap& Updated);
9)TNaming_NamingTool class.
--------------------------
Modified implementation of the next methods
- TNaming_NamingTool::CurrentShape(const TDF_LabelMap& Valid,
                      const TDF_LabelMap& Forbiden,
                      const Handle(TNaming_NamedShape)& Att,
                      TopTools_MapOfShape& MS);
- TNaming_NamingTool::CurrentShapeFromShape(const TDF_LabelMap& Valid,
                           const TDF_LabelMap& Forbiden,
                           const TDF_Label& Acces,
                           const TopoDS_Shape& S,
                           TopTools_MapOfShape& MS);

Public activity

No public notes

Participants are labeled by their role within this record.