Exemplo n.º 1
0
void recursivelyRenderFact(Fact fact)
{
    if (fact.type == "Section") {
        std::vector<Fact> facts = findChildFacts(fact.id);
        for (size_t i = 0; i < facts.size(); i++) {
            recursivelyRenderFact(facts[i]);
        }
    }
    else {
        std::cout << "Rendering fact " << fact.id << std::endl;

        renderFact(fact);

        std::vector<Proof> proofs = findProofsForFact(fact.id);
        for (size_t i = 0; i < proofs.size(); i++) {
            renderProof(proofs[i]);
        }
    }
}
Exemplo n.º 2
0
Arquivo: saver.cpp Projeto: garinh/cs
  bool Terrain2FactorySaver::WriteDown (iBase *obj, iDocumentNode *parent,
					iStreamSource *ssource)
  {
    if (!parent) return false; //you never know...

    if (obj)
    {
      csRef<iDocumentNode> paramsNode = 
	parent->CreateNodeBefore(CS_NODE_ELEMENT, 0);
      paramsNode->SetValue("params");

      csRef<iTerrainFactory> tfact = 
	scfQueryInterface<iTerrainFactory> (obj);
      if (!tfact) return false;

      {
	iTerrainRenderer* render (tfact->GetRenderer());
	csRef<iFactory> renderFact (scfQueryInterfaceSafe<iFactory> (render));
	if (renderFact.IsValid())
	{
	  csRef<iDocumentNode> node = 
	    paramsNode->CreateNodeBefore (CS_NODE_ELEMENT, 0);
	  node->SetValue ("renderer");
	  node->CreateNodeBefore (CS_NODE_TEXT, 0)
	    ->SetValue (renderFact->QueryClassID());
	}
      }
      {
	iTerrainCollider* collide (tfact->GetCollider());
	csRef<iFactory> collideFact (scfQueryInterfaceSafe<iFactory> (collide));
	if (collideFact.IsValid())
	{
	  csRef<iDocumentNode> node = 
	    paramsNode->CreateNodeBefore (CS_NODE_ELEMENT, 0);
	  node->SetValue ("collider");
	  node->CreateNodeBefore (CS_NODE_TEXT, 0)
	    ->SetValue (collideFact->QueryClassID());
	}
      }
      {
	iTerrainDataFeeder* feed (tfact->GetFeeder());
	csRef<iFactory> feedFact (scfQueryInterfaceSafe<iFactory> (feed));
	if (feedFact.IsValid())
	{
	  csRef<iDocumentNode> node = 
	    paramsNode->CreateNodeBefore (CS_NODE_ELEMENT, 0);
	  node->SetValue ("feeder");
	  node->CreateNodeBefore (CS_NODE_TEXT, 0)
	    ->SetValue (feedFact->QueryClassID());
	}
      }
      {
        csRef<iDocumentNode> node = 
          paramsNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
        node->SetValue ("maxloadedcells");
        node->CreateNodeBefore (CS_NODE_TEXT, 0)
	  ->SetValueAsInt ((int)tfact->GetMaxLoadedCells());
      }

      iTerrainFactoryCell* defaultCell = tfact->GetDefaultCell();

      csRef<iDocumentNode> cellsNode = 
        paramsNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
      cellsNode->SetValue ("cells");

      {
        csRef<iDocumentNode> defaultNode = 
          cellsNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
        defaultNode->SetValue ("celldefault");

	{
	  csRef<iDocumentNode> node = 
	    defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("gridsize");
	  node->SetAttributeAsInt ("width", defaultCell->GetGridWidth());
	  node->SetAttributeAsInt ("height", defaultCell->GetGridHeight());
	}

	{
	  csRef<iDocumentNode> node = 
	    defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("materialmapsize");
	  node->SetAttributeAsInt ("width", defaultCell->GetMaterialMapWidth());
	  node->SetAttributeAsInt ("height", defaultCell->GetMaterialMapHeight());
	}

	{
	  csRef<iDocumentNode> node = 
	    defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("size");
	  synldr->WriteVector (node, defaultCell->GetSize());
	}

	{
	  iMaterialWrapper* basemat = defaultCell->GetBaseMaterial();
	  if (basemat)
	  {
	    csRef<iDocumentNode> node = 
	      defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	    node->SetValue ("basematerial");
	    node->CreateNodeBefore (CS_NODE_TEXT, 0)
	     ->SetValue (basemat->QueryObject()->GetName());
	  }
	}

	synldr->WriteBool (defaultNode, "materialmappersistent",
	  defaultCell->GetMaterialPersistent(), false);

	{
	  iTerrainRenderer* render = tfact->GetRenderer();
	  csRef<iTerrainCellRenderProperties> defRenderProp =
	    render ? render->CreateProperties () : 0;

	  csRef<iDocumentNode> node = 
	    defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("renderproperties");
	  if (!SaveRenderProperties (node, defaultCell->GetRenderProperties(),
	      defRenderProp))
	    defaultNode->RemoveNode (node);
	}

	{
	  iTerrainDataFeeder* feeder = tfact->GetFeeder();
	  csRef<iTerrainCellFeederProperties> defFeedProp =
	    feeder ? feeder->CreateProperties () : 0;

	  csRef<iDocumentNode> node = 
	    defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("feederproperties");
	  if (!SaveFeederProperties (node, defaultCell->GetFeederProperties(),
	      defFeedProp))
	    defaultNode->RemoveNode (node);
	}

	{
	  iTerrainCollider* collider = tfact->GetCollider();
	  csRef<iTerrainCellCollisionProperties> defCollProp =
	    collider ? collider->CreateProperties () : 0;

	  csRef<iDocumentNode> node = 
	    defaultNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("colliderproperties");
	  if (!SaveProperties (node, defaultCell->GetCollisionProperties(),
	      (iTerrainCellCollisionProperties*)defCollProp))
	    defaultNode->RemoveNode (node);
	}
      }

      size_t numCells = tfact->GetCellCount();
      for (size_t c = 0; c < numCells; c++)
      {
	iTerrainFactoryCell* cell = tfact->GetCell (c);

        csRef<iDocumentNode> cellNode = 
          cellsNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
        cellNode->SetValue ("cell");
	const char* name = cell->GetName();
	if (name != 0)
	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("name");
	  node->CreateNodeBefore (CS_NODE_TEXT, 0)
	    ->SetValue (name);
	}

	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("position");
	  synldr->WriteVector (node, cell->GetPosition());
	}

	if ((defaultCell->GetGridWidth() != cell->GetGridWidth())
	    || (defaultCell->GetGridHeight() != cell->GetGridHeight()))
	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("gridsize");
	  node->SetAttributeAsInt ("width", cell->GetGridWidth());
	  node->SetAttributeAsInt ("height", cell->GetGridHeight());
	}

	if ((defaultCell->GetMaterialMapWidth() != cell->GetMaterialMapWidth())
	    || (defaultCell->GetMaterialMapHeight() != cell->GetMaterialMapHeight()))
	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("materialmapsize");
	  node->SetAttributeAsInt ("width", cell->GetMaterialMapWidth());
	  node->SetAttributeAsInt ("height", cell->GetMaterialMapHeight());
	}

	if (defaultCell->GetSize() != cell->GetSize())
	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("size");
	  synldr->WriteVector (node, cell->GetSize());
	}

	if ((cell->GetBaseMaterial() != 0)
	    && (defaultCell->GetBaseMaterial() != cell->GetBaseMaterial()))
	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("basematerial");
	  node->CreateNodeBefore (CS_NODE_TEXT, 0)
	    ->SetValue (cell->GetBaseMaterial()->QueryObject()->GetName());
	}

	synldr->WriteBool (cellNode, "materialmappersistent",
	  cell->GetMaterialPersistent(), defaultCell->GetMaterialPersistent());

	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("renderproperties");
	  if (!SaveRenderProperties (node, cell->GetRenderProperties(),
	      defaultCell->GetRenderProperties()))
	    cellNode->RemoveNode (node);
	}

	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("feederproperties");
	  if (!SaveFeederProperties (node, cell->GetFeederProperties(),
	      defaultCell->GetFeederProperties()))
	    cellNode->RemoveNode (node);
	}

	{
	  csRef<iDocumentNode> node = 
	    cellNode->CreateNodeBefore(CS_NODE_ELEMENT, 0);
	  node->SetValue ("colliderproperties");
	  if (!SaveProperties (node, cell->GetCollisionProperties(),
	      defaultCell->GetCollisionProperties()))
	    cellNode->RemoveNode (node);
	}
      }

    }
    return true;
  }