// Copyright (c) 1999-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. //:k8 abv 6 Jan 98: using parameter "step.group" for writing assemblies/shapes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Pour le transfert (write) // Pour NewModel et Write : definition de produit (temporaire ...) #include #include #include #include #include #include #include #include // steptrans #include #include #include #include #include #include #include #include #include #include #include #include extern "C" { static void cleanpilot () { XSDRAW::Session()->ClearData(1); } } //======================================================================= //function : Init //purpose : //======================================================================= void XSDRAWSTEP::Init () { Handle(StepSelect_Activator) stepact = new StepSelect_Activator; if (STEPControl_Controller::Init()) // XSDRAW::SetNorm("STEP AP-214"); trop tot XSDRAW::SetController(XSControl_Controller::Recorded("STEP")); atexit (cleanpilot); } // ######## COMMANDE stepread : teste le Reader ######### //======================================================================= //function : stepread //purpose : //======================================================================= static Standard_Integer stepread (Draw_Interpretor& di/*theCommands*/, Standard_Integer argc, const char** argv) { if (argc < 3) { di << "Use: stepread [file] [f or r (type of model full or reduced)]\n"; return 1; } // On admet le controller AP214 ou une variante DeclareAndCast(STEPControl_Controller,ctl,XSDRAW::Controller()); if (ctl.IsNull()) XSDRAW::SetNorm("STEP"); // Progress indicator Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 ); progress->SetScale ( 0, 100, 1 ); progress->Show(); STEPControl_Reader sr (XSDRAW::Session(),Standard_False); TCollection_AsciiString fnom,rnom; Standard_Boolean modfic = XSDRAW::FileAndVar (argv[1],argv[2],"STEP",fnom,rnom); if (modfic) di<<" File STEP to read : "<NewScope ( 20, "Loading" ); // On average loading takes 20% progress->Show(); Standard_Boolean fromtcl = Standard_False; Standard_Boolean aFullMode = Standard_False; Standard_Integer k = 3; if(argc > k ) { if(argv[k][0] == 'f' || argv[3][0] == 'F') { aFullMode = Standard_True; k++; } else if(argv[k][0] == 'r' || argv[3][0] == 'R') { aFullMode = Standard_False; k++; } else fromtcl = Standard_True; } if(!fromtcl) fromtcl = argc > k; if(aFullMode) cout<<"Full model for translation with additional info will be used \n"<SetModeStat(aFullMode); if (modfic) readstat = sr.ReadFile (fnom.ToCString()); else if (XSDRAW::Session()->NbStartingEntities() > 0) readstat = IFSelect_RetDone; progress->EndScope(); progress->Show(); if (readstat != IFSelect_RetDone) { if (modfic) di<<"Could not read file "< fichier deja lu Standard_Integer i, num, nbs, modepri = 1; if (fromtcl) modepri = 4; Handle(Message_Messenger) aDIMessenger = new Message_Messenger (new Draw_Printer(di)); while (modepri) { num = sr.NbRootsForTransfer(); if (!fromtcl) { di<<"NbRootsForTransfer="<Print(sr.RootForTransfer(i),aDIMessenger); di<<" Type:"<DynamicType()->Name()<<"\n"; } cout<<"Mode (0 End, 1 root n0 1, 2 one root/n0, 3 one entity/n0, 4 Selection) : "<>modepri; } if (modepri == 0) { di<<"End Reading STEP"<<"\n"; return 0; } if (modepri <= 2) { num = 1; if (modepri == 2) { cout<<"Root N0 : "<>num; } progress->NewScope ( 80, "Translation" ); progress->Show(); sr.WS()->MapReader()->SetProgress ( progress ); if (!sr.TransferRoot (num)) di<<"Transfer root n0 "< DRAW Shape: "<MapReader()->SetProgress ( 0 ); progress->EndScope(); progress->Show(); } else if (modepri == 3) { cout<<"Entity : "< DRAW Shape: "<Append(sr.RootForTransfer(j)); } else { di<<"List given by "< k+1) di<<" "< (k+1) ? argv[k+1] : 0 ) ); } if (list.IsNull()) { di<<"No list defined. Give a selection name or * for all transferrable roots"<<"\n"; continue; } } else { cout<<"Name of Selection :"<Length(); di<<"Nb entities selected : "<NewScope ( 80, "Translation" ); progress->Show(); sr.WS()->MapReader()->SetProgress ( progress ); Message_ProgressSentry PSentry ( progress, "Root", 0, nbl, 1 ); for (ill = 1; ill <= nbl && PSentry.More(); ill ++, PSentry.Next()) { num = sr.Model()->Number(list->Value(ill)); if (num == 0) continue; if (!sr.TransferOne(num)) di<<"Transfer entity n0 "< DRAW Shape: "<MapReader()->SetProgress ( 0 ); progress->EndScope(); progress->Show(); } else di<<"Unknown mode n0 "< 4) n2 = XSDRAW::GetEntityNumber(argv[4]); if (n1 > 0) ax1 = Handle(StepGeom_Axis2Placement3d)::DownCast (XSDRAW::Entity(n1)); if (n2 > 0) ax2 = Handle(StepGeom_Axis2Placement3d)::DownCast (XSDRAW::Entity(n2)); StepToTopoDS_MakeTransformed mktrans; if (mktrans.Compute (ax1,ax2)) { TopLoc_Location loc (mktrans.Transformation()); shape.Move (loc); // mktrans.Transform (shape); DBRep::Set (argv[2],shape); di<<"Transformed Shape as "<ActorWrite() ); if ( ! ActWrite.IsNull() ) ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly")); TopoDS_Shape shape = DBRep::Get(argv[2]); STEPControl_Writer sw (XSDRAW::Session(),Standard_False); Handle(Interface_InterfaceModel) stepmodel = sw.Model(); Standard_Integer nbavant = (stepmodel.IsNull() ? 0 : stepmodel->NbEntities()); Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 ); progress->NewScope(90,"Translating"); progress->Show(); sw.WS()->TransferWriter()->FinderProcess()->SetProgress(progress); Standard_Integer stat = sw.Transfer (shape,mode); if (stat == IFSelect_RetDone) { di << "Translation: OK\n"; } else { di << "Error: translation failed, status = " << stat << "\n"; } sw.WS()->TransferWriter()->FinderProcess()->SetProgress(0); progress->EndScope(); progress->Show(); progress->NewScope(10,"Writing"); progress->Show(); // Que s est-il passe stepmodel = sw.Model(); Standard_Integer nbapres = (stepmodel.IsNull() ? 0 : stepmodel->NbEntities()); if (nbavant > 0) di<<"Beware : Model not empty before transferring"<<"\n"; if (nbapres <= nbavant) di<<"Beware : No data produced by this transfer"<<"\n"; if (nbapres == 0) { di<<"No data to write"<<"\n"; return 0; } if (argc <= 3) { di<<" Now, to write a file, command : writeall filename"<<"\n"; return 0; } const char *nomfic = argv[3]; stat = sw.Write(nomfic); switch (stat) { case IFSelect_RetVoid : di<<"Error: No file written"<<"\n"; break; case IFSelect_RetDone : di<<"File "<EndScope(); progress->Show(); return 0; } //======================================================================= //function : testwritestep //purpose : //======================================================================= static Standard_Integer testwrite (Draw_Interpretor& di, Standard_Integer argc, const char** argv) { if (argc != 3) { di << "ERROR in " << argv[0] << "Wrong Number of Arguments."<<"\n"; di << " Usage : " << argv[0] <<" file_name shape_name "<< "\n"; return 1; } STEPControl_Writer Writer; Standard_CString filename = argv[1]; TopoDS_Shape shape = DBRep::Get(argv[2]); IFSelect_ReturnStatus stat = Writer.Transfer(shape,STEPControl_AsIs); stat = Writer.Write(filename); if(stat != IFSelect_RetDone){ di<<"Error on writing file"<<"\n"; return 1; } di<<"File Is Written"<<"\n"; return 0; } //======================================================================= //function : countexpected //purpose : //======================================================================= static Standard_Integer countexpected (Draw_Interpretor& di, Standard_Integer /*argc*/, const char** /*argv*/) { Handle(IFSelect_SessionPilot) pilot = XSDRAW::Pilot(); Handle(IFSelect_WorkSession) WS = pilot->Session(); const Interface_Graph& graph = WS->Graph(); Handle(TColStd_HSequenceOfTransient) roots = WS->GiveList("xst-transferrable-roots", ""); STEPSelections_Counter cnt; for (Standard_Integer i =1 ; i <= roots->Length(); i++) { cnt.Count(graph,roots->Value(i)); } di<< "Instances of Faces \t: "<Session(); const Interface_Graph& graph = WS->Graph(); STEPSelections_AssemblyExplorer exp(graph); exp.Dump(cout); return 0; } static Standard_Integer stepfileunits (Draw_Interpretor& di, Standard_Integer argc, const char** argv) { if( argc < 2) { cout<<"Error: Invalid number of parameters. Should be: getfileunits name_file"<