mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-06-20 11:54:07 +03:00
XCAF: binary notes with array of bytes
This commit is contained in:
parent
e66ddc4bab
commit
bc1c59d0a0
@ -17,6 +17,7 @@
|
|||||||
#include <CDM_MessageDriver.hxx>
|
#include <CDM_MessageDriver.hxx>
|
||||||
#include <Standard_Type.hxx>
|
#include <Standard_Type.hxx>
|
||||||
#include <TDF_Attribute.hxx>
|
#include <TDF_Attribute.hxx>
|
||||||
|
#include <TColStd_HArray1OfByte.hxx>
|
||||||
#include <TCollection_AsciiString.hxx>
|
#include <TCollection_AsciiString.hxx>
|
||||||
#include <TCollection_ExtendedString.hxx>
|
#include <TCollection_ExtendedString.hxx>
|
||||||
#include <BinMXCAFDoc_NoteBinDataDriver.hxx>
|
#include <BinMXCAFDoc_NoteBinDataDriver.hxx>
|
||||||
@ -58,11 +59,19 @@ Standard_Boolean BinMXCAFDoc_NoteBinDataDriver::Paste(const BinObjMgt_Persistent
|
|||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
|
||||||
TCollection_ExtendedString aTitle;
|
TCollection_ExtendedString aTitle;
|
||||||
TCollection_AsciiString aData, aMIMEtype;
|
TCollection_AsciiString aMIMEtype;
|
||||||
if (!(theSource >> aTitle >> aData >> aMIMEtype))
|
Standard_Integer nbSize;
|
||||||
|
if (!(theSource >> aTitle >> aMIMEtype >> nbSize))
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
|
||||||
aNote->Set(aTitle, aData, aMIMEtype);
|
Handle(TColStd_HArray1OfByte) aData;
|
||||||
|
if (nbSize > 0)
|
||||||
|
{
|
||||||
|
aData.reset(new TColStd_HArray1OfByte(1, nbSize));
|
||||||
|
theSource.GetByteArray(&aData->ChangeFirst(), nbSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
aNote->Set(aTitle, aMIMEtype, aData);
|
||||||
|
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
@ -80,10 +89,8 @@ void BinMXCAFDoc_NoteBinDataDriver::Paste(const Handle(TDF_Attribute)& theSource
|
|||||||
Handle(XCAFDoc_NoteBinData) aNote = Handle(XCAFDoc_NoteBinData)::DownCast(theSource);
|
Handle(XCAFDoc_NoteBinData) aNote = Handle(XCAFDoc_NoteBinData)::DownCast(theSource);
|
||||||
if (!aNote.IsNull())
|
if (!aNote.IsNull())
|
||||||
{
|
{
|
||||||
theTarget
|
theTarget << aNote->Title() << aNote->MIMEtype() << aNote->Size();
|
||||||
<< aNote->Title()
|
if (aNote->Size() > 0)
|
||||||
<< aNote->MIMEtype()
|
theTarget.PutByteArray(&aNote->Data()->ChangeFirst(), aNote->Size());
|
||||||
<< aNote->Data()
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
#include <OSD_File.hxx>
|
#include <OSD_File.hxx>
|
||||||
#include <Standard_GUID.hxx>
|
#include <Standard_GUID.hxx>
|
||||||
#include <TCollection_HAsciiString.hxx>
|
|
||||||
#include <TDF_Label.hxx>
|
#include <TDF_Label.hxx>
|
||||||
#include <XCAFDoc_NoteBinData.hxx>
|
#include <XCAFDoc_NoteBinData.hxx>
|
||||||
|
|
||||||
@ -33,19 +32,41 @@ Standard_Boolean XCAFDoc_NoteBinData::IsMine(const TDF_Label& theLabel)
|
|||||||
return (!theLabel.IsNull() && theLabel.FindAttribute(XCAFDoc_NoteBinData::GetID(), anAttr));
|
return (!theLabel.IsNull() && theLabel.FindAttribute(XCAFDoc_NoteBinData::GetID(), anAttr));
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle(XCAFDoc_NoteBinData) XCAFDoc_NoteBinData::Set(const TDF_Label& theLabel,
|
Handle(XCAFDoc_NoteBinData)
|
||||||
const TCollection_ExtendedString& theUserName,
|
XCAFDoc_NoteBinData::Set(const TDF_Label& theLabel,
|
||||||
const TCollection_ExtendedString& theTimeStamp,
|
const TCollection_ExtendedString& theUserName,
|
||||||
const TCollection_ExtendedString& theTitle,
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
OSD_File& theFile,
|
const TCollection_ExtendedString& theTitle,
|
||||||
const TCollection_AsciiString& theMIMEtype)
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
|
OSD_File& theFile)
|
||||||
{
|
{
|
||||||
Handle(XCAFDoc_NoteBinData) aNoteBinData;
|
Handle(XCAFDoc_NoteBinData) aNoteBinData;
|
||||||
if (!theLabel.IsNull() && !theLabel.FindAttribute(XCAFDoc_NoteBinData::GetID(), aNoteBinData))
|
if (!theLabel.IsNull() && !theLabel.FindAttribute(XCAFDoc_NoteBinData::GetID(), aNoteBinData))
|
||||||
{
|
{
|
||||||
aNoteBinData = new XCAFDoc_NoteBinData();
|
aNoteBinData = new XCAFDoc_NoteBinData();
|
||||||
aNoteBinData->XCAFDoc_Note::Set(theUserName, theTimeStamp);
|
aNoteBinData->XCAFDoc_Note::Set(theUserName, theTimeStamp);
|
||||||
aNoteBinData->Set(theTitle, theFile, theMIMEtype);
|
if (aNoteBinData->Set(theTitle, theMIMEtype, theFile))
|
||||||
|
theLabel.AddAttribute(aNoteBinData);
|
||||||
|
else
|
||||||
|
aNoteBinData.Nullify();
|
||||||
|
}
|
||||||
|
return aNoteBinData;
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle(XCAFDoc_NoteBinData)
|
||||||
|
XCAFDoc_NoteBinData::Set(const TDF_Label& theLabel,
|
||||||
|
const TCollection_ExtendedString& theUserName,
|
||||||
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
|
const TCollection_ExtendedString& theTitle,
|
||||||
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
|
const Handle(TColStd_HArray1OfByte)& theData)
|
||||||
|
{
|
||||||
|
Handle(XCAFDoc_NoteBinData) aNoteBinData;
|
||||||
|
if (!theLabel.IsNull() && !theLabel.FindAttribute(XCAFDoc_NoteBinData::GetID(), aNoteBinData))
|
||||||
|
{
|
||||||
|
aNoteBinData = new XCAFDoc_NoteBinData();
|
||||||
|
aNoteBinData->XCAFDoc_Note::Set(theUserName, theTimeStamp);
|
||||||
|
aNoteBinData->Set(theTitle, theMIMEtype, theData);
|
||||||
theLabel.AddAttribute(aNoteBinData);
|
theLabel.AddAttribute(aNoteBinData);
|
||||||
}
|
}
|
||||||
return aNoteBinData;
|
return aNoteBinData;
|
||||||
@ -55,25 +76,33 @@ XCAFDoc_NoteBinData::XCAFDoc_NoteBinData()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void XCAFDoc_NoteBinData::Set(const TCollection_ExtendedString& theTitle,
|
Standard_Boolean XCAFDoc_NoteBinData::Set(const TCollection_ExtendedString& theTitle,
|
||||||
OSD_File& theFile,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype)
|
OSD_File& theFile)
|
||||||
{
|
{
|
||||||
if (!theFile.IsOpen() || !theFile.IsReadable())
|
if (!theFile.IsOpen() || !theFile.IsReadable())
|
||||||
return;
|
return Standard_False;
|
||||||
|
|
||||||
Backup();
|
Backup();
|
||||||
|
|
||||||
TCollection_AsciiString myData;
|
if (theFile.Size() > IntegerLast())
|
||||||
theFile.Read(myData, theFile.Size());
|
return Standard_False;
|
||||||
|
|
||||||
|
myData.reset(new TColStd_HArray1OfByte(1, theFile.Size()));
|
||||||
|
Standard_Integer nbReadBytes = 0;
|
||||||
|
theFile.Read((Standard_Address)&myData->First(), myData->Length(), nbReadBytes);
|
||||||
|
if (nbReadBytes < myData->Length())
|
||||||
|
return Standard_False;
|
||||||
|
|
||||||
myTitle = theTitle;
|
myTitle = theTitle;
|
||||||
myMIMEtype = theMIMEtype;
|
myMIMEtype = theMIMEtype;
|
||||||
|
|
||||||
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XCAFDoc_NoteBinData::Set(const TCollection_ExtendedString& theTitle,
|
void XCAFDoc_NoteBinData::Set(const TCollection_ExtendedString& theTitle,
|
||||||
const TCollection_AsciiString& theData,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype)
|
const Handle(TColStd_HArray1OfByte)& theData)
|
||||||
{
|
{
|
||||||
Backup();
|
Backup();
|
||||||
|
|
||||||
@ -87,16 +116,21 @@ const TCollection_ExtendedString& XCAFDoc_NoteBinData::Title() const
|
|||||||
return myTitle;
|
return myTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TCollection_AsciiString& XCAFDoc_NoteBinData::Data() const
|
|
||||||
{
|
|
||||||
return myData;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TCollection_AsciiString& XCAFDoc_NoteBinData::MIMEtype() const
|
const TCollection_AsciiString& XCAFDoc_NoteBinData::MIMEtype() const
|
||||||
{
|
{
|
||||||
return myMIMEtype;
|
return myMIMEtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Standard_Integer XCAFDoc_NoteBinData::Size() const
|
||||||
|
{
|
||||||
|
return (!myData.IsNull() ? myData->Length() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(TColStd_HArray1OfByte)& XCAFDoc_NoteBinData::Data() const
|
||||||
|
{
|
||||||
|
return myData;
|
||||||
|
}
|
||||||
|
|
||||||
const Standard_GUID& XCAFDoc_NoteBinData::ID() const
|
const Standard_GUID& XCAFDoc_NoteBinData::ID() const
|
||||||
{
|
{
|
||||||
return GetID();
|
return GetID();
|
||||||
@ -114,9 +148,9 @@ void XCAFDoc_NoteBinData::Restore(const Handle(TDF_Attribute)& theAttr)
|
|||||||
Handle(XCAFDoc_NoteBinData) aMine = Handle(XCAFDoc_NoteBinData)::DownCast(theAttr);
|
Handle(XCAFDoc_NoteBinData) aMine = Handle(XCAFDoc_NoteBinData)::DownCast(theAttr);
|
||||||
if (!aMine.IsNull())
|
if (!aMine.IsNull())
|
||||||
{
|
{
|
||||||
myData = aMine->myData;
|
|
||||||
myTitle = aMine->myTitle;
|
myTitle = aMine->myTitle;
|
||||||
myMIMEtype = aMine->myMIMEtype;
|
myMIMEtype = aMine->myMIMEtype;
|
||||||
|
myData = aMine->myData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +161,7 @@ void XCAFDoc_NoteBinData::Paste(const Handle(TDF_Attribute)& theAttrInto,
|
|||||||
|
|
||||||
Handle(XCAFDoc_NoteBinData) aMine = Handle(XCAFDoc_NoteBinData)::DownCast(theAttrInto);
|
Handle(XCAFDoc_NoteBinData) aMine = Handle(XCAFDoc_NoteBinData)::DownCast(theAttrInto);
|
||||||
if (!aMine.IsNull())
|
if (!aMine.IsNull())
|
||||||
aMine->Set(myTitle, myData, myMIMEtype);
|
aMine->Set(myTitle, myMIMEtype, myData);
|
||||||
}
|
}
|
||||||
|
|
||||||
Standard_OStream& XCAFDoc_NoteBinData::Dump(Standard_OStream& theOS) const
|
Standard_OStream& XCAFDoc_NoteBinData::Dump(Standard_OStream& theOS) const
|
||||||
@ -136,8 +170,12 @@ Standard_OStream& XCAFDoc_NoteBinData::Dump(Standard_OStream& theOS) const
|
|||||||
theOS << "\n"
|
theOS << "\n"
|
||||||
<< "Title : " << (!myTitle.IsEmpty() ? myMIMEtype : "<untitled>") << "\n"
|
<< "Title : " << (!myTitle.IsEmpty() ? myMIMEtype : "<untitled>") << "\n"
|
||||||
<< "MIME type : " << (!myMIMEtype.IsEmpty() ? myMIMEtype : "<none>") << "\n"
|
<< "MIME type : " << (!myMIMEtype.IsEmpty() ? myMIMEtype : "<none>") << "\n"
|
||||||
<< "Size : " << myData.Length() << " bytes" << "\n"
|
<< "Size : " << Size() << " bytes" << "\n"
|
||||||
<< myData
|
|
||||||
;
|
;
|
||||||
|
if (!myData.IsNull())
|
||||||
|
{
|
||||||
|
for (Standard_Integer i = myData->Lower(); i <= myData->Upper(); ++i)
|
||||||
|
theOS << myData->Value(i);
|
||||||
|
}
|
||||||
return theOS;
|
return theOS;
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,11 @@
|
|||||||
#define _XCAFDoc_NoteBinData_HeaderFile
|
#define _XCAFDoc_NoteBinData_HeaderFile
|
||||||
|
|
||||||
#include <XCAFDoc_Note.hxx>
|
#include <XCAFDoc_Note.hxx>
|
||||||
|
#include <TColStd_HArray1OfByte.hxx>
|
||||||
|
#include <TCollection_AsciiString.hxx>
|
||||||
|
#include <TCollection_ExtendedString.hxx>
|
||||||
|
|
||||||
class OSD_File;
|
class OSD_File;
|
||||||
class TCollection_AsciiString;
|
|
||||||
class TCollection_ExtendedString;
|
|
||||||
|
|
||||||
class XCAFDoc_NoteBinData;
|
class XCAFDoc_NoteBinData;
|
||||||
DEFINE_STANDARD_HANDLE(XCAFDoc_NoteBinData, XCAFDoc_Note)
|
DEFINE_STANDARD_HANDLE(XCAFDoc_NoteBinData, XCAFDoc_Note)
|
||||||
@ -39,23 +40,33 @@ public:
|
|||||||
const TCollection_ExtendedString& theUserName,
|
const TCollection_ExtendedString& theUserName,
|
||||||
const TCollection_ExtendedString& theTimeStamp,
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
const TCollection_ExtendedString& theTitle,
|
const TCollection_ExtendedString& theTitle,
|
||||||
OSD_File& theFile,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype);
|
OSD_File& theFile);
|
||||||
|
|
||||||
|
Standard_EXPORT static Handle(XCAFDoc_NoteBinData) Set(const TDF_Label& theLabel,
|
||||||
|
const TCollection_ExtendedString& theUserName,
|
||||||
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
|
const TCollection_ExtendedString& theTitle,
|
||||||
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
|
const Handle(TColStd_HArray1OfByte)& theData);
|
||||||
|
|
||||||
Standard_EXPORT XCAFDoc_NoteBinData();
|
Standard_EXPORT XCAFDoc_NoteBinData();
|
||||||
|
|
||||||
Standard_EXPORT void Set(const TCollection_ExtendedString& theTitle,
|
Standard_EXPORT Standard_Boolean Set(const TCollection_ExtendedString& theTitle,
|
||||||
OSD_File& theFile,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype);
|
OSD_File& theFile);
|
||||||
|
|
||||||
Standard_EXPORT void Set(const TCollection_ExtendedString& theTitle,
|
Standard_EXPORT void Set(const TCollection_ExtendedString& theTitle,
|
||||||
const TCollection_AsciiString& theData,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype);
|
const Handle(TColStd_HArray1OfByte)& theData);
|
||||||
|
|
||||||
Standard_EXPORT const TCollection_ExtendedString& Title() const;
|
Standard_EXPORT const TCollection_ExtendedString& Title() const;
|
||||||
Standard_EXPORT const TCollection_AsciiString& Data() const;
|
|
||||||
Standard_EXPORT const TCollection_AsciiString& MIMEtype() const;
|
Standard_EXPORT const TCollection_AsciiString& MIMEtype() const;
|
||||||
|
|
||||||
|
Standard_EXPORT Standard_Integer Size() const;
|
||||||
|
|
||||||
|
Standard_EXPORT const Handle(TColStd_HArray1OfByte)& Data() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Standard_EXPORT const Standard_GUID& ID() const Standard_OVERRIDE;
|
Standard_EXPORT const Standard_GUID& ID() const Standard_OVERRIDE;
|
||||||
@ -71,9 +82,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
TCollection_ExtendedString myTitle;
|
TCollection_ExtendedString myTitle;
|
||||||
TCollection_AsciiString myData;
|
TCollection_AsciiString myMIMEtype;
|
||||||
TCollection_AsciiString myMIMEtype;
|
Handle(TColStd_HArray1OfByte) myData;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _XCAFDoc_NoteBinData_HeaderFile
|
#endif // _XCAFDoc_NoteBinData_HeaderFile
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
// commercial license or contractual agreement.
|
// commercial license or contractual agreement.
|
||||||
|
|
||||||
#include <Standard_GUID.hxx>
|
#include <Standard_GUID.hxx>
|
||||||
|
#include <TColStd_HArray1OfByte.hxx>
|
||||||
#include <TDF_Label.hxx>
|
#include <TDF_Label.hxx>
|
||||||
#include <TDF_ChildIterator.hxx>
|
#include <TDF_ChildIterator.hxx>
|
||||||
#include <TDF_LabelSequence.hxx>
|
#include <TDF_LabelSequence.hxx>
|
||||||
@ -88,13 +89,26 @@ Handle(XCAFDoc_Note)
|
|||||||
XCAFDoc_NotesTool::AddBinData(const TCollection_ExtendedString& theUserName,
|
XCAFDoc_NotesTool::AddBinData(const TCollection_ExtendedString& theUserName,
|
||||||
const TCollection_ExtendedString& theTimeStamp,
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
const TCollection_ExtendedString& theTitle,
|
const TCollection_ExtendedString& theTitle,
|
||||||
OSD_File& theFile,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype)
|
OSD_File& theFile)
|
||||||
{
|
{
|
||||||
TDF_Label aNoteLabel;
|
TDF_Label aNoteLabel;
|
||||||
TDF_TagSource aTag;
|
TDF_TagSource aTag;
|
||||||
aNoteLabel = aTag.NewChild(Label());
|
aNoteLabel = aTag.NewChild(Label());
|
||||||
return XCAFDoc_NoteBinData::Set(aNoteLabel, theUserName, theTimeStamp, theTitle, theFile, theMIMEtype);
|
return XCAFDoc_NoteBinData::Set(aNoteLabel, theUserName, theTimeStamp, theTitle, theMIMEtype, theFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle(XCAFDoc_Note)
|
||||||
|
XCAFDoc_NotesTool::AddBinData(const TCollection_ExtendedString& theUserName,
|
||||||
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
|
const TCollection_ExtendedString& theTitle,
|
||||||
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
|
const Handle(TColStd_HArray1OfByte)& theData)
|
||||||
|
{
|
||||||
|
TDF_Label aNoteLabel;
|
||||||
|
TDF_TagSource aTag;
|
||||||
|
aNoteLabel = aTag.NewChild(Label());
|
||||||
|
return XCAFDoc_NoteBinData::Set(aNoteLabel, theUserName, theTimeStamp, theTitle, theMIMEtype, theData);
|
||||||
}
|
}
|
||||||
|
|
||||||
Standard_Boolean XCAFDoc_NotesTool::HasAttachedNotes(const TDF_Label& theLabel) const
|
Standard_Boolean XCAFDoc_NotesTool::HasAttachedNotes(const TDF_Label& theLabel) const
|
||||||
|
@ -25,6 +25,7 @@ class OSD_File;
|
|||||||
class Standard_GUID;
|
class Standard_GUID;
|
||||||
class TCollection_AsciiString;
|
class TCollection_AsciiString;
|
||||||
class TCollection_ExtendedString;
|
class TCollection_ExtendedString;
|
||||||
|
class TColStd_HArray1OfByte;
|
||||||
class TDF_RelocationTable;
|
class TDF_RelocationTable;
|
||||||
class XCAFDoc_Note;
|
class XCAFDoc_Note;
|
||||||
|
|
||||||
@ -54,8 +55,14 @@ public:
|
|||||||
Standard_EXPORT Handle(XCAFDoc_Note) AddBinData(const TCollection_ExtendedString& theUserName,
|
Standard_EXPORT Handle(XCAFDoc_Note) AddBinData(const TCollection_ExtendedString& theUserName,
|
||||||
const TCollection_ExtendedString& theTimeStamp,
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
const TCollection_ExtendedString& theTitle,
|
const TCollection_ExtendedString& theTitle,
|
||||||
OSD_File& theFile,
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
const TCollection_AsciiString& theMIMEtype);
|
OSD_File& theFile);
|
||||||
|
|
||||||
|
Standard_EXPORT Handle(XCAFDoc_Note) AddBinData(const TCollection_ExtendedString& theUserName,
|
||||||
|
const TCollection_ExtendedString& theTimeStamp,
|
||||||
|
const TCollection_ExtendedString& theTitle,
|
||||||
|
const TCollection_AsciiString& theMIMEtype,
|
||||||
|
const Handle(TColStd_HArray1OfByte)& theData);
|
||||||
|
|
||||||
Standard_EXPORT Standard_Boolean HasAttachedNotes(const TDF_Label& theLabel) const;
|
Standard_EXPORT Standard_Boolean HasAttachedNotes(const TDF_Label& theLabel) const;
|
||||||
|
|
||||||
|
@ -17,13 +17,15 @@
|
|||||||
#include <Standard_Type.hxx>
|
#include <Standard_Type.hxx>
|
||||||
#include <TDF_Attribute.hxx>
|
#include <TDF_Attribute.hxx>
|
||||||
#include <XCAFDoc_NoteBinData.hxx>
|
#include <XCAFDoc_NoteBinData.hxx>
|
||||||
|
#include <XmlObjMgt.hxx>
|
||||||
#include <XmlMXCAFDoc_NoteBinDataDriver.hxx>
|
#include <XmlMXCAFDoc_NoteBinDataDriver.hxx>
|
||||||
#include <XmlObjMgt_Persistent.hxx>
|
#include <XmlObjMgt_Persistent.hxx>
|
||||||
|
#include <LDOM_OSStream.hxx>
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(XmlMXCAFDoc_NoteBinDataDriver, XmlMXCAFDoc_NoteDriver)
|
IMPLEMENT_STANDARD_RTTIEXT(XmlMXCAFDoc_NoteBinDataDriver, XmlMXCAFDoc_NoteDriver)
|
||||||
IMPLEMENT_DOMSTRING(Title, "title")
|
IMPLEMENT_DOMSTRING(Title, "title")
|
||||||
IMPLEMENT_DOMSTRING(MIMEtype, "mime_type")
|
IMPLEMENT_DOMSTRING(MIMEtype, "mime_type")
|
||||||
IMPLEMENT_DOMSTRING(Data, "data")
|
IMPLEMENT_DOMSTRING(Size, "size")
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function :
|
//function :
|
||||||
@ -57,15 +59,30 @@ Standard_Boolean XmlMXCAFDoc_NoteBinDataDriver::Paste(const XmlObjMgt_Persistent
|
|||||||
|
|
||||||
XmlObjMgt_DOMString aTitle = anElement.getAttribute(::Title());
|
XmlObjMgt_DOMString aTitle = anElement.getAttribute(::Title());
|
||||||
XmlObjMgt_DOMString aMIMEtype = anElement.getAttribute(::MIMEtype());
|
XmlObjMgt_DOMString aMIMEtype = anElement.getAttribute(::MIMEtype());
|
||||||
XmlObjMgt_DOMString aData = anElement.getAttribute(::Data());
|
XmlObjMgt_DOMString aSize = anElement.getAttribute(::Size());
|
||||||
if (aTitle == NULL || aMIMEtype == NULL || aData == NULL)
|
if (aTitle == NULL || aMIMEtype == NULL || aSize == NULL)
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
|
||||||
Handle(XCAFDoc_NoteBinData) aNote = Handle(XCAFDoc_NoteBinData)::DownCast(theTarget);
|
Handle(XCAFDoc_NoteBinData) aNote = Handle(XCAFDoc_NoteBinData)::DownCast(theTarget);
|
||||||
if (aNote.IsNull())
|
if (aNote.IsNull())
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
|
||||||
aNote->Set(aTitle.GetString(), aData.GetString(), aMIMEtype.GetString());
|
Standard_Integer nbSize = 0;
|
||||||
|
if (!aSize.GetInteger(nbSize))
|
||||||
|
return Standard_False;
|
||||||
|
|
||||||
|
XmlObjMgt_DOMString aDataStr = XmlObjMgt::GetStringValue(theSource);
|
||||||
|
Standard_SStream anSS(aDataStr.GetString());
|
||||||
|
|
||||||
|
Handle(TColStd_HArray1OfByte) aData = new TColStd_HArray1OfByte(1, nbSize);
|
||||||
|
for (Standard_Integer i = 1; i <= nbSize; ++i)
|
||||||
|
{
|
||||||
|
Standard_Byte aValue;
|
||||||
|
anSS >> aValue;
|
||||||
|
aData->ChangeValue(i) = aValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
aNote->Set(aTitle.GetString(), aMIMEtype.GetString(), aData);
|
||||||
|
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
@ -84,9 +101,21 @@ void XmlMXCAFDoc_NoteBinDataDriver::Paste(const Handle(TDF_Attribute)& theSource
|
|||||||
|
|
||||||
XmlObjMgt_DOMString aTitle(TCollection_AsciiString(aNote->Title()).ToCString());
|
XmlObjMgt_DOMString aTitle(TCollection_AsciiString(aNote->Title()).ToCString());
|
||||||
XmlObjMgt_DOMString aMIMEtype(aNote->MIMEtype().ToCString());
|
XmlObjMgt_DOMString aMIMEtype(aNote->MIMEtype().ToCString());
|
||||||
XmlObjMgt_DOMString aData(aNote->Data().ToCString());
|
|
||||||
|
|
||||||
theTarget.Element().setAttribute(::Title(), aTitle);
|
theTarget.Element().setAttribute(::Title(), aTitle);
|
||||||
theTarget.Element().setAttribute(::MIMEtype(), aMIMEtype);
|
theTarget.Element().setAttribute(::MIMEtype(), aMIMEtype);
|
||||||
theTarget.Element().setAttribute(::Data(), aData);
|
theTarget.Element().setAttribute(::Size(), aNote->Size());
|
||||||
|
|
||||||
|
if (aNote->Size() > 0)
|
||||||
|
{
|
||||||
|
const Handle(TColStd_HArray1OfByte)& aData = aNote->Data();
|
||||||
|
LDOM_OSStream anOSS(aNote->Size());
|
||||||
|
for (Standard_Integer i = aData->Lower(); i <= aData->Upper(); ++i)
|
||||||
|
{
|
||||||
|
anOSS << std::hex << aData->Value(i);
|
||||||
|
}
|
||||||
|
Standard_Character* dump = (Standard_Character*)anOSS.str(); // copying! Don't forget to delete it.
|
||||||
|
XmlObjMgt::SetStringValue(theTarget, dump, Standard_True);
|
||||||
|
delete[] dump;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user