コード例 #1
0
ファイル: interface.cpp プロジェクト: privatosan/RayStorm
ULONG csg(ULONG *arg)
{
	int operation;
	void *csg;
	rsiResult err;

	err = rsiCreateCSG(CTXT, &csg);
	if(err)
		return err;

	if(arg[0])
	{
		if(KEYWORD((char*)arg[0], "UNION"))
			operation = rsiFCSGUnion;
		else
			if(KEYWORD((char*)arg[0], "INTERSECTION"))
				operation = rsiFCSGIntersection;
			else
				if(KEYWORD((char*)arg[0], "DIFFERENCE"))
					operation = rsiFCSGDifference;
				else
					return ERROR_CSGOPERATOR;

		err = rsiSetCSG(CTXT, csg, rsiTCSGOperator, operation, rsiTDone);
		if(err)
			return err;
	}

	if(arg[1])
	{
		err = rsiSetCSG(CTXT, csg, rsiTCSGFlags, rsiFCSGInverted, rsiTDone);
		if(err)
			return err;
	}

	if(insideCSG > 0)
	{
		SetCSGObject(csg);
		insideCSG--;
	}

	if(!AddCSGItem(csg))
		return ERROR_MEM;
	insideCSG += 2;

	return rsiERR_NONE;
}
コード例 #2
0
ファイル: csgstack.cpp プロジェクト: Kalamatee/RayStorm
/*************
 * FUNCTION:      SetCSGObject
 * DESCRIPTION:   Set one object for a CSG object
 * INPUT:         obj      object
 * OUTPUT:        TRUE if ok else FALSE
 *************/
BOOL SetCSGObject(void *obj)
{
	CSGSTACK *next;
	rsiResult err;

	if(!root)
		return FALSE;

	if(root->first)
	{
#if defined(__PPC__) && defined(LIB_ARG)
		err = rsiSetCSG(RayStormBase, rc, root->csg, rsiTCSGObject1, obj, rsiTDone);
#else
		err = rsiSetCSG(rc, root->csg, rsiTCSGObject1, obj, rsiTDone);
#endif
		if(err)
			return FALSE;

		root->first = FALSE;
	}
	else
	{
#if defined(__PPC__) && defined(LIB_ARG)
		err = rsiSetCSG(RayStormBase, rc, root->csg, rsiTCSGObject2, obj, rsiTDone);
#else
		err = rsiSetCSG(rc, root->csg, rsiTCSGObject2, obj, rsiTDone);
#endif
		if(err)
			return FALSE;

		next = root->next;
		delete root;
		root = next;
	}

	return TRUE;
}