sExpression *callProcSyntaxRules(sExpression *argument){ if(isList(argument)){ sExpression *body = cdr(toList(argument)); sExpression *temp = car(toList(argument)); sExpression *syntaxes = cons(car(toList(temp)), &sNull); sExpression *rules = cons(cadr(toList(temp)), &sNull); while(isList(body)){ temp = car(toList(body)); rules = cons(cadr(toList(temp)), rules); syntaxes = cons(car(toList(temp)), syntaxes); body = cdr(toList(body)); } return newSyntax(toList(rules), toList(syntaxes)); } return &sError; }
MStatus QueryF3d::doIt(const MArgList &argList) { MStatus stat; MSyntax syntax = newSyntax(); MArgParser args(syntax, argList); char msg[4096]; if (!args.isFlagSet("-file")) { MGlobal::displayError("queryF3d: missing -f/-file flag"); return MS::kFailure; } bool verbose = args.isFlagSet("-verbose"); MString sarg; stat = args.getFlagArgument("-file", 0, sarg); if (stat != MS::kSuccess) { stat.perror("queryF3d"); return stat; } std::string pat = sarg.asChar(); ToPrintfPattern(pat); if (verbose) { MGlobal::displayInfo("queryF3d: File pattern \"" + sarg + "\" -> \"" + MString(pat.c_str()) + "\""); } std::vector<std::string> files; int startFrame = -1; int endFrame = -1; if (GetFileList(pat, files, &startFrame, &endFrame) == 0) { MGlobal::displayError("queryF3d: No file matching " + sarg); return MS::kFailure; } if (verbose) { MGlobal::displayInfo("queryF3d: Found file(s)"); for (size_t i=0; i<files.size(); ++i) { MGlobal::displayInfo(" " + MString(files[i].c_str())); } } if (args.isFlagSet("-range")) { MIntArray res; res.append(startFrame); res.append(endFrame); setResult(res); return MS::kSuccess; } else { Field3D::Field3DInputFile f3d; if (f3d.open(files[0])) { if (args.isFlagSet("-partitions")) { MStringArray rv; std::vector<std::string> names; f3d.getPartitionNames(names); if (verbose) { sprintf(msg, "queryF3d: Found %lu partition(s)", names.size()); MGlobal::displayInfo(msg); } for (size_t i=0; i<names.size(); ++i) { rv.append(names[i].c_str()); } setResult(rv); return MS::kSuccess; } else if (args.isFlagSet("-layers")) { if (!args.isFlagSet("-partition")) { MGlobal::displayError("queryF3d: Please specify the partition with -p/-partition flag"); return MS::kFailure; } stat = args.getFlagArgument("-partition", 0, sarg); if (stat != MS::kSuccess) { stat.perror("queryF3d"); return stat; } MStringArray rv; std::string partition = sarg.asChar(); std::vector<std::string> names; bool scalar = args.isFlagSet("-scalar"); bool vector = args.isFlagSet("-vector"); if (!scalar && !vector) { // neither -scalar nor -vector flag were set, output both scalar = true; vector = true; } if (scalar) { f3d.getScalarLayerNames(names, partition); for (size_t i=0; i<names.size(); ++i) { rv.append(names[i].c_str()); } } if (vector) { names.clear(); f3d.getVectorLayerNames(names, partition); for (size_t i=0; i<names.size(); ++i) { rv.append(names[i].c_str()); } } setResult(rv); return MS::kSuccess; } else if (args.isFlagSet("-resolution")) { if (!args.isFlagSet("-partition")) { MGlobal::displayError("queryF3d: Please specify the partition with -p/-partition flag"); return MS::kFailure; } if (!args.isFlagSet("-layer")) { MGlobal::displayError("queryF3d: Please specify the layer with -l/-layer flag"); return MS::kFailure; } stat = args.getFlagArgument("-partition", 0, sarg); if (stat != MS::kSuccess) { stat.perror("queryF3d"); return stat; } std::string partition = sarg.asChar(); stat = args.getFlagArgument("-layer", 0, sarg); if (stat != MS::kSuccess) { stat.perror("queryF3d"); return stat; } std::string layer = sarg.asChar(); if (verbose) { sprintf(msg, "queryF3d: Read resolution for %s.%s", partition.c_str(), layer.c_str()); MGlobal::displayInfo(msg); } MIntArray rv; // When reading proxy layers, the type doesn't actually matters Field3D::EmptyField<Field3D::half>::Vec fields = f3d.readProxyLayer<Field3D::half>(partition, layer, false); if (fields.size() == 0) { fields = f3d.readProxyLayer<Field3D::half>(partition, layer, true); if (verbose && fields.size() > 0) { MGlobal::displayInfo("(vector field)"); } } else if (verbose) { MGlobal::displayInfo("(scalar field)"); } if (fields.size() > 0) { Field3D::V3i res = fields[0]->dataResolution(); rv.append(res.x); rv.append(res.y); rv.append(res.z); setResult(rv); return MS::kSuccess; } MGlobal::displayWarning("queryF3d: Unsupported field type"); return MS::kFailure; } else { MGlobal::displayInfo("queryF3d: Nothing to query"); return MS::kFailure; } } else { MGlobal::displayError("queryF3d: Could not open file \"" + MString(files[0].c_str()) + "\""); return MS::kFailure; } } }