// File: XmlMNaming_NamingDriver.cxx // Created: 31.08.01 10:09:46 // Author: Julia DOROVSKIKH // Copyright: Open Cascade 2001 // History: #include #include #include #include #include #include #include #include //======================================================================= static TopAbs_ShapeEnum ShapeEnumFromString (const XmlObjMgt_DOMString&); static TNaming_NameType NameTypeFromString (const XmlObjMgt_DOMString&); static const XmlObjMgt_DOMString& ShapeEnumToString (const TopAbs_ShapeEnum); static const XmlObjMgt_DOMString& NameTypeToString (const TNaming_NameType); IMPLEMENT_DOMSTRING (IndexString, "index") IMPLEMENT_DOMSTRING (StopNamedShapeString, "stopNS") IMPLEMENT_DOMSTRING (TypeString, "nametype") IMPLEMENT_DOMSTRING (ShapeTypeString, "shapetype") IMPLEMENT_DOMSTRING (ArgumentsString, "arguments") IMPLEMENT_DOMSTRING (ContextLabelString, "contextlabel") IMPLEMENT_DOMSTRING (NTUnknownString, "unknown") IMPLEMENT_DOMSTRING (NTIdentityString, "identity") IMPLEMENT_DOMSTRING (NTModifUntilString, "modifuntil") IMPLEMENT_DOMSTRING (NTGenerationString, "generation") IMPLEMENT_DOMSTRING (NTIntersectionString, "intersection") IMPLEMENT_DOMSTRING (NTUnionString, "union") IMPLEMENT_DOMSTRING (NTSubtractionString, "subtraction") IMPLEMENT_DOMSTRING (NTConstShapeString, "constshape") IMPLEMENT_DOMSTRING (NTFilterByNeighString, "filterbyneigh") IMPLEMENT_DOMSTRING (NTOrientationString, "orientation") IMPLEMENT_DOMSTRING (NTWireInString, "wirein") IMPLEMENT_DOMSTRING (ShCompoundString, "compound") IMPLEMENT_DOMSTRING (ShCompsolidString, "compsolid") IMPLEMENT_DOMSTRING (ShSolidString, "solid") IMPLEMENT_DOMSTRING (ShShellString, "shell") IMPLEMENT_DOMSTRING (ShFaceString, "face") IMPLEMENT_DOMSTRING (ShWireString, "wire") IMPLEMENT_DOMSTRING (ShEdgeString, "edge") IMPLEMENT_DOMSTRING (ShVertexString, "vertex") IMPLEMENT_DOMSTRING (ShShapeString, "shape") //======================================================================= //function : XmlMNaming_NamingDriver //purpose : Constructor //======================================================================= XmlMNaming_NamingDriver::XmlMNaming_NamingDriver (const Handle(CDM_MessageDriver)& theMsgDriver) : XmlMDF_ADriver (theMsgDriver, NULL) {} //======================================================================= //function : NewEmpty //purpose : //======================================================================= Handle(TDF_Attribute) XmlMNaming_NamingDriver::NewEmpty() const { return (new TNaming_Naming()); } //======================================================================= //function : Paste //purpose : persistent -> transient (retrieve) //======================================================================= Standard_Boolean XmlMNaming_NamingDriver::Paste (const XmlObjMgt_Persistent& theSource, const Handle(TDF_Attribute)& theTarget, XmlObjMgt_RRelocationTable& theRelocTable) const { const XmlObjMgt_Element& anElem = theSource; Handle(TNaming_Naming) aNg = Handle(TNaming_Naming)::DownCast(theTarget); TNaming_Name& aNgName = aNg->ChangeName(); // type and shape type aNgName.Type (NameTypeFromString (anElem.getAttribute(::TypeString()))); aNgName.ShapeType(ShapeEnumFromString(anElem.getAttribute(::ShapeTypeString()))); Standard_Integer aNb; Handle(TNaming_NamedShape) NS; TCollection_ExtendedString aMsgString; XmlObjMgt_DOMString aDOMStr = anElem.getAttribute(::ArgumentsString()); if (aDOMStr != NULL) { Standard_CString aGs = Standard_CString(aDOMStr.GetString()); // first argument if (!XmlObjMgt::GetInteger(aGs, aNb)) { aMsgString = TCollection_ExtendedString ("XmlMNaming_NamingDriver: Cannot retrieve reference " "on first Argument from \"") + aDOMStr + "\""; WriteMessage (aMsgString); return Standard_False; } while (aNb > 0) { if (theRelocTable.IsBound(aNb)) NS = Handle(TNaming_NamedShape)::DownCast(theRelocTable.Find(aNb)); else { NS = new TNaming_NamedShape; theRelocTable.Bind(aNb, NS); } aNgName.Append(NS); // next argument if (!XmlObjMgt::GetInteger(aGs, aNb)) aNb = 0; } } // stop named shape aDOMStr = anElem.getAttribute(::StopNamedShapeString()); if (aDOMStr != NULL) { if (!aDOMStr.GetInteger(aNb)) { aMsgString = TCollection_ExtendedString ("XmlMNaming_NamingDriver: Cannot retrieve reference " "on StopNamedShape from \"") + aDOMStr + "\""; WriteMessage (aMsgString); return Standard_False; } if (aNb > 0) { if (theRelocTable.IsBound(aNb)) NS = Handle(TNaming_NamedShape)::DownCast(theRelocTable.Find(aNb)); else { NS = new TNaming_NamedShape; theRelocTable.Bind(aNb, NS); } aNgName.StopNamedShape(NS); } } // index aDOMStr = anElem.getAttribute(::IndexString()); if (!aDOMStr.GetInteger(aNb)) { aMsgString = TCollection_ExtendedString ("XmlMNaming_NamingDriver: Cannot retrieve " "integer value of Index from \"") + aDOMStr + "\""; WriteMessage (aMsgString); return Standard_False; } aNgName.Index(aNb); // #ifdef DEB //cout << "CurDocVersion = " << XmlMNaming::DocumentVersion() < 3) { XmlObjMgt_DOMString aDomEntry = anElem.getAttribute(::ContextLabelString()); if (aDomEntry != NULL) { TCollection_AsciiString anEntry; if (XmlObjMgt::GetTagEntryString (aDomEntry, anEntry) == Standard_False) { TCollection_ExtendedString aMessage = TCollection_ExtendedString ("Cannot retrieve Entry from \"") + aDomEntry + '\"'; WriteMessage (aMessage); return Standard_False; } // find label by entry TDF_Label tLab; // Null label. if (anEntry.Length() > 0) { TDF_Tool::Label(aNg->Label().Data(), anEntry, tLab, Standard_True); aNgName.ContextLabel(tLab); #ifdef DEB cout << "Retrieving Context Label = " << anEntry.ToCString() <