Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
    }
  }
}