コード例 #1
0
ファイル: qcsg.c プロジェクト: 6779660/halflife
/*
==================
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);
	}
}
コード例 #2
0
ファイル: writebsp.c プロジェクト: 6779660/halflife
/*
==================
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]);
		}
	}
}
コード例 #3
0
ファイル: IFStockNotein.cpp プロジェクト: bitores/QT_Demo
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;
}
コード例 #4
0
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();
            }
        }
    }
}