-// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// function : GEOM_Gen_i()
// purpose : constructor to be called for servant creation.
//============================================================================
-GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa,
- PortableServer::ObjectId * contId,
- const char *instanceName,
- const char *interfaceName) :
+GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ PortableServer::ObjectId* contId,
+ const char* instanceName,
+ const char* interfaceName) :
Engines_Component_i(orb, poa, contId, instanceName, interfaceName)
{
_thisObj = this;
// purpose :
//============================================================================
char* GEOM_Gen_i::IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
- const char* IORString,
- CORBA::Boolean isMultiFile,
- CORBA::Boolean isASCII)
+ const char* IORString,
+ CORBA::Boolean isMultiFile,
+ CORBA::Boolean isASCII)
{
GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow(_orb->string_to_object(IORString));
if (!CORBA::is_nil(anObject)) {
// : The IOR (IORName) of object created is returned
//============================================================================
char* GEOM_Gen_i::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
- const char* aLocalPersistentID,
- CORBA::Boolean isMultiFile,
- CORBA::Boolean isASCII)
+ const char* aLocalPersistentID,
+ CORBA::Boolean isMultiFile,
+ CORBA::Boolean isASCII)
{
SALOMEDS::Study_var aStudy = theSObject->GetStudy();
// purpose :
//============================================================================
SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
- SALOMEDS::SObject_ptr theSObject,
- CORBA::Object_ptr theObject,
- const char* theName) throw (SALOME::SALOME_Exception)
+ SALOMEDS::SObject_ptr theSObject,
+ CORBA::Object_ptr theObject,
+ const char* theName) throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
SALOMEDS::SObject_var aResultSO;
} else if ( aShape->GetType() == GEOM_MARKER ) {
aPixmap->SetPixMap( "ICON_OBJBROWSER_LCS" );
aShapeName = "LocalCS_";
+ } else if ( aShape->GetType() > ADVANCED_BASE ) {
+ char buf[20];
+ sprintf( buf, "%d", aShape->GetType() );
+ std::string advId = "ICON_OBJBROWSER_ADVANCED_"; advId += buf;
+ aPixmap->SetPixMap( advId.c_str() );
+ aShapeName = "Advanced_";
} else if ( aShape->GetShapeType() == GEOM::COMPOUND ) {
aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" );
aShapeName = "Compound_";
aPixmap->Destroy();
//if (strlen(theName) == 0) aShapeName += TCollection_AsciiString(aResultSO->Tag());
//else aShapeName = TCollection_AsciiString(CORBA::string_dup(theName));
-
+
// try to find existed name for current shape
bool HasName = false;
// recieve current TopoDS shape
SALOMEDS::SObject_var obj;
TCollection_AsciiString aNewShapeName;
do {
- aNewShapeName = aShapeName + TCollection_AsciiString(++i);
- obj = theStudy->FindObject( aNewShapeName.ToCString() );
+ aNewShapeName = aShapeName + TCollection_AsciiString(++i);
+ obj = theStudy->FindObject( aNewShapeName.ToCString() );
}
while ( !obj->_is_nil() );
aShapeName = aNewShapeName;
SALOMEDS::ListOfStrings aListOfVars = aSections[i];
for(int j = 0, m = aListOfVars.length(); j < m; j++) {
if(theStudy->IsVariable(aListOfVars[j].in()))
- aVars += TCollection_AsciiString(aListOfVars[j].in());
+ aVars += TCollection_AsciiString(aListOfVars[j].in());
if(j != m-1)
- aVars += ":";
+ aVars += ":";
}
if(i != n-1)
aVars += "|";
// purpose : auxilary for PublishNamedShapesInStudy
//============================================================================
void GEOM_Gen_i::CreateAndPublishGroup(SALOMEDS::Study_ptr theStudy,
- GEOM::GEOM_Object_var theMainShape,
- const TopTools_IndexedMapOfShape& anIndices,
- const TopTools_SequenceOfShape& SeqS,
- const TColStd_SequenceOfAsciiString& SeqN,
- const Standard_CString& GrName,
- GEOM::ListOfGO_var aResList)
+ GEOM::GEOM_Object_var theMainShape,
+ const TopTools_IndexedMapOfShape& anIndices,
+ const TopTools_SequenceOfShape& SeqS,
+ const TColStd_SequenceOfAsciiString& SeqN,
+ const Standard_CString& GrName,
+ GEOM::ListOfGO_var aResList)
{
CORBA::String_var entry = theMainShape->GetEntry();
Handle(GEOM_Object) aMainShape = _impl->GetObject(theMainShape->GetStudyID(), entry);
//============================================================================
GEOM::ListOfGO* GEOM_Gen_i::
PublishNamedShapesInStudy(SALOMEDS::Study_ptr theStudy,
- //SALOMEDS::SObject_ptr theSObject,
- CORBA::Object_ptr theObject)
+ //SALOMEDS::SObject_ptr theSObject,
+ CORBA::Object_ptr theObject)
{
//Unexpect aCatch(SALOME_SalomeException);
GEOM::ListOfGO_var aResList = new GEOM::ListOfGO;
if(L.FindAttribute(TDataStd_Name::GetID(),aName)) {
TCollection_ExtendedString EName = aName->Get();
if(S.ShapeType()==TopAbs_SOLID) {
- SolidSeqS.Append(S);
- SolidSeqN.Append(aName->Get());
+ SolidSeqS.Append(S);
+ SolidSeqN.Append(aName->Get());
}
else if(S.ShapeType()==TopAbs_FACE) {
- FaceSeqS.Append(S);
- FaceSeqN.Append(aName->Get());
+ FaceSeqS.Append(S);
+ FaceSeqN.Append(aName->Get());
}
else if(S.ShapeType()==TopAbs_EDGE) {
- EdgeSeqS.Append(S);
- EdgeSeqN.Append(aName->Get());
+ EdgeSeqS.Append(S);
+ EdgeSeqN.Append(aName->Get());
}
else if(S.ShapeType()==TopAbs_VERTEX) {
- VertSeqS.Append(S);
- VertSeqN.Append(aName->Get());
+ VertSeqS.Append(S);
+ VertSeqN.Append(aName->Get());
}
}
}
TopExp::MapShapes(MainSh, anIndices);
CreateAndPublishGroup(theStudy, theMainShape, anIndices, SolidSeqS, SolidSeqN,
- "Group_Of_Named_Solids", aResList);
+ "Group_Of_Named_Solids", aResList);
CreateAndPublishGroup(theStudy, theMainShape, anIndices, FaceSeqS, FaceSeqN,
- "Group_Of_Named_Faces", aResList);
+ "Group_Of_Named_Faces", aResList);
CreateAndPublishGroup(theStudy, theMainShape, anIndices, EdgeSeqS, EdgeSeqN,
- "Group_Of_Named_Edges", aResList);
+ "Group_Of_Named_Edges", aResList);
CreateAndPublishGroup(theStudy, theMainShape, anIndices, VertSeqS, VertSeqN,
- "Group_Of_Named_Vertices", aResList);
+ "Group_Of_Named_Vertices", aResList);
return aResList._retn();
}
// purpose : save OCAF/Geom document
//============================================================================
SALOMEDS::TMPFile* GEOM_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
- const char* theURL,
- bool isMultiFile) {
+ const char* theURL,
+ bool isMultiFile) {
SALOMEDS::TMPFile_var aStreamFile;
// Get a temporary directory to store a file
std::string aTmpDir = (isMultiFile)?theURL:SALOMEDS_Tool::GetTmpDir();
// purpose :
//============================================================================
SALOMEDS::TMPFile* GEOM_Gen_i::SaveASCII(SALOMEDS::SComponent_ptr theComponent,
- const char* theURL,
- bool isMultiFile) {
+ const char* theURL,
+ bool isMultiFile) {
SALOMEDS::TMPFile_var aStreamFile = Save(theComponent, theURL, isMultiFile);
return aStreamFile._retn();
}
// purpose :
//============================================================================
CORBA::Boolean GEOM_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
- const SALOMEDS::TMPFile& theStream,
- const char* theURL,
- bool isMultiFile) {
+ const SALOMEDS::TMPFile& theStream,
+ const char* theURL,
+ bool isMultiFile) {
if (theStream.length() <= 9) {
MESSAGE("The TMPFile is too short : " << theStream.length() << " bytes ");
// purpose :
//============================================================================
CORBA::Boolean GEOM_Gen_i::LoadASCII(SALOMEDS::SComponent_ptr theComponent,
- const SALOMEDS::TMPFile& theStream,
- const char* theURL,
- bool isMultiFile) {
+ const SALOMEDS::TMPFile& theStream,
+ const char* theURL,
+ bool isMultiFile) {
return Load(theComponent, theStream, theURL, isMultiFile);
}
// purpose :
//============================================================================
SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream,
- CORBA::Long theObjectID,
- SALOMEDS::SObject_ptr theObject) {
+ CORBA::Long theObjectID,
+ SALOMEDS::SObject_ptr theObject) {
// Find the current Study and StudyBuilder
SALOMEDS::Study_var aStudy = theObject->GetStudy();
SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
// Retrieve a TopoDS_Shape from byte stream
TopoDS_Shape aTopology;
- istrstream aStreamedBrep((char*) &theStream[0], theStream.length());
+ std::istrstream aStreamedBrep((char*) &theStream[0], theStream.length());
BRep_Builder aBuilder;
try {
BRepTools::Read(aTopology, aStreamedBrep, aBuilder);
// purpose :
//============================================================================
SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy,
- GEOM::GEOM_Object_ptr theObject,
- const char* theName,
- GEOM::GEOM_Object_ptr theFather)
+ GEOM::GEOM_Object_ptr theObject,
+ const char* theName,
+ GEOM::GEOM_Object_ptr theFather)
{
SALOMEDS::SObject_var aResultSO;
if(theObject->_is_nil() || theStudy->_is_nil()) return aResultSO;
// To be used from python scripts out of geompy.addToStudy (non-default usage)
//============================================================================
GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesO (SALOMEDS::Study_ptr theStudy,
- GEOM::GEOM_Object_ptr theObject,
+ GEOM::GEOM_Object_ptr theObject,
const GEOM::ListOfGO& theArgs,
GEOM::find_shape_method theFindMethod,
- CORBA::Boolean theInheritFirstArg)
+ CORBA::Boolean theInheritFirstArg,
+ CORBA::Boolean theAddPrefix)
{
GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
if (CORBA::is_nil(theStudy) || CORBA::is_nil(theObject))
// if (CORBA::is_nil(aSO))
// return aParts._retn();
- aParts = RestoreSubShapes(theStudy, theObject, aSO, theArgs, theFindMethod, theInheritFirstArg);
- aSO->Destroy();
+ aParts = RestoreSubShapes(theStudy, theObject, aSO, theArgs,
+ theFindMethod, theInheritFirstArg, theAddPrefix);
+ if (!CORBA::is_nil(aSO)) aSO->Destroy();
return aParts._retn();
}
// purpose : Publish sub-shapes, standing for arguments and sub-shapes of arguments.
// To be used from GUI and from geompy.addToStudy
//============================================================================
-GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesSO (SALOMEDS::Study_ptr theStudy,
- SALOMEDS::SObject_ptr theSObject,
- const GEOM::ListOfGO& theArgs,
- GEOM::find_shape_method theFindMethod,
- CORBA::Boolean theInheritFirstArg)
+GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesSO (SALOMEDS::Study_ptr theStudy,
+ SALOMEDS::SObject_ptr theSObject,
+ const GEOM::ListOfGO& theArgs,
+ GEOM::find_shape_method theFindMethod,
+ CORBA::Boolean theInheritFirstArg,
+ CORBA::Boolean theAddPrefix)
{
GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
if (CORBA::is_nil(theStudy) || CORBA::is_nil(theSObject))
if (CORBA::is_nil(anO))
return aParts._retn();
- aParts = RestoreSubShapes(theStudy, anO, theSObject, theArgs, theFindMethod, theInheritFirstArg);
+ aParts = RestoreSubShapes(theStudy, anO, theSObject, theArgs,
+ theFindMethod, theInheritFirstArg, theAddPrefix);
return aParts._retn();
}
// are defined, and does not check, if they correspond to each other.
//============================================================================
GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr theStudy,
- GEOM::GEOM_Object_ptr theObject,
- SALOMEDS::SObject_ptr theSObject,
- const GEOM::ListOfGO& theArgs,
- GEOM::find_shape_method theFindMethod,
- CORBA::Boolean theInheritFirstArg)
+ GEOM::GEOM_Object_ptr theObject,
+ SALOMEDS::SObject_ptr theSObject,
+ const GEOM::ListOfGO& theArgs,
+ GEOM::find_shape_method theFindMethod,
+ CORBA::Boolean theInheritFirstArg,
+ CORBA::Boolean theAddPrefix)
{
GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
//PTv, IMP 0020001, The salome object <theSObject>
CORBA::String_var anIOR = _orb->object_to_string(aList[0]);
SALOMEDS::SObject_var anArgSO = theStudy->FindObjectIOR(anIOR.in());
- aParts = RestoreSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject, theFindMethod);
+ aParts = RestoreSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject, theFindMethod, theAddPrefix);
// set the color of the transformed shape to the color of initial shape
theObject->SetColor(aList[0]->GetColor());
+ // set the texture
+ if (theObject->GetShapeType() == GEOM::VERTEX) {
+ theObject->SetMarkerStd(aList[0]->GetMarkerType(), aList[0]->GetMarkerSize());
+ if (aList[0]->GetMarkerType() == GEOM::MT_USER)
+ theObject->SetMarkerTexture(aList[0]->GetMarkerTexture());
+ }
+
anArgSO->Destroy();
}
else {
// Publish the sub-shape
SALOMEDS::SObject_var aSubSO;
if (!CORBA::is_nil(theSObject)) {
- TCollection_AsciiString aSubName ("from_");
+ TCollection_AsciiString aSubName;
+ if (theAddPrefix) {
+ aSubName = "from_";
+ }
aSubName += anArgName;
aSubSO = aStudyBuilder->NewObject(theSObject);
aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString());
// Restore color
aSubO->SetColor(anArgO->GetColor());
+ // set the texture
+ if (aSubO->GetShapeType() == GEOM::VERTEX) {
+ aSubO->SetMarkerStd(anArgO->GetMarkerType(), anArgO->GetMarkerSize());
+ if (anArgO->GetMarkerType() == GEOM::MT_USER)
+ aSubO->SetMarkerTexture(anArgO->GetMarkerTexture());
+ }
}
if (!CORBA::is_nil(anArgSO)) {
GEOM::ListOfGO_var aSubParts;
if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
// pass theObject, because only it has the history
- aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, theObject, theFindMethod);
+ aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO,
+ theObject, theFindMethod, theAddPrefix);
else
- aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, aSubO, theFindMethod);
+ aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO,
+ aSubO, theFindMethod, theAddPrefix);
// add to parts list
addToListOfGO( aSubParts, aParts );
}
// Restore published sub-shapes of the argument
GEOM::ListOfGO_var aSubParts =
- RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, theObject, theFindMethod);
+ RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO,
+ theObject, theFindMethod, theAddPrefix);
// add to parts list
addToListOfGO( aSubParts, aParts );
}
if (!CORBA::is_nil(aSubO) && !CORBA::is_nil(aSubSO)) {
// Publish the sub-shape
- TCollection_AsciiString aSubName ("from_parts_of_");
+ TCollection_AsciiString aSubName;
+ if (theAddPrefix) {
+ aSubName = "from_parts_of_";
+ }
aSubName += anArgName;
aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString());
// Restore color
aSubO->SetColor(anArgO->GetColor());
+ // set the texture
+ if (aSubO->GetShapeType() == GEOM::VERTEX) {
+ aSubO->SetMarkerStd(anArgO->GetMarkerType(), anArgO->GetMarkerSize());
+ if (anArgO->GetMarkerType() == GEOM::MT_USER)
+ aSubO->SetMarkerTexture(anArgO->GetMarkerTexture());
+ }
}
}
else if (!CORBA::is_nil(aSubSO)) {
}
} // process arguments
}
- set<string> anObjEntryMap;
- GEOM::ListOfGO_var aResParts = new GEOM::ListOfGO;
- int nbRes = 0;
- int nb = aParts->length();
- aResParts->length(nb);
- if (nb > 0)
- {
+ std::set<std::string> anObjEntryMap;
+ GEOM::ListOfGO_var aResParts = new GEOM::ListOfGO;
+ int nbRes = 0;
+ int nb = aParts->length();
+ aResParts->length(nb);
+ if (nb > 0)
+ {
Handle(GEOM_Object) aMainObj = _impl->GetObject(theObject->GetStudyID(), theObject->GetEntry());
Handle(GEOM_Function) aFunction = aMainObj->GetLastFunction();
GEOM::TPythonDump pd (aFunction, true);
default:
pd << "FSM_GetInPlaceByHistory"; break;
}
- pd << ", " << theInheritFirstArg << ")";
+ pd << ", " << theInheritFirstArg << ", " << theAddPrefix << ")";
}
aResParts->length(nbRes);
return aResParts._retn();
// purpose : Private method
//============================================================================
GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr theStudy,
- SALOMEDS::SObject_ptr theOldSO,
- SALOMEDS::SObject_ptr theNewSO,
- GEOM::GEOM_Object_ptr theNewO,
- GEOM::find_shape_method theFindMethod)
+ SALOMEDS::SObject_ptr theOldSO,
+ SALOMEDS::SObject_ptr theNewSO,
+ GEOM::GEOM_Object_ptr theNewO,
+ GEOM::find_shape_method theFindMethod,
+ CORBA::Boolean theAddPrefix)
{
int i = 0;
GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
if (anOldSubSO->FindAttribute(anAttr, "AttributeIOR")) {
SALOMEDS::AttributeIOR_var anAttrIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
GEOM::GEOM_Object_var anOldSubO =
- GEOM::GEOM_Object::_narrow(_orb->string_to_object(anAttrIOR->Value()));
+ GEOM::GEOM_Object::_narrow(_orb->string_to_object(anAttrIOR->Value()));
if (!CORBA::is_nil(anOldSubO)) {
- // Find a sub-shape of theNewO in place of anOldSubO
- GEOM::GEOM_Object_var aNewSubO;
- switch (theFindMethod) {
- case GEOM::FSM_GetInPlace:
- {
- // Use GetInPlace
- aNewSubO = aShapesOp->GetInPlace(theNewO, anOldSubO);
- }
- break;
- case GEOM::FSM_Transformed:
- {
- // transformation, cannot use GetInPlace, operate with indices
- GEOM::ListOfLong_var anIDs = anOldSubO->GetSubShapeIndices();
- if (anIDs->length() > 1) {
- // group
- aNewSubO = aGroupOp->CreateGroup(theNewO, aGroupOp->GetType(anOldSubO));
- if (!CORBA::is_nil(aNewSubO))
- aGroupOp->UnionIDs(aNewSubO, anIDs);
- }
- else {
- // single sub-shape
- aNewSubO = aShapesOp->GetSubShape(theNewO, anIDs[0]);
- }
- }
- break;
- case GEOM::FSM_GetSame:
- {
- // Use GetSame
- aNewSubO = aShapesOp->GetSame(theNewO, anOldSubO);
- }
- break;
- case GEOM::FSM_GetShapesOnShape:
- {
- // Use GetShapesOnShape. Can work only on solids, so it has sense to search only solids
- aNewSubO = aShapesOp->GetShapesOnShapeAsCompound(anOldSubO, theNewO,
- (short)GEOM::SOLID, GEOM::ST_ONIN);
- }
- break;
- case GEOM::FSM_GetInPlaceByHistory:
- {
- // Use GetInPlaceByHistory
- aNewSubO = aShapesOp->GetInPlaceByHistory(theNewO, anOldSubO);
- }
- break;
- default:
- {}
- }
-
- if (!CORBA::is_nil(aNewSubO)) {
- // add the part to the list
- aParts[i] = aNewSubO;
- i++;
+ // Find a sub-shape of theNewO in place of anOldSubO
+ GEOM::GEOM_Object_var aNewSubO;
+ switch (theFindMethod) {
+ case GEOM::FSM_GetInPlace:
+ {
+ // Use GetInPlace
+ aNewSubO = aShapesOp->GetInPlace(theNewO, anOldSubO);
+ }
+ break;
+ case GEOM::FSM_Transformed:
+ {
+ // transformation, cannot use GetInPlace, operate with indices
+ GEOM::ListOfLong_var anIDs = anOldSubO->GetSubShapeIndices();
+ if (anIDs->length() > 1) {
+ // group
+ aNewSubO = aGroupOp->CreateGroup(theNewO, aGroupOp->GetType(anOldSubO));
+ if (!CORBA::is_nil(aNewSubO))
+ aGroupOp->UnionIDs(aNewSubO, anIDs);
+ }
+ else {
+ // single sub-shape
+ aNewSubO = aShapesOp->GetSubShape(theNewO, anIDs[0]);
+ }
+ }
+ break;
+ case GEOM::FSM_GetSame:
+ {
+ // Use GetSame
+ aNewSubO = aShapesOp->GetSame(theNewO, anOldSubO);
+ }
+ break;
+ case GEOM::FSM_GetShapesOnShape:
+ {
+ // Use GetShapesOnShape. Can work only on solids, so it has sense to search only solids
+ aNewSubO = aShapesOp->GetShapesOnShapeAsCompound(anOldSubO, theNewO,
+ (short)GEOM::SOLID, GEOM::ST_ONIN);
+ }
+ break;
+ case GEOM::FSM_GetInPlaceByHistory:
+ {
+ // Use GetInPlaceByHistory
+ aNewSubO = aShapesOp->GetInPlaceByHistory(theNewO, anOldSubO);
+ }
+ break;
+ default:
+ {}
+ }
+
+ if (!CORBA::is_nil(aNewSubO)) {
+ // add the part to the list
+ aParts[i] = aNewSubO;
+ i++;
// add to parts list
addToListOfGO( aNewSubO, aNewParts );
SALOMEDS::SObject_var aNewSubSO;
if (!CORBA::is_nil(theNewSO)) {
- // Publish the sub-shape
- TCollection_AsciiString aSubName ("from_");
- aSubName += anArgName;
- aNewSubSO = aStudyBuilder->NewObject(theNewSO);
- aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
- // Restore color
- aNewSubO->SetColor(anOldSubO->GetColor());
+ // Publish the sub-shape
+ TCollection_AsciiString aSubName;
+ if (theAddPrefix) {
+ aSubName = "from_";
+ }
+ aSubName += anArgName;
+ aNewSubSO = aStudyBuilder->NewObject(theNewSO);
+ aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
+ // Restore color
+ aNewSubO->SetColor(anOldSubO->GetColor());
+ // set the texture
+ if (aNewSubO->GetShapeType() == GEOM::VERTEX) {
+ aNewSubO->SetMarkerStd(anOldSubO->GetMarkerType(), anOldSubO->GetMarkerSize());
+ if (anOldSubO->GetMarkerType() == GEOM::MT_USER)
+ aNewSubO->SetMarkerTexture(anOldSubO->GetMarkerTexture());
+ }
}
- // Restore published sub-shapes of the argument
- GEOM::ListOfGO_var aSubParts;
- if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
- // pass the main shape as Object, because only it has the history
- aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, theNewO, theFindMethod);
- else
- aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, aNewSubO, theFindMethod);
+ // Restore published sub-shapes of the argument
+ GEOM::ListOfGO_var aSubParts;
+ if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
+ // pass the main shape as Object, because only it has the history
+ aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+ theNewO, theFindMethod, theAddPrefix);
+ else
+ aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+ aNewSubO, theFindMethod, theAddPrefix);
// add to parts list
addToListOfGO( aSubParts, aNewParts );
- }
- else { // GetInPlace failed, try to build from published parts
- SALOMEDS::SObject_var aNewSubSO;
+ }
+ else { // GetInPlace failed, try to build from published parts
+ SALOMEDS::SObject_var aNewSubSO;
if (!CORBA::is_nil(theNewSO))
aNewSubSO = aStudyBuilder->NewObject(theNewSO);
- // Restore published sub-shapes of the argument
- GEOM::ListOfGO_var aSubParts =
- RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, theNewO, theFindMethod);
+ // Restore published sub-shapes of the argument
+ GEOM::ListOfGO_var aSubParts =
+ RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+ theNewO, theFindMethod, theAddPrefix);
// add to parts list
addToListOfGO( aSubParts, aNewParts );
- if (aSubParts->length() > 0) {
- // try to build an object from a set of its sub-shapes,
- // that published and will be reconstructed
- if (aSubParts->length() > 1) {
- aNewSubO = aShapesOp->MakeCompound(aSubParts);
+ if (aSubParts->length() > 0) {
+ // try to build an object from a set of its sub-shapes,
+ // that published and will be reconstructed
+ if (aSubParts->length() > 1) {
+ aNewSubO = aShapesOp->MakeCompound(aSubParts);
// add to parts list
addToListOfGO( aNewSubO, aNewParts );
- }
- else {
- aNewSubO = aSubParts[0];
- }
-
- if (!CORBA::is_nil(aNewSubO)) {
- // add the part to the list
- aSubParts[i] = aNewSubO;
- i++;
-
- // Publish the sub-shape
- if (!CORBA::is_nil(aNewSubSO)) {
- TCollection_AsciiString aSubName = "from_parts_of_";
- aSubName += anArgName;
- aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
- // Restore color
- aNewSubO->SetColor(anOldSubO->GetColor());
+ }
+ else {
+ aNewSubO = aSubParts[0];
+ }
+
+ if (!CORBA::is_nil(aNewSubO)) {
+ // add the part to the list
+ aSubParts[i] = aNewSubO;
+ i++;
+
+ // Publish the sub-shape
+ if (!CORBA::is_nil(aNewSubSO)) {
+ TCollection_AsciiString aSubName;
+ if (theAddPrefix) {
+ aSubName = "from_parts_of_";
+ }
+ aSubName += anArgName;
+ aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
+ // Restore color
+ aNewSubO->SetColor(anOldSubO->GetColor());
+ // set the texture
+ if (aNewSubO->GetShapeType() == GEOM::VERTEX) {
+ aNewSubO->SetMarkerStd(anOldSubO->GetMarkerType(), anOldSubO->GetMarkerSize());
+ if (anOldSubO->GetMarkerType() == GEOM::MT_USER)
+ aNewSubO->SetMarkerTexture(anOldSubO->GetMarkerTexture());
+ }
}
- }
- }
- else if (!CORBA::is_nil(aNewSubSO)) {
- // remove created aSubSO, because no parts have been found
- aStudyBuilder->RemoveObject(aNewSubSO);
- }
- } // try to build from published parts
+ }
+ }
+ else if (!CORBA::is_nil(aNewSubSO)) {
+ // remove created aSubSO, because no parts have been found
+ aStudyBuilder->RemoveObject(aNewSubSO);
+ }
+ } // try to build from published parts
}
}
} // iterate on published sub-shapes
return operations._retn();
}
+//============================================================================
+// function : GetIAdvancedOperations
+// purpose :
+//============================================================================
+GEOM::GEOM_IAdvancedOperations_ptr GEOM_Gen_i::GetIAdvancedOperations(CORBA::Long theStudyID)
+ throw ( SALOME::SALOME_Exception )
+{
+ Unexpect aCatch(SALOME_SalomeException);
+ MESSAGE( "GEOM_Gen_i::GetIAdvancedOperations" );
+
+ GEOM::GEOM_Gen_ptr engine = _this();
+
+ GEOM_IAdvancedOperations_i* aServant =
+ new GEOM_IAdvancedOperations_i(_poa, engine, _impl->GetIAdvancedOperations(theStudyID));
+
+ // activate the CORBA servant
+ GEOM::GEOM_IAdvancedOperations_var operations = aServant->_this();
+ return operations._retn();
+}
+
//=============================================================================
/*!
* AddSubShape
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Gen_i::AddSubShape (GEOM::GEOM_Object_ptr theMainShape,
- const GEOM::ListOfLong& theIndices)
+ const GEOM::ListOfLong& theIndices)
{
if (CORBA::is_nil(theMainShape) || theIndices.length() < 1)
return GEOM::GEOM_Object::_nil();
void GEOM_Gen_i::RemoveObject(GEOM::GEOM_Object_ptr theObject)
{
CORBA::String_var anEntry = theObject->GetEntry();
- Handle(GEOM_Object) anObject = _impl->GetObject(theObject->GetStudyID(), anEntry);
+ Handle(GEOM_Object) anObject = _impl->GetObject(theObject->GetStudyID(), anEntry, false);
if (anObject.IsNull()) return;
_impl->RemoveObject(anObject);
return;
char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry)
{
GEOM::GEOM_Object_var aGeomObject;
-
+
CORBA::Object_var aSMObject = name_service->Resolve( "/myStudyManager" );
SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow( aSMObject );
SALOMEDS::Study_var aStudy = aStudyManager->GetStudyByID( studyId );
}
if (!aSObj->_is_nil() )
aSObj->Destroy();
-
+
const char* aTypeInfo = "Object";
if ( !aGeomObject->_is_nil() ) {
GEOM::GEOM_IKindOfShape::shape_kind aKind;
if ( anOp->IsDone() ) {
switch ( aKind ) {
case GEOM::GEOM_IKindOfShape::COMPOUND:
- aTypeInfo = "Compound";
- break;
+ aTypeInfo = "Compound";
+ break;
case GEOM::GEOM_IKindOfShape::COMPSOLID:
- aTypeInfo = "CompSolid";
- break;
+ aTypeInfo = "CompSolid";
+ break;
case GEOM::GEOM_IKindOfShape::SHELL:
- aTypeInfo = "Shell";
- break;
+ aTypeInfo = "Shell";
+ break;
case GEOM::GEOM_IKindOfShape::WIRE:
- if ( anInts[0] == 1 )
- aTypeInfo = "Closed Wire";
- else if ( anInts[0] == 2 )
- aTypeInfo = "Opened Wire";
- else
- aTypeInfo = "Wire";
- break;
- // SOLIDs
+ if ( anInts[0] == 1 )
+ aTypeInfo = "Closed Wire";
+ else if ( anInts[0] == 2 )
+ aTypeInfo = "Opened Wire";
+ else
+ aTypeInfo = "Wire";
+ break;
+ // SOLIDs
case GEOM::GEOM_IKindOfShape::SPHERE:
- aTypeInfo = "Sphere";
- break;
+ aTypeInfo = "Sphere";
+ break;
case GEOM::GEOM_IKindOfShape::CYLINDER:
- aTypeInfo = "Cylinder";
- break;
+ aTypeInfo = "Cylinder";
+ break;
case GEOM::GEOM_IKindOfShape::BOX:
case GEOM::GEOM_IKindOfShape::ROTATED_BOX:
- aTypeInfo = "Box";
- break;
+ aTypeInfo = "Box";
+ break;
case GEOM::GEOM_IKindOfShape::TORUS:
- aTypeInfo = "Torus";
- break;
+ aTypeInfo = "Torus";
+ break;
case GEOM::GEOM_IKindOfShape::CONE:
- aTypeInfo = "Cone";
- break;
+ aTypeInfo = "Cone";
+ break;
case GEOM::GEOM_IKindOfShape::POLYHEDRON:
- aTypeInfo = "Polyhedron";
- break;
+ aTypeInfo = "Polyhedron";
+ break;
case GEOM::GEOM_IKindOfShape::SOLID:
- aTypeInfo = "Solid";
- break;
- // FACEs
+ aTypeInfo = "Solid";
+ break;
+ // FACEs
case GEOM::GEOM_IKindOfShape::SPHERE2D:
- aTypeInfo = "Spherical Face";
- break;
+ aTypeInfo = "Spherical Face";
+ break;
case GEOM::GEOM_IKindOfShape::CYLINDER2D:
- aTypeInfo = "Cylindrical Face";
- break;
+ aTypeInfo = "Cylindrical Face";
+ break;
case GEOM::GEOM_IKindOfShape::TORUS2D:
- aTypeInfo = "Toroidal Face";
- break;
+ aTypeInfo = "Toroidal Face";
+ break;
case GEOM::GEOM_IKindOfShape::CONE2D:
- aTypeInfo = "Conical Face";
- break;
+ aTypeInfo = "Conical Face";
+ break;
case GEOM::GEOM_IKindOfShape::DISK_CIRCLE:
- aTypeInfo = "Disk";
- break;
+ aTypeInfo = "Disk";
+ break;
case GEOM::GEOM_IKindOfShape::DISK_ELLIPSE:
- aTypeInfo = "Elliptical Face";
- break;
+ aTypeInfo = "Elliptical Face";
+ break;
case GEOM::GEOM_IKindOfShape::POLYGON:
- aTypeInfo = "Polygon";
- break;
+ aTypeInfo = "Polygon";
+ break;
case GEOM::GEOM_IKindOfShape::PLANE:
- aTypeInfo = "Plane";
- break;
+ aTypeInfo = "Plane";
+ break;
case GEOM::GEOM_IKindOfShape::PLANAR:
- aTypeInfo = "Planar Face";
- break;
+ aTypeInfo = "Planar Face";
+ break;
case GEOM::GEOM_IKindOfShape::FACE:
- aTypeInfo = "Face";
- break;
- // EDGEs
+ aTypeInfo = "Face";
+ break;
+ // EDGEs
case GEOM::GEOM_IKindOfShape::CIRCLE:
- aTypeInfo = "Circle";
- break;
+ aTypeInfo = "Circle";
+ break;
case GEOM::GEOM_IKindOfShape::ARC_CIRCLE:
- aTypeInfo = "Ark";
- break;
+ aTypeInfo = "Arc Circle";
+ break;
case GEOM::GEOM_IKindOfShape::ELLIPSE:
- aTypeInfo = "Ellipse";
- break;
+ aTypeInfo = "Ellipse";
+ break;
case GEOM::GEOM_IKindOfShape::ARC_ELLIPSE:
- aTypeInfo = "Arc Ellipse";
- break;
+ aTypeInfo = "Arc Ellipse";
+ break;
case GEOM::GEOM_IKindOfShape::LINE:
- aTypeInfo = "Line";
- break;
+ aTypeInfo = "Line";
+ break;
case GEOM::GEOM_IKindOfShape::SEGMENT:
- aTypeInfo = "Segment";
- break;
+ aTypeInfo = "Segment";
+ break;
case GEOM::GEOM_IKindOfShape::EDGE:
- aTypeInfo = "Edge";
- break;
+ aTypeInfo = "Edge";
+ break;
case GEOM::GEOM_IKindOfShape::VERTEX:
- aTypeInfo = "Vertex";
- break;
+ aTypeInfo = "Vertex";
+ break;
default:
- break;
+ break;
}
}
}
-
+
char* anInfo = new char[strlen("Module ") + strlen(ComponentDataType()) + strlen(", ") + strlen(aTypeInfo) + 3];
sprintf(anInfo, "Module %s, %s", ComponentDataType(), aTypeInfo);
-
+
char* ret = CORBA::string_dup(anInfo);
delete [] anInfo;
return ret;
//=====================================================================================
extern "C"
{
-PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB*, PortableServer::POA*, PortableServer::ObjectId*, const char*, const char*);
-
-GEOM_I_EXPORT
- PortableServer::ObjectId * GEOMEngine_factory(CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa,
- PortableServer::ObjectId * contId,
- const char *instanceName,
- const char * interfaceName)
+ /*
+ GEOM_I_EXPORT
+ PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB*, PortableServer::POA*, PortableServer::ObjectId*, const char*, const char*);
+ */
+
+ GEOM_I_EXPORT
+ PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ PortableServer::ObjectId* contId,
+ const char* instanceName,
+ const char* interfaceName)
{
- GEOM_Gen_i * myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName);
- // Don't understand the reason of this register ????
-// myGEOM_Gen_i->register_name("/myGEOM_Gen"); // NRI : 11/07/2002 : Add for Supervision example
- return myGEOM_Gen_i->getId();
+ GEOM_Gen_i* myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName);
+ return myGEOM_Gen_i->getId();
}
}