本文整理汇总了C++中TopoDS_Shape::Nullify方法的典型用法代码示例。如果您正苦于以下问题:C++ TopoDS_Shape::Nullify方法的具体用法?C++ TopoDS_Shape::Nullify怎么用?C++ TopoDS_Shape::Nullify使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TopoDS_Shape
的用法示例。
在下文中一共展示了TopoDS_Shape::Nullify方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ReadSTEP
IFSelect_ReturnStatus GeomImportExport::ReadSTEP(const QString& aFileName,
TopoDS_Shape& aSequenceOfShape)
{
TopoDS_Shape aShape;
TopoDS_Compound comp;
BRep_Builder builder;
builder.MakeCompound( comp );
STEPControl_Reader aReader;
IFSelect_ReturnStatus status = aReader.ReadFile(aFileName.toAscii().data());
if (status == IFSelect_RetDone)
{
Standard_CString LogFileName = "ReadStepFile.log";
Interface_TraceFile::SetDefault(2,LogFileName,Standard_True);
Standard_Boolean failsonly = Standard_False;
aReader.PrintCheckLoad
(failsonly, IFSelect_ItemsByEntity);
// Root transfers
Standard_Integer nbr = aReader.NbRootsForTransfer();
aReader.PrintCheckTransfer (failsonly, IFSelect_ItemsByEntity);
for ( Standard_Integer n = 1; n<= nbr; n++)
{
Standard_Boolean ok = aReader.TransferRoot(n);
// Collecting resulting entities
Standard_Integer nbs = aReader.NbShapes();
if (nbs == 0)
{
aSequenceOfShape.Nullify();
return IFSelect_RetVoid;
} else
{
for (Standard_Integer i =1; i<=nbs; i++)
{
aShape=aReader.Shape(i);
builder.Add( comp, aShape );
}
}
}
}
else{
aSequenceOfShape.Nullify();
}
aSequenceOfShape = comp;
return status;
}
示例2: removeFaces
Standard_Boolean ShHealOper_RemoveFace::removeFaces(const TopoDS_Solid& theShape,
TopoDS_Shape& theNewShape)
{
Standard_Boolean isDone = Standard_False;
TopoDS_Solid aSol;
BRep_Builder aB;
aB.MakeSolid(aSol);
TopoDS_Compound aComp;
aB.MakeCompound(aComp);
Standard_Boolean isAddSol = Standard_False, isAddComp = Standard_False;
//firslty faces will be deleted from each shell.
TopoDS_Iterator aItSol(theShape,Standard_False);
for( ; aItSol.More(); aItSol.Next()) {
TopoDS_Shape aSh = aItSol.Value();
TopoDS_Shape aNewShape;
if(removeFaces(aSh,aNewShape))
isDone = Standard_True;
if(aNewShape.IsNull())
continue;
else if(aNewShape.ShapeType() == TopAbs_SHELL ) {
aB.Add(aSol,aNewShape);
isAddSol = Standard_True;
}
else {
aB.Add(aComp,aNewShape);
isAddComp = Standard_True;
}
}
if(isDone) {
//for getting correct solids class ShapeFix_Solid will be used.
if(isAddSol) {
Handle(ShapeFix_Solid) aSfSol = new ShapeFix_Solid(aSol);
aSfSol->FixShellMode()= Standard_False;
aSfSol->Perform();
TopoDS_Shape aresSol = aSfSol->Shape();
if(!isAddComp)
theNewShape = aresSol;
else
aB.Add(aComp,aresSol);
}
else if(isAddComp)
theNewShape = aComp;
else
theNewShape.Nullify();
}
else
theNewShape = theShape;
return isDone;
}
示例3: exp
bool IfcGeom::Kernel::convert(const IfcSchema::IfcExtrudedAreaSolid* l, TopoDS_Shape& shape) {
const double height = l->Depth() * getValue(GV_LENGTH_UNIT);
if (height < getValue(GV_PRECISION)) {
Logger::Message(Logger::LOG_ERROR, "Non-positive extrusion height encountered for:", l->entity);
return false;
}
TopoDS_Shape face;
if ( !convert_face(l->SweptArea(),face) ) return false;
gp_Trsf trsf;
IfcGeom::Kernel::convert(l->Position(),trsf);
gp_Dir dir;
convert(l->ExtrudedDirection(),dir);
shape.Nullify();
if (face.ShapeType() == TopAbs_COMPOUND) {
// For compounds (most likely the result of a IfcCompositeProfileDef)
// create a compound solid shape.
TopExp_Explorer exp(face, TopAbs_FACE);
TopoDS_CompSolid compound;
BRep_Builder builder;
builder.MakeCompSolid(compound);
int num_faces_extruded = 0;
for (; exp.More(); exp.Next(), ++num_faces_extruded) {
builder.Add(compound, BRepPrimAPI_MakePrism(exp.Current(), height*dir));
}
if (num_faces_extruded) {
shape = compound;
}
}
if (shape.IsNull()) {
shape = BRepPrimAPI_MakePrism(face, height*dir);
}
// IfcSweptAreaSolid.Position (trsf) is an IfcAxis2Placement3D
// and therefore has a unit scale factor
shape.Move(trsf);
return ! shape.IsNull();
}
示例4: GetNamedShape
bool ChCascadeDoc::GetNamedShape(TopoDS_Shape& mshape, char* name, bool set_location_to_root, bool get_multiple) {
callback_CascadeDoc_getnamed aselector(name);
this->ScanCascadeShapes(aselector);
if (aselector.res_found) {
if (get_multiple)
mshape = aselector.res_comp;
else
mshape = aselector.res_shape;
return true;
} else {
mshape.Nullify();
return false;
}
}
示例5: exp
bool IfcGeom::Kernel::convert(const IfcSchema::IfcExtrudedAreaSolid* l, TopoDS_Shape& shape) {
TopoDS_Shape face;
if ( !convert_face(l->SweptArea(),face) ) return false;
const double height = l->Depth() * getValue(GV_LENGTH_UNIT);
gp_Trsf trsf;
IfcGeom::Kernel::convert(l->Position(),trsf);
gp_Dir dir;
convert(l->ExtrudedDirection(),dir);
shape.Nullify();
if (face.ShapeType() == TopAbs_COMPOUND) {
// For compounds (most likely the result of a IfcCompositeProfileDef)
// create a compound solid shape.
TopExp_Explorer exp(face, TopAbs_FACE);
TopoDS_CompSolid compound;
BRep_Builder builder;
builder.MakeCompSolid(compound);
int num_faces_extruded = 0;
for (; exp.More(); exp.Next(), ++num_faces_extruded) {
builder.Add(compound, BRepPrimAPI_MakePrism(exp.Current(), height*dir));
}
if (num_faces_extruded) {
shape = compound;
}
}
if (shape.IsNull()) {
shape = BRepPrimAPI_MakePrism(face, height*dir);
}
shape.Move(trsf);
return ! shape.IsNull();
}
示例6: ImportIGES
//.........这里部分代码省略.........
if(!aModel.IsNull()) {
Handle(TCollection_HAsciiString) aUnitName =
aModel->GlobalSection().UnitName();
//cout<<"aUnitName = "<<aUnitName->ToCString()<<endl;
//cout<<"aUnitFlag = "<<aModel->GlobalSection().UnitFlag()<<endl;
if( aUnitName->String()=="MM" ) {
P = gp_Pnt(0.001,0.0,0.0);
}
else if( aUnitName->String()=="CM" ) {
P = gp_Pnt(0.01,0.0,0.0);
}
}
BRep_Builder B;
TopoDS_Vertex V;
B.MakeVertex(V,P,1.e-7);
aResShape = V;
return aResShape;
}
if( theFormatName == "IGES_SCALE" ) {
//cout<<"need re-scale a model"<<endl;
// set UnitFlag to 'meter'
Handle(IGESData_IGESModel) aModel =
Handle(IGESData_IGESModel)::DownCast(aReader.Model());
if(!aModel.IsNull()) {
IGESData_GlobalSection aGS = aModel->GlobalSection();
aGS.SetUnitFlag(6);
aModel->SetGlobalSection(aGS);
}
}
MESSAGE("ImportIGES : all Geometry Transfer");
//OCC 5.1.2 porting
// aReader.Clear();
// aReader.TransferRoots(false);
aReader.ClearShapes();
aReader.TransferRoots();
MESSAGE("ImportIGES : count of shapes produced = " << aReader.NbShapes());
aResShape = aReader.OneShape();
// BEGIN: Store names of sub-shapes from file
Handle(Interface_InterfaceModel) Model = aReader.WS()->Model();
Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader();
if (!TR.IsNull()) {
Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
Standard_Integer nb = Model->NbEntities();
for (Standard_Integer i = 1; i <= nb; i++) {
Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast(Model->Value(i));
if (ent.IsNull() || ! ent->HasName()) continue;
// find target shape
Handle(Transfer_Binder) binder = TP->Find(ent);
if (binder.IsNull()) continue;
TopoDS_Shape S = TransferBRep::ShapeResult(binder);
if (S.IsNull()) continue;
// create label and set shape
TDF_Label L;
TDF_TagSource aTag;
L = aTag.NewChild(theShapeLabel);
TNaming_Builder tnBuild (L);
tnBuild.Generated(S);
// set a name
TCollection_AsciiString string = ent->NameValue()->String();
string.LeftAdjust();
string.RightAdjust();
TCollection_ExtendedString str (string);
TDataStd_Name::Set(L, str);
}
}
// END: Store names
} else {
// switch (status) {
// case IFSelect_RetVoid:
// theError = "Nothing created or No data to process";
// break;
// case IFSelect_RetError:
// theError = "Error in command or input data";
// break;
// case IFSelect_RetFail:
// theError = "Execution was run, but has failed";
// break;
// case IFSelect_RetStop:
// theError = "Execution has been stopped. Quite possible, an exception was raised";
// break;
// default:
// break;
// }
theError = "Wrong format of the imported file. Can't import file.";
aResShape.Nullify();
}
}
catch(Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
theError = aFail->GetMessageString();
aResShape.Nullify();
}
return aResShape;
}
示例7: import
bool GraphicImporter::import()
{
bool success = false;
if ( m_fileName.empty() )
{
TopoDS_Shape shape;
if ( m_shapeName.compare( "cube" ) == 0 )
{
shape = OCCPartFactory::makeCube( 10, 10, 10 );
}
if ( m_shapeName.compare( "cylinder" ) == 0 )
{
shape = OCCPartFactory::makeCylinder( 5, 10 );
}
if ( m_shapeName.compare( "bottle" ) == 0 )
{
try {
shape = OCCPartFactory::makeBottle( 50, 70, 30 );
} catch ( Standard_ConstructionError ) {
shape.Nullify();
display_message( WARNING_MESSAGE, "Houston, we have a problem with the bottle" );
}
}
m_transformer->mapShape( shape );
if ( !shape.IsNull() )
success = true;
}
else
{
FileImportExport::FileFormat format = FileImportExport::FormatUnknown;
FileImportExport reader;
if ( m_fileName.rfind( ".brep" ) != std::string::npos ||
m_fileName.rfind( ".rle" ) != std::string::npos )
{
format = FileImportExport::FormatBREP;
}
else if ( m_fileName.rfind( ".step" ) != std::string::npos ||
m_fileName.rfind( ".stp" ) != std::string::npos )
{
format = FileImportExport::FormatSTEP;
}
else if ( m_fileName.rfind( ".iges" ) != std::string::npos ||
m_fileName.rfind( ".igs" ) != std::string::npos )
{
format = FileImportExport::FormatIGES;
}
clock_t start, end;
start = clock();
Handle_TopTools_HSequenceOfShape shapes;
if ( reader.readModel( m_fileName, format ) )
{
end = clock();
printf( "File read took %.2f seconds\n", ( end - start ) / double( CLOCKS_PER_SEC ) );
start = clock();
if ( reader.hasXDEInformation() )
m_transformer->mapShapes( reader.xDEInformation() );
else
m_transformer->mapShapes( reader.sequenceOfShapes() );
end = clock();
printf( "Shape mapping took %.2f seconds\n", ( end - start ) / double( CLOCKS_PER_SEC ) );
success = true;
}
}
return success;
}
示例8: mrb_siren_shape_final
void mrb_siren_shape_final(mrb_state* mrb, void* p)
{
TopoDS_Shape* s = static_cast<TopoDS_Shape*>(p);
s->Nullify();
}
示例9: ImportSTEP
//.........这里部分代码省略.........
if (PD.IsNull()) continue;
Handle(StepBasic_Product) Prod = PD->Formation()->OfProduct();
aName = Prod->Name();
}
else
{
continue;
}
if ( aName->UsefullLength() < 1 )
continue;
// skip 'N0NE' name
if ( aName->UsefullLength() == 4 &&
toupper (aName->Value(1)) == 'N' &&
toupper (aName->Value(2)) == 'O' &&
toupper (aName->Value(3)) == 'N' &&
toupper (aName->Value(4)) == 'E')
continue;
// special check to pass names like "Open CASCADE STEP translator 6.3 1"
TCollection_AsciiString aSkipName ("Open CASCADE STEP translator");
if (aName->Length() >= aSkipName.Length()) {
if (aName->String().SubString(1, aSkipName.Length()).IsEqual(aSkipName))
continue;
}
TCollection_ExtendedString aNameExt (aName->ToCString());
// find target shape
Handle(Transfer_Binder) binder = TP->Find(enti);
if (binder.IsNull()) continue;
TopoDS_Shape S = TransferBRep::ShapeResult(binder);
if (S.IsNull()) continue;
// as PRODUCT can be included in the main shape
// several times, we look here for all iclusions.
Standard_Integer isub, nbSubs = anIndices.Extent();
for (isub = 1; isub <= nbSubs; isub++)
{
TopoDS_Shape aSub = anIndices.FindKey(isub);
if (aSub.IsPartner(S)) {
TDF_Label L;
if (enti->IsKind(tGeom)) {
// check all named shapes using iterator
TDF_ChildIDIterator anIt (theShapeLabel, TDataStd_Name::GetID(), Standard_True);
for (; anIt.More(); anIt.Next()) {
Handle(TDataStd_Name) nameAttr =
Handle(TDataStd_Name)::DownCast(anIt.Value());
if (nameAttr.IsNull()) continue;
TDF_Label Lab = nameAttr->Label();
Handle(TNaming_NamedShape) shAttr;
if (Lab.FindAttribute(TNaming_NamedShape::GetID(), shAttr) && shAttr->Get().IsEqual(aSub))
L = Lab;
}
}
// create label and set shape
if (L.IsNull())
{
TDF_TagSource aTag;
L = aTag.NewChild(theShapeLabel);
TNaming_Builder tnBuild (L);
//tnBuild.Generated(S);
tnBuild.Generated(aSub);
}
// set a name
TDataStd_Name::Set(L, aNameExt);
}
}
}
}
// END: Store names
}
else {
// switch (status) {
// case IFSelect_RetVoid:
// theError = "Nothing created or No data to process";
// break;
// case IFSelect_RetError:
// theError = "Error in command or input data";
// break;
// case IFSelect_RetFail:
// theError = "Execution was run, but has failed";
// break;
// case IFSelect_RetStop:
// theError = "Execution has been stopped. Quite possible, an exception was raised";
// break;
// default:
// break;
// }
theError = "Wrong format of the imported file. Can't import file.";
aResShape.Nullify();
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
theError = aFail->GetMessageString();
aResShape.Nullify();
}
// Return previous locale
return aResShape;
}
示例10: update_OCC_entity
//----------------------------------------------------------------
// Function: TopoDS_Shape level function to update the core Body
// for any Boolean operation of the body.
// Author: Jane Hu
//----------------------------------------------------------------
CubitStatus OCCBody::update_OCC_entity(TopoDS_Shape& old_shape,
TopoDS_Shape& new_shape,
BRepBuilderAPI_MakeShape *op,
LocOpe_SplitShape* sp)
{
//set the Shells
TopTools_IndexedMapOfShape M;
TopExp::MapShapes(old_shape, TopAbs_SOLID, M);
TopTools_IndexedMapOfShape M_new;
TopExp::MapShapes(new_shape, TopAbs_SOLID, M_new);
TopTools_ListOfShape shapes;
TopoDS_Shape shape;
CubitBoolean updated = CUBIT_FALSE;
if(!old_shape.IsNull() && old_shape.ShapeType() == TopAbs_COMPOUND &&
!new_shape.IsNull() && new_shape.ShapeType() == TopAbs_COMPOUND &&
!old_shape.IsSame(new_shape))
{
//By updating underling solids, shells etc., the old_shape will get changed.
//trying to make sure the the number of each entity in the old and new
//shapes are the same, which means that nothing is delete, that we can
//update the map here. Otherwise, when deleting solids, it'll delete the
//the old body and create new body. This is Ok for general boolean operation //except imprint when booleans are called, usually the original body are
// supposed to be kept.
updated = CUBIT_TRUE;
OCCQueryEngine::instance()->update_OCC_map(old_shape, new_shape);
}
DLIList<int> new_solid_nums;
DLIList<int> unfound_nums;
for(int ii=1; ii<=M.Extent(); ii++)
{
TopoDS_Solid solid = TopoDS::Solid(M(ii));
TopTools_ListOfShape shapes;
if(op)
{
shapes.Assign(op->Modified(solid));
if(shapes.Extent() == 0)
shapes.Assign(op->Generated(solid));
}
else if(sp)
shapes.Assign(sp->DescendantShapes(solid));
if (shapes.Extent() == 1)
shape = shapes.First();
else if(shapes.Extent() > 1)
{
//update all attributes first.
TopTools_ListIteratorOfListOfShape it;
it.Initialize(shapes);
for(; it.More(); it.Next())
{
shape = it.Value();
OCCQueryEngine::instance()->copy_attributes(solid, shape);
}
shape = shapes.First();
}
else if(op->IsDeleted(solid))
{
if (M_new.Extent()== 1 && ii == 1)
shape = M_new(1);
else if(M_new.Extent()== 1 && ii > 1)
shape.Nullify();
else if(M_new.Extent() > 1)
{
GProp_GProps myProps;
BRepGProp::VolumeProperties(solid, myProps);
double bf_mass = myProps.Mass();
gp_Pnt old_center = myProps.CentreOfMass();
CubitBoolean found = CUBIT_FALSE;
for(int l = 1; l <= M_new.Extent(); l++)
{
BRepGProp::VolumeProperties(M_new(l), myProps);
double af_mass = myProps.Mass();
double dTol = OCCQueryEngine::instance()->get_sme_resabs_tolerance();
if(fabs(bf_mass-af_mass) < dTol) //unchanged
{
gp_Pnt new_center = myProps.CentreOfMass();
if(new_center.IsEqual(old_center, dTol))
{
found = CUBIT_TRUE;
shape = M_new(l);
new_solid_nums.append(l);
break;
}
}
}
if(!found)
{
unfound_nums.append(ii);
continue;
}
//.........这里部分代码省略.........
示例11: printf
//.........这里部分代码省略.........
if (!BRepTools::Read(source, name, builder)) {
if (outLevel > 0)
printf(" EGADS Warning: Read Error on %s (EG_loadModel)!\n", name);
return EGADS_NOLOAD;
}
} else {
if (outLevel > 0)
printf(" EGADS Warning: Extension in %s Not Supported (EG_loadModel)!\n",
name);
return EGADS_NODATA;
}
int nWire = 0;
int nFace = 0;
int nSheet = 0;
int nSolid = 0;
TopExp_Explorer Exp;
for (Exp.Init(source, TopAbs_WIRE, TopAbs_FACE);
Exp.More(); Exp.Next()) nWire++;
for (Exp.Init(source, TopAbs_FACE, TopAbs_SHELL);
Exp.More(); Exp.Next()) nFace++;
for (Exp.Init(source, TopAbs_SHELL, TopAbs_SOLID);
Exp.More(); Exp.Next()) nSheet++;
for (Exp.Init(source, TopAbs_SOLID); Exp.More(); Exp.Next()) nSolid++;
if (outLevel > 1)
printf("\n EGADS Info: %s has %d Solids, %d Sheets, %d Faces and %d Wires\n",
name, nSolid, nSheet, nFace, nWire);
int nBody = nWire+nFace+nSheet+nSolid;
if (nBody == 0) {
source.Nullify();
if (outLevel > 0)
printf(" EGADS Warning: Nothing found in %s (EG_loadModel)!\n", name);
return EGADS_NODATA;
}
mshape = new egadsModel;
mshape->shape = source;
mshape->nbody = nBody;
mshape->bodies = new egObject*[nBody];
for (i = 0; i < nBody; i++) {
stat = EG_makeObject(context, &mshape->bodies[i]);
if (stat != EGADS_SUCCESS) {
for (int j = 0; j < i; j++) {
egObject *obj = mshape->bodies[j];
egadsBody *pbody = (egadsBody *) obj->blind;
delete pbody;
EG_deleteObject(mshape->bodies[j]);
}
delete [] mshape->bodies;
delete mshape;
return stat;
}
egObject *pobj = mshape->bodies[i];
egadsBody *pbody = new egadsBody;
pbody->nodes.objs = NULL;
pbody->edges.objs = NULL;
pbody->loops.objs = NULL;
pbody->faces.objs = NULL;
pbody->shells.objs = NULL;
pbody->senses = NULL;
pobj->blind = pbody;
}