// Created on: 2009-05-05 // Created by: Sergey ZARITCHNY // Copyright (c) 2009-2012 OPEN CASCADE SAS // // The content of this file is subject to the Open CASCADE Technology Public // License Version 6.5 (the "License"). You may not use the content of this file // except in compliance with the License. Please obtain a copy of the License // at http://www.opencascade.org and read it completely before using this file. // // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. // // The Original Code and all software distributed under the License is // distributed on an "AS IS" basis, without warranty of any kind, and the // Initial Developer hereby disclaims all such warranties, including without // limitation, any warranties of merchantability, fitness for a particular // purpose or non-infringement. Please see the License for the specific terms // and conditions governing the rights and limitations under the License. #include #include #include #include #include #include #include #include #include #include #include #include #include //#define SEL_DEB 1 #ifdef SEL_DEB #include #include #endif //======================================================================= //function : DNaming_SelectionDriver //purpose : Constructor //======================================================================= DNaming_SelectionDriver::DNaming_SelectionDriver() {} //======================================================================= //function : Validate //purpose : Validates labels of a function in . //======================================================================= void DNaming_SelectionDriver::Validate(TFunction_Logbook& ) const {} //======================================================================= //function : MustExecute //purpose : Analyse in if the loaded function must be // executed (i.e.arguments are modified) or not. //======================================================================= Standard_Boolean DNaming_SelectionDriver::MustExecute(const TFunction_Logbook& ) const { return Standard_True; } #ifdef SEL_DEB #include static void Write(const TopoDS_Shape& shape, const Standard_CString filename) { ofstream save; save.open(filename); save << "DBRep_DrawableShape" << endl << endl; if(!shape.IsNull()) BRepTools::Write(shape, save); save.close(); } #endif //======================================================================= //function : Execute //purpose : Execute the function and push in the impacted // labels (see method SetImpacted). //======================================================================= #include #include #include #include #include #include #include Standard_Integer DNaming_SelectionDriver::Execute(TFunction_Logbook& theLog) const { Handle(TFunction_Function) aFunction; Label().FindAttribute(TFunction_Function::GetID(),aFunction); if(aFunction.IsNull()) return -1; TDF_Label aRLabel = RESPOSITION(aFunction); if(aRLabel.IsNull()) return -1; Standard_Boolean aIsWire = Standard_False; TopAbs_ShapeEnum aPrevShapeType = TopAbs_SHAPE; Handle(TNaming_NamedShape) aNShape; if(aRLabel.FindAttribute(TNaming_NamedShape::GetID(),aNShape)) { if(!aNShape.IsNull() && !aNShape->IsEmpty()) { aPrevShapeType = aNShape->Get().ShapeType(); if (aPrevShapeType == TopAbs_WIRE) aIsWire = Standard_True; } } TNaming_Selector aSelector(aRLabel); TDF_LabelMap aMap; aMap = theLog.ChangeValid(); #ifdef SEL_DEB cout <<"#E_DNaming_SelectionDriver:: Valid Label Map:"<IsEmpty()) { cout << "%%%WARNING: DNaming_SelectionDriver::NamedShape is EMPTY on Label = "; aNS->Label().EntryDump(cout); cout << endl; } else { #ifdef SEL_DEB Write(aNS->Get(), "Selection_Result.brep"); Handle(TopoDS_TShape) aTS = aNS->Get().TShape(); cout << "TShape = " << (Standard_Address)aTS <Get().ShapeType()== TopAbs_COMPOUND) { TopoDS_Shape aWireShape; TNaming_Tool::FindShape(aMap, aMap, aNS, aWireShape); TNaming_Builder aBuilder(aRLabel); aBuilder.Select(aWireShape, aWireShape); aFunction->SetFailure(DONE); } else if(aPrevShapeType == aNS->Get().ShapeType()) { aFunction->SetFailure(DONE); } else { #ifdef SEL_DEB cout <<"%%%WARNING: DNaming_SelectionDriver::Execute: The Shape after solving changed type = "<Get().ShapeType()<< endl; #endif aFunction->SetFailure(DONE); } } } } else { aFunction->SetFailure(NOTDONE); cout << "%%%WARNING: DNaming_SelectionDriver::Execute: Selection is Not solved !!!" << endl; return 1; } return 0; }