/* ================== SaveOutside The faces remaining on the outside list are final polygons. Write them to the output file. Passable contents (water, lava, etc) will generate a mirrored copy of the face to be seen from the inside. ================== */ void SaveOutside (brush_t *b, int hull, bface_t *outside, int mirrorcontents) { bface_t *f , *next, *f2; int i; int planenum; vec3_t temp; for (f=outside ; f ; f=next) { next = f->next; if (WindingArea (f->w) < 1.0) { c_tiny++; qprintf ("Entity %i, Brush %i: tiny fragment\n" , b->entitynum, b->brushnum); continue; } // count unique faces if (!hull) { for (f2=b->hulls[hull].faces ; f2 ; f2=f2->next) { if (f2->planenum == f->planenum) { if (!f2->used) { f2->used = true; c_outfaces++; } break; } } } WriteFace (hull, f); // if (mirrorcontents != CONTENTS_SOLID) { f->planenum ^= 1; f->plane = &mapplanes[f->planenum]; f->contents = mirrorcontents; // swap point orders for (i=0 ; i<f->w->numpoints/2 ; i++) // add points backwards { VectorCopy (f->w->p[i], temp); VectorCopy (f->w->p[f->w->numpoints-1-i] , f->w->p[i]); VectorCopy (temp, f->w->p[f->w->numpoints-1-i]); } WriteFace (hull, f); } FreeFace (f); } }
/* ================== WriteDrawNodes_r ================== */ void WriteDrawNodes_r (node_t *node) { dnode_t *n; int i; face_t *f, *next; // emit a node if (numnodes == MAX_MAP_NODES) Error ("numnodes == MAX_MAP_NODES"); n = &dnodes[numnodes]; numnodes++; VectorCopy (node->mins, n->mins); VectorCopy (node->maxs, n->maxs); if (node->planenum & 1) Error ("WriteDrawNodes_r: odd planenum"); n->planenum = node->planenum; n->firstface = numfaces; for (f=node->faces ; f ; f=f->next) WriteFace (f); n->numfaces = numfaces - n->firstface; // // recursively output the other nodes // for (i=0 ; i<2 ; i++) { if (node->children[i]->planenum == -1) { if (node->children[i]->contents == CONTENTS_SOLID) n->children[i] = -1; else { n->children[i] = -(numleafs + 1); WriteDrawLeaf (node->children[i]); } } else { n->children[i] = numnodes; WriteDrawNodes_r (node->children[i]); } } }
int CIFStockNotein::WriteData(QSettings& set) { qint32 i32AllNum = 0; qint32 i32AllSum = 0; for (int i=0;i<m_Notein.GetFaceNum();i++) { WriteFace(set, i); i32AllNum += m_lstFaceList.at(i).GetCurNum(); i32AllSum += (m_lstFaceList.at(i).GetCurNum()*m_lstFaceList.at(i).GetFace()); } m_Notein.SetAllNum(i32AllNum); m_Notein.SetAllSum(i32AllSum); set.beginGroup("NOTEIN"); set.setValue("face_num", m_Notein.GetFaceNum()); set.setValue("all_num", m_Notein.GetAllNum()); set.setValue("all_sum", m_Notein.GetAllSum()); set.endGroup(); return 1; }
void CXMLExporter::WriteFacesAndEdges(CComPtr<ISkpEntityProvider> pEntProvider) { HResult hr; long nElements, i; //Recurse all the instances CComPtr<ISkpComponentInstances> pInstances = NULL; hr = pEntProvider->get_ComponentInstances(&pInstances); hr = pInstances->get_Count(&nElements); for(i=0; i<nElements; i++) { CComPtr<ISkpComponentInstance> pInstance; hr = pInstances->get_Item(i, &pInstance); CComPtr<ISkpComponentDefinition> pDef; hr = pInstance->get_ComponentDefinition(&pDef); CComPtr<ISkpEntityProvider> pEntProvider; hr = pDef->QueryInterface(IID_ISkpEntityProvider, (void**) &pEntProvider); //Push Transform, Material and Layer m_InheritanceManager.PushElement(pInstance); WriteFacesAndEdges(pEntProvider); //Pop Transform, Material and Layer m_InheritanceManager.PopElement(); } //Recurse all the groups CComPtr<ISkpGroups> pGroups = NULL; hr = pEntProvider->get_Groups(&pGroups); hr = pGroups->get_Count(&nElements); for(i=0; i<nElements; i++) { CComPtr<ISkpGroup> pGroup; hr = pGroups->get_Item(i, &pGroup); CComPtr<ISkpEntityProvider> pEntProvider; hr = pGroup->QueryInterface(IID_ISkpEntityProvider, (void**) &pEntProvider); //Push Transform, Material and Layer m_InheritanceManager.PushElement(pGroup); WriteFacesAndEdges(pEntProvider); //Pop Transform, Material and Layer m_InheritanceManager.PopElement(); } //Recurse all the images CComPtr<ISkpImages> pImages = NULL; hr = pEntProvider->get_Images(&pImages); hr = pImages->get_Count(&nElements); for(i=0; i<nElements; i++) { CComPtr<ISkpImage> pImage; hr = pImages->get_Item(i, &pImage); CComPtr<ISkpEntityProvider> pEntProvider; hr = pImage->QueryInterface(IID_ISkpEntityProvider, (void**) &pEntProvider); //Push Transform, Material and Layer m_InheritanceManager.PushElement(pImage); WriteFacesAndEdges(pEntProvider); //Pop Transform, Material and Layer m_InheritanceManager.PopElement(); } if (m_pOptions->GetExportFaces()) { //Write all the faces CComPtr<ISkpFaces> pFaces = NULL; hr = pEntProvider->get_Faces(&pFaces); hr = pFaces->get_Count(&nElements); for(i=0; i<nElements; i++) { CComPtr<ISkpFace> pFace; hr = pFaces->get_Item(i, &pFace); if (hr==S_OK) { //Push Transform, Material and Layer m_InheritanceManager.PushElement(pFace); WriteFace(pFace); //Pop Transform, Material and Layer m_InheritanceManager.PopElement(); } } } if (m_pOptions->GetExportFaces()) { //Write all the edges CComPtr<ISkpEdges> pEdges = NULL; hr = pEntProvider->get_Edges(&pEdges); hr = pEdges->get_Count(&nElements); for(i=0; i<nElements; i++) { CComPtr<ISkpEdge> pEdge; hr = pEdges->get_Item(i, &pEdge); if (hr==S_OK) { //Push Transform, Material and Layer m_InheritanceManager.PushElement(pEdge); WriteEdge(pEdge); //Pop Transform, Material and Layer m_InheritanceManager.PopElement(); } } } }