/***************************************************************************** * DESCRIPTION: * * Main module of skeleton - Read command line and do what is needed... * * * * PARAMETERS: * * FileNames: Files to open and read, as a vector of strings. * * NumFiles: Length of the FileNames vector. * * * * RETURN VALUE: * * bool: false - fail, true - success. * *****************************************************************************/ bool CGSkelProcessIritDataFiles(CString &FileNames, int NumFiles, std::vector<PolygonalObject>& outObjects, int polygonFineness) { IPObjectStruct *PObjects; IrtHmgnMatType CrntViewMat; /* Get the data files: */ IPSetFlattenObjects(FALSE); // Boris' patch: convert FileNames to an array of size 1 // then convert it from wide char to char LPCTSTR* tmp1 = (LPCTSTR*)&FileNames; char tmp2[201]; char* tmp3[1] = { tmp2 }; wcstombs(tmp2, *tmp1, 200); if ((PObjects = IPGetDataFiles(tmp3, 1/*NumFiles*/, TRUE, FALSE)) == NULL) return false; // End of patch PObjects = IPResolveInstances(PObjects); if (IPWasPrspMat) MatMultTwo4by4(CrntViewMat, IPViewMat, IPPrspMat); else IRIT_GEN_COPY(CrntViewMat, IPViewMat, sizeof(IrtHmgnMatType)); /* Here some useful parameters to play with in tesselating freeforms: */ CGSkelFFCState.FineNess = polygonFineness; /* Res. of tesselation, larger is finer. */ CGSkelFFCState.ComputeUV = TRUE; /* Wants UV coordinates for textures. */ CGSkelFFCState.FourPerFlat = TRUE;/* 4 poly per ~flat patch, 2 otherwise.*/ CGSkelFFCState.LinearOnePolyFlag = TRUE; /* Linear srf gen. one poly. */ /* Traverse ALL the parsed data, recursively. */ IPTraverseObjListHierarchy(PObjects, CrntViewMat, CGSkelDumpOneTraversedObject); // Convert to our data structure: outObjects = IritAdapter::Convert(PObjects); // Finished converting return true; }
/***************************************************************************** * DESCRIPTION: M * Main module of irit2xfg - Read command line and do what is needed... M * * * PARAMETERS: M * argc, argv: Command line. M * * * RETURN VALUE: M * int: Return code. M * * * KEYWORDS: M * main M *****************************************************************************/ int main(int argc, char **argv) { int Error, HasTime = FALSE, PrintSizeFlag = FALSE, NumOfIsolinesFlag = FALSE, CrvOptimalPolyFlag = FALSE, SrfOptimalPolyFlag = FALSE, VerFlag = FALSE, OutFileFlag = FALSE, TranslateFlag = FALSE, NumFiles = 0; char *StrNumOfIsolines = NULL, **FileNames = NULL; IrtRType CurrentTime; IPObjectStruct *PObjects; IrtHmgnMatType CrntViewMat; #ifdef DEBUG_IRIT_MALLOC IritInitTestDynMemory(); #endif /* DEBUG_IRIT_MALLOC */ if ((Error = GAGetArgs (argc, argv, CtrlStr, &PrintSizeFlag, &GlblPrintSize, &TranslateFlag, &GlblXTranslate, &GlblYTranslate, &NumOfIsolinesFlag, &StrNumOfIsolines, &CrvOptimalPolyFlag, &IPFFCState.CrvApproxMethod, &IPFFCState.CrvApproxTolSamples, &SrfOptimalPolyFlag, &IPFFCState.OptimalPolygons, &IPFFCState.FineNess, &IPFFCState.DrawFFMesh, &IPFFCState.DrawFFGeom, &IPFFCState.Talkative, &HasTime, &CurrentTime, &IPFFCState.ShowInternal, &OutFileFlag, &OutFileName, &VerFlag, &NumFiles, &FileNames)) != 0) { GAPrintErrMsg(Error); GAPrintHowTo(CtrlStr); Irit2XfgExit(1); } if (VerFlag) { IRIT_INFO_MSG_PRINTF("\n%s\n\n", VersionStr); GAPrintHowTo(CtrlStr); Irit2XfgExit(0); } if (!NumFiles) { IRIT_WARNING_MSG("No data file names were given, exit.\n"); GAPrintHowTo(CtrlStr); Irit2XfgExit(1); } IPFFCState.DumpObjsAsPolylines = !SrfOptimalPolyFlag; IPFFCState.ComputeNrml = FALSE; /* No need for normals of vertices. */ if (NumOfIsolinesFlag && StrNumOfIsolines != NULL) { if (sscanf(StrNumOfIsolines, "%d:%d:%d", &IPFFCState.NumOfIsolines[0], &IPFFCState.NumOfIsolines[1], &IPFFCState.NumOfIsolines[2]) != 3) { if (sscanf(StrNumOfIsolines, "%d:%d", &IPFFCState.NumOfIsolines[0], &IPFFCState.NumOfIsolines[1]) != 2) { if (sscanf(StrNumOfIsolines, "%d", &IPFFCState.NumOfIsolines[1]) != 1) { IRIT_WARNING_MSG( "Number(s) of isolines (-I) cannot be parsed.\n"); GAPrintHowTo(CtrlStr); Irit2XfgExit(1); } else { IPFFCState.NumOfIsolines[2] = IPFFCState.NumOfIsolines[1] = IPFFCState.NumOfIsolines[0]; } } else { IPFFCState.NumOfIsolines[2] = IPFFCState.NumOfIsolines[0]; } } } /* Get the data files: */ IPSetFlattenObjects(FALSE); if ((PObjects = IPGetDataFiles((const char **) FileNames, NumFiles, TRUE, FALSE)) == NULL) Irit2XfgExit(1); PObjects = IPResolveInstances(PObjects); if (HasTime) GMAnimEvalAnimationList(CurrentTime, PObjects); else GMAnimEvalAnimationList(GM_ANIM_NO_DEFAULT_TIME, PObjects); if (IPWasPrspMat) MatMultTwo4by4(CrntViewMat, IPViewMat, IPPrspMat); else IRIT_GEN_COPY(CrntViewMat, IPViewMat, sizeof(IrtHmgnMatType)); IPTraverseObjListHierarchy(PObjects, CrntViewMat, IPMapObjectInPlace); DumpDataForFIG(OutFileFlag ? OutFileName : NULL, PObjects); Irit2XfgExit(0); return 0; }