亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? brush.cpp

?? 3D游戲場景編輯器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	while (pBrush != NULL)
	{
		BrushList_Remove (pList, pBrush);
		Brush_Destroy(&pBrush);
		pBrush = BrushList_GetNext (&bi);
	}
}

Brush *BrushList_GetFirst 
	(
	  BrushList *pList, 
	  BrushIterator *bi
	 )
{
	if (pList == NULL)		//	post 0.55
	{
		MessageBox(NULL, "pList == NULL", "BrushList_GetFirst", MB_OK);
		return NULL;
	}

	assert (pList != NULL);
	assert (bi != NULL);


	
	if (pList->First == NULL)
	{
	
		*bi = NULL;
	}
	else
	{
		*bi = pList->First->Next;
	}
	return pList->First;
}

Brush *BrushList_GetNext 
	(
	  BrushIterator *bi
	)
{
	assert (bi != NULL);

	if (*bi == NULL)
	{
		return NULL;
	}
	else
	{
		Brush *b;

		b = *bi;
		*bi = (*bi)->Next;

		return b;
	}
}

Brush *BrushList_GetLast
	(
	  BrushList *pList, 
	  BrushIterator *bi
	 )
{
	if (pList == NULL)		//	post 0.55
	{
		MessageBox(NULL, "pList == NULL", "BrushList_GetLast", MB_OK);
		return NULL;
	}

	assert (pList != NULL);
	assert (bi != NULL);

	if (pList->Last == NULL)
	{
		*bi = NULL;
	}
	else
	{
		*bi = pList->Last->Prev;
	}
	return pList->Last;
}

Brush *BrushList_GetPrev
	(
	  BrushIterator *bi
	)
{
	assert (bi != NULL);

	if (*bi == NULL)
	{
		return NULL;
	}
	else
	{
		Brush *b;

		b = *bi;
		*bi = (*bi)->Prev;
		return b;
	}
}

int BrushList_Count
	(
	  BrushList const *pList,
	  int CountFlags
	)
{
	int Count;
	Brush *b;
//	geBoolean bResult = GE_TRUE;

	if (pList == NULL)		//	post 0.55
	{
		MessageBox(NULL, "pList == NULL", "BrushList_Count", MB_OK);
		return 0;
	}
	
	assert (pList != NULL);

	Count = 0;

	b = pList->First;
	while (b != NULL)
	{
		geBoolean CountIt;
		switch (b->Type)
		{
			case BRUSH_MULTI :
				CountIt = (CountFlags & BRUSH_COUNT_MULTI);
				break;

			case BRUSH_LEAF :
				CountIt = (CountFlags & BRUSH_COUNT_LEAF);
				break;

			case BRUSH_CSG :
				CountIt = (CountFlags & BRUSH_COUNT_CSG);
				break;

			default :
				assert (0);
				CountIt = GE_FALSE;
				break;
		}
		if (CountIt)
		{
			++Count;
		}

		if ((b->Type == BRUSH_MULTI) && (!(CountFlags & BRUSH_COUNT_NORECURSE)))
		{
			Count += BrushList_Count (b->BList, CountFlags);
		}
		b = b->Next;
	}

	return Count;
}

// call CallBack for top level brushes in the list...
geBoolean BrushList_Enum
	(
		BrushList const *pList,
		void *			lParam,
		BrushList_CB	CallBack
	)
{
	geBoolean bResult = GE_TRUE ;	// TRUE means entire list was processed
	Brush * b;

	if (pList == NULL)		//	post 0.55
	{
		MessageBox(NULL, "pList == NULL", "BrushList_Enum", MB_OK);
		return GE_FALSE;
	}

	assert (pList != NULL);

	b = pList->First;
	while (b != NULL)
	{
		if( (bResult = CallBack( b, lParam )) == GE_FALSE )
			break ;		
		b = b->Next;
	}
	return bResult ;
}

// call CallBack for all brushes in the list...
geBoolean BrushList_EnumAll
	(
		BrushList const *pList,
		void *			lParam,
		BrushList_CB	CallBack
	)
{
	geBoolean bResult = GE_TRUE ;	// TRUE means entire list was processed
	Brush * b;

	if (pList == NULL)		//	post 0.55
	{
		MessageBox(NULL, "pList == NULL", "BrushList_EnumAll", MB_OK);
		return GE_FALSE;
	}

	assert (pList != NULL);

	b = pList->First;
	while (b != NULL)
	{
		if( (bResult = CallBack( b, lParam )) == GE_FALSE )
			break ;		
		if (b->Type == BRUSH_MULTI)
		{
			bResult = BrushList_EnumAll (b->BList, lParam, CallBack);
			if (!bResult)
			{
				break;
			}
		}
		b = b->Next;
	}
	return bResult ;
}

//traverses inorder 
int	BrushList_EnumLeafBrushes(const BrushList	*pList,
							  void *			pVoid,
							  BrushList_CB		CallBack)
{
	geBoolean	bResult	=GE_TRUE;	// TRUE means entire list was processed
	Brush		*b;

	if (pList == NULL)		//	post 0.55
	{
		MessageBox(NULL, "pList == NULL", "BrushList_EnumLeafBrushes", MB_OK);
		return 0;
	}

	
	assert(pList != NULL);

	for(b=pList->First;b;b=b->Next)
	{
		assert(b->Type!=BRUSH_CSG);

		if(b->Type==BRUSH_MULTI)
		{
			if(!BrushList_EnumLeafBrushes(b->BList, pVoid, CallBack))
			{
				break;
			}
		}
		else if( (bResult = CallBack( b, pVoid )) == GE_FALSE )
		{
			break;
		}
	}
	return bResult ;
}

//grabs csg brushes and leafs with no children
//the exception being hollows which are all based
//on a parent multi and might contain a hollowcut
int	BrushList_EnumCSGBrushes(const BrushList	*pList,
							  void *			pVoid,
							  BrushList_CB		CallBack)
{
	geBoolean	bResult	=GE_TRUE;	// TRUE means entire list was processed
	Brush		*b;

	assert(pList != NULL);

	for(b=pList->First;b && bResult;b=b->Next)
	{
		switch (b->Type)
		{
			case BRUSH_MULTI :
				bResult = BrushList_EnumCSGBrushes (b->BList, pVoid, CallBack);
				break;
			case BRUSH_LEAF :
				if (b->BList)
				{
					bResult = BrushList_EnumCSGBrushes (b->BList, pVoid, CallBack);
				}
				else
				{
					if(!(b->Flags & (BRUSH_HOLLOW | BRUSH_HOLLOWCUT)))
					{
						bResult = CallBack (b, pVoid);
					}
				}
				break;
			case BRUSH_CSG :
				bResult = CallBack (b, pVoid);
				break;
			default :
				assert (0);		// bad brush type
				bResult = GE_FALSE;
				break;
		}
	}
	return bResult ;
}

geBoolean	Brush_GetParent(const BrushList	*pList,		//list to search
							const Brush		*b,			//brush to find
							Brush			**bParent)	//parent returned
{
	Brush	*b2;

	assert(b);
	assert(pList);
	assert(bParent);

	for(b2=pList->First;b2;b2=b2->Next)

	{
		if(b2==b)
		{
			*bParent	=(Brush *)b;	//const override!
			return		GE_TRUE;
		}

		if(b2->Type==BRUSH_LEAF)
		{
			if(b2->BList)
			{
				if(Brush_GetParent(b2->BList, b, bParent))
				{
					*bParent	=b2;
					return		GE_TRUE;
				}
			}
		}
		else if(b2->Type==BRUSH_MULTI)
		{
			if(Brush_GetParent(b2->BList, b, bParent))
			{
				*bParent	=b2;
				return		GE_TRUE;
			}
		}
	}
	return	GE_FALSE;

}


Brush *	Brush_GetTopLevelParent 
	(
	  const BrushList	*pList,		//list to search
	  const Brush		*b			//brush to find
	)
{
	Brush const *bWork;
	Brush *pImmediateParent;

	bWork = b;

	while (Brush_GetParent (pList, bWork, &pImmediateParent) == GE_TRUE)
	{
		if (bWork == pImmediateParent)
		{
			break;
		}
		bWork = pImmediateParent;
	}
	return (Brush *)bWork;
}


static geBoolean	Brush_SelectMatchingFace(Brush *b, Face *f, Face **pMatchingFace)
{
	Face		*f2;
	const Plane	*p, *p2;
	int			i;

	assert(b);

	p	=Face_GetPlane(f);
	for(i=0;i < FaceList_GetNumFaces(b->Faces);i++)
	{
		f2	=FaceList_GetFace(b->Faces, i);
		p2	=Face_GetPlane(f2);

		if(b->Flags & BRUSH_SUBTRACT)
		{
			geVec3d	InvNorm	=p2->Normal;
			geVec3d_Inverse(&InvNorm);

			if(geVec3d_Compare(&p->Normal, &InvNorm, 0.01f))
			{
				if(((p->Dist + p2->Dist) > -0.01f)&&((p->Dist + p2->Dist) < 0.01f))
				{
					Face_SetSelected(f2, GE_TRUE);
					*pMatchingFace = f2;
					return	GE_TRUE;
				}
			}
		}
		else
		{
			if(geVec3d_Compare(&p->Normal, &p2->Normal, 0.01f))
			{
				if(((p->Dist - p2->Dist) > -0.01f)&&((p->Dist - p2->Dist) < 0.01f))
				{
					Face_SetSelected(f2, GE_TRUE);
					*pMatchingFace = f2;
					return	GE_TRUE;
				}
			}
		}
	}
	return	GE_FALSE;
}


static geBoolean	BrushList_SelectMatchingCutFace
	(
		const BrushList	*pList,
		const Brush		*b,
		Face			*f,
		Brush			**CutBrush,
		Face			**pMatchingFace
	)
{
	Brush	*cb;

	assert(b);
	assert(CutBrush);
	assert(pList);
	assert(f);

	if(b->Type==BRUSH_LEAF)
	{
		for(cb=pList->Last;cb;cb=cb->Prev)
		{
			if(cb==b)
			{
				break;
			}
			if(Brush_TestBoundsIntersect(b, &cb->BoundingBox))
			{
				if(cb->Type==BRUSH_MULTI)
				{
					if(BrushList_SelectMatchingCutFace(cb->BList, b, f, CutBrush, pMatchingFace))
					{
						return	GE_TRUE;
					}
				}
				else if(cb->Flags & BRUSH_SUBTRACT)
				{
					if(Brush_SelectMatchingFace(cb, f, pMatchingFace))
					{
						*CutBrush	=cb;
						return		GE_TRUE;
					}
				}
			}
		}
	}
	return	GE_FALSE;
}

Brush * BrushList_FindFaceParent (const BrushList *pList, const Face *pFace)
{
	Brush *pBrush;

	for (pBrush = pList->First; pBrush != NULL; pBrush = pBrush->Next)
	{
		switch (pBrush->Type)

		{
			case BRUSH_MULTI :
			{
				Brush *pFound;

				pFound = BrushList_FindFaceParent (pBrush->BList, pFace);
				if (pFound != NULL)
				{
					return pFound;
				}
				break;
			}
			case BRUSH_LEAF :
			case BRUSH_CSG :




			{
				int i;
				for(i=0;i < Brush_GetNumFaces(pBrush);i++)


				{
					Face	*pCheckFace;

					pCheckFace = Brush_GetFace (pBrush, i);
					if (pFace == pCheckFace)
					{
						return pBrush;
					}
				}
				break;;
			}
			default :
				assert (0);
				break;
		}
	}
	return NULL;
}

Brush * BrushList_FindTopLevelFaceParent (const BrushList *pList, const Face *pFace)
{
	Brush *bFound;

	bFound = BrushList_FindFaceParent (pList, pFace);
	if (bFound != NULL)
	{
		bFound = Brush_GetTopLevelParent (pList, bFound);
	}
	return bFound;
}

static	geFloat		dists[256];
static	uint8		sides[256];
static	uint8		fsides[256];

enum SideFlags
{
	SIDE_FRONT	=0,
	SIDE_BACK	=1,
	SIDE_ON		=2,
	SIDE_SPLIT	=3
};


//handle cases where two brushes share a coplanar face
static int	Brush_MostlyOnSide(const Brush *b, const Plane *p)
{
	int		i, side;
	geFloat	max;

	max		=0;
	side	=SIDE_FRONT;
	for(i=0;i < FaceList_GetNumFaces(b->Faces);i++)
	{
		Face_MostlyOnSide(FaceList_GetFace(b->Faces, i), p, &max, &side);
	}
	return	side;
}

//Split the original brush by the face passed in returning
//the brush in front of and the brush behind the 
//face passed in.  
//front and back brush pointers should be null on entry
void	Brush_SplitByFace(Brush	*ogb,	//original brush
						  Face	*sf,	//split face
						  Brush	**fb,	//front brush
						  Brush	**bb)	//back brush
{
	const Plane	*p;
	int			i;
	uint8		cnt[3], fcnt[4];
	FaceList	*fl, *bl;
	const Face	*f;
	Face		*cpf, *ff, *bf, *midf;
	geBoolean	WasSplit	=GE_FALSE;

	assert(ogb);
	assert

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
菠萝蜜视频在线观看一区| 国产乱对白刺激视频不卡| 国产精品高潮久久久久无| 日韩欧美www| 日韩欧美一区在线| 久久久99精品免费观看不卡| 国产香蕉久久精品综合网| 久久精品夜色噜噜亚洲a∨| 久久新电视剧免费观看| 国产欧美日韩精品在线| 亚洲天堂成人网| 亚洲国产综合91精品麻豆| 亚洲国产成人av| 久久精品免费看| 国产电影一区二区三区| 色综合天天综合狠狠| 欧美日韩专区在线| 欧美日韩一区二区三区在线| 91精品国产欧美一区二区| 精品久久久久久最新网址| 国产午夜三级一区二区三| 一区二区三区国产| 青青草国产成人av片免费| 国产精品一区2区| 一本大道av伊人久久综合| 91精品国产乱码久久蜜臀| 久久久久青草大香线综合精品| 中文字幕不卡在线播放| 无吗不卡中文字幕| 国产精品主播直播| 欧美日韩激情一区二区三区| 久久久久高清精品| 亚洲主播在线观看| 国产成人综合在线| 欧美日韩在线亚洲一区蜜芽| 久久综合九色综合久久久精品综合 | 国产精品你懂的在线欣赏| 一区二区三区在线高清| 日本欧美一区二区三区乱码| 大尺度一区二区| 欧美福利电影网| 中文字幕佐山爱一区二区免费| 另类小说一区二区三区| 91在线看国产| 欧美国产精品一区| 麻豆成人久久精品二区三区小说| 99久久国产综合精品色伊| 久久久久久久综合色一本| 午夜视黄欧洲亚洲| av电影一区二区| 精品国产区一区| 午夜免费欧美电影| 色中色一区二区| 国产精品―色哟哟| 蜜桃视频第一区免费观看| 麻豆精品一二三| 亚洲欧美综合网| 中文字幕av一区二区三区| 欧美久久一二三四区| 亚洲桃色在线一区| 国产成人自拍网| 久久综合五月天婷婷伊人| 日韩国产欧美在线观看| 色综合色狠狠综合色| 中文字幕免费一区| 国产麻豆日韩欧美久久| 久久综合色之久久综合| 精久久久久久久久久久| 精品久久人人做人人爽| 九九国产精品视频| 欧美成人三级电影在线| 久久国产麻豆精品| 久久综合狠狠综合久久综合88| 久久se精品一区精品二区| 亚洲精品一区二区三区香蕉| 青青草伊人久久| 欧美不卡激情三级在线观看| 久久er精品视频| 欧美精品一区二区三区很污很色的| 日韩精品成人一区二区在线| 欧美一区二区三区视频在线观看| 免费观看一级欧美片| 久久综合久久99| 国产91精品免费| 亚洲品质自拍视频网站| 欧美日韩亚洲不卡| 精品一区二区在线观看| 国产三级精品三级在线专区| 99久久免费精品| 亚洲专区一二三| 精品久久久久久无| 波波电影院一区二区三区| 一区二区三区在线视频观看| 欧美久久久久久久久久| 久88久久88久久久| 国产精品护士白丝一区av| 欧美性猛交xxxxxx富婆| 另类小说一区二区三区| 国产精品视频一二三区| 在线观看欧美日本| 精东粉嫩av免费一区二区三区| 久久久三级国产网站| 91小宝寻花一区二区三区| 午夜精品福利一区二区三区av| 日韩欧美区一区二| 91免费国产在线| 久久成人久久鬼色| 夜夜操天天操亚洲| 久久久三级国产网站| 欧美日韩二区三区| 成人的网站免费观看| 日韩高清中文字幕一区| 中文字幕一区二区三区视频| 欧美精品xxxxbbbb| 成人h动漫精品一区二| 激情综合网av| 亚洲.国产.中文慕字在线| 国产精品嫩草99a| 欧美一级片在线| 色婷婷久久久综合中文字幕| 国产成人免费视频网站 | 高清成人免费视频| 亚洲国产精品久久久男人的天堂| 久久久久久久精| 91精品综合久久久久久| 91麻豆文化传媒在线观看| 国产最新精品精品你懂的| 日韩中文字幕亚洲一区二区va在线| 国产精品色哟哟| 国产香蕉久久精品综合网| 日韩精品一区二区三区老鸭窝| 欧美日韩精品一区二区天天拍小说| 成人免费视频一区二区| 国产激情一区二区三区桃花岛亚洲| 青青草国产成人99久久| 亚洲高清一区二区三区| 亚洲精品老司机| 亚洲欧美日韩综合aⅴ视频| 国产精品美女久久久久aⅴ| 久久精品夜色噜噜亚洲aⅴ| 日韩免费高清视频| 欧美一区二区三区电影| 欧美一级片在线看| 91麻豆精品国产91久久久使用方法| 欧洲精品视频在线观看| 欧美色图一区二区三区| 欧美综合一区二区| 欧美日本高清视频在线观看| 在线不卡中文字幕| 欧美男同性恋视频网站| 欧美日韩三级在线| 欧美日韩视频在线第一区| 欧美二区乱c少妇| 欧美日本国产一区| 欧美一区二区三区小说| 日韩免费观看2025年上映的电影 | 欧洲精品在线观看| 欧美中文字幕亚洲一区二区va在线| 色偷偷成人一区二区三区91| 日本精品视频一区二区| 欧美日韩一卡二卡三卡 | 免费成人美女在线观看.| 日本视频一区二区| 国内精品嫩模私拍在线| 国产成人免费视频一区| 色综合久久久网| 欧美日韩国产综合视频在线观看 | 在线观看视频91| 欧美电影一区二区| 精品日韩一区二区三区 | 亚洲激情成人在线| 视频一区国产视频| 国产精品一级黄| 色一情一乱一乱一91av| 日韩一区二区电影| 国产欧美一区二区在线| 亚洲一区二区在线免费看| 久久国产日韩欧美精品| 91视视频在线观看入口直接观看www | 国产精品一区二区你懂的| 91丝袜高跟美女视频| 日韩一区二区三区视频在线观看| 久久亚洲欧美国产精品乐播| 日韩美女啊v在线免费观看| 日本在线不卡一区| 成人精品小蝌蚪| 91精品在线观看入口| 国产精品免费久久久久| 五月婷婷色综合| 97久久精品人人做人人爽| 欧美va亚洲va香蕉在线| 亚洲另类在线制服丝袜| 国产在线播精品第三| 欧美午夜不卡在线观看免费| 国产色婷婷亚洲99精品小说| 日韩国产欧美在线播放| 一本色道a无线码一区v| 久久久精品国产免费观看同学| 午夜精品久久一牛影视| 91视频国产观看|