map<string,MetaData_YML_Backed* > MetaData_YML_Backed::get_subdata_yml()
 {
   if(leftP())
     return map<string,MetaData_YML_Backed* >{{"left_hand",this}};
   else
     return map<string,MetaData_YML_Backed* >{{"right_hand",this}};
 }
Example #2
0
static PyObject* select_folder(PyObject* /*self*/, PyObject* args)
	{
	
	
	char *ttext = NULL;
	TInt ttextlen = 0;
	TInt32 useDefaultTitle;
	
	char *rtext = NULL;
	TInt rtextlen = 0;
	TInt32 useDefaultRight;
	
	char *ltext = NULL;
	TInt ltextlen = 0;
	TInt32 useDefaultLeft;
	
	char *mtext = NULL;
	TInt mtextlen = 0;
	
	TInt32 type;
	TCommonDialogType dialogType = ECFDDialogTypeSave;
	
	
	if (!PyArg_ParseTuple(args, "iu#u#iu#iu#i", &type, &mtext, &mtextlen, &ttext, &ttextlen,&useDefaultTitle, &rtext, &rtextlen,&useDefaultRight, &ltext, &ltextlen, &useDefaultLeft))
		{
		return Py_BuildValue("s", "Cannot parse arguments.");
		}
	switch (type)
		{
		case 0:
			{
			dialogType = ECFDDialogTypeSave;
			}
		break;
		case 1:
			{
			dialogType = ECFDDialogTypeMove;
			}
		break;
		case 2:
			{
			dialogType = ECFDDialogTypeCopy;
			}
		break;
		}
	Cpyfileselect* obj = Cpyfileselect::NewL();
	const char* res;
	TPtrC titleP((TUint16*) ttext, ttextlen);
	TPtrC memory((TUint16*) mtext, mtextlen);
	TPtrC leftP((TUint16*) ltext, ltextlen);
	TPtrC rightP((TUint16*) rtext, rtextlen);
	TBuf <20> title;
	title.Append(titleP);
	TBuf <20> right;
	right.Append(rightP);
	TBuf <20> left;
	left.Append(leftP);
	if(useDefaultTitle == 1)
		{
			title = KNullDesC;
		}
	if(useDefaultRight == 1)
		{
			right = KNullDesC;
		}
	if(useDefaultLeft == 1)
		{
			left = KNullDesC;
		}
	TRAPD( err, res = obj->FolderSelectionDlg(dialogType,memory, title, right, left) );

	PyObject* result;

	if (err != KErrNone)
		{
		result = SPyErr_SetFromSymbianOSErr(err);
		}
	else
		{
		result = Py_BuildValue("s", res);
		}
	delete obj;
	return result;
	}
dgVector dgCollisionConvexHull::SupportVertex (const dgVector& dir, dgInt32* const vertexIndex) const
{
	dgAssert (dir.m_w == dgFloat32 (0.0f));
	dgInt32 index = -1;
	dgVector maxProj (dgFloat32 (-1.0e20f)); 
	if (m_vertexCount > DG_CONVEX_VERTEX_CHUNK_SIZE) {
		dgFloat32 distPool[32];
		const dgConvexBox* stackPool[32];

		dgInt32 ix = (dir[0] > dgFloat64 (0.0f)) ? 1 : 0;
		dgInt32 iy = (dir[1] > dgFloat64 (0.0f)) ? 1 : 0;
		dgInt32 iz = (dir[2] > dgFloat64 (0.0f)) ? 1 : 0;

		const dgConvexBox& leftBox = m_supportTree[m_supportTree[0].m_leftBox];
		const dgConvexBox& rightBox = m_supportTree[m_supportTree[0].m_rightBox];
		
		dgVector leftP (leftBox.m_box[ix][0], leftBox.m_box[iy][1], leftBox.m_box[iz][2], dgFloat32 (0.0f));
		dgVector rightP (rightBox.m_box[ix][0], rightBox.m_box[iy][1], rightBox.m_box[iz][2], dgFloat32 (0.0f));

		dgFloat32 leftDist = leftP.DotProduct4(dir).m_x;
		dgFloat32 rightDist = rightP.DotProduct4(dir).m_x;
		if (rightDist >= leftDist) {
			distPool[0] = leftDist;
			stackPool[0] = &leftBox; 

			distPool[1] = rightDist;
			stackPool[1] = &rightBox; 
		} else {
			distPool[0] = rightDist;
			stackPool[0] = &rightBox; 

			distPool[1] = leftDist;
			stackPool[1] = &leftBox; 
		}
		
		dgInt32 stack = 2;
		
		while (stack) {
			stack--;
			dgFloat32 dist = distPool[stack];
			if (dist > maxProj.m_x) {
				const dgConvexBox& box = *stackPool[stack];

				if (box.m_leftBox > 0) {
					dgAssert (box.m_rightBox > 0);
					const dgConvexBox& leftBox = m_supportTree[box.m_leftBox];
					const dgConvexBox& rightBox = m_supportTree[box.m_rightBox];

					dgVector leftP (leftBox.m_box[ix][0], leftBox.m_box[iy][1], leftBox.m_box[iz][2], dgFloat32 (0.0f));
					dgVector rightP (rightBox.m_box[ix][0], rightBox.m_box[iy][1], rightBox.m_box[iz][2], dgFloat32 (0.0f));

					dgFloat32 leftDist = leftP.DotProduct4(dir).m_x;
					dgFloat32 rightDist = rightP.DotProduct4(dir).m_x;
					if (rightDist >= leftDist) {
						distPool[stack] = leftDist;
						stackPool[stack] = &leftBox; 
						stack ++;
						dgAssert (stack < sizeof (distPool)/sizeof (distPool[0]));

						distPool[stack] = rightDist;
						stackPool[stack] = &rightBox; 
						stack ++;
						dgAssert (stack < sizeof (distPool)/sizeof (distPool[0]));

					} else {
						distPool[stack] = rightDist;
						stackPool[stack] = &rightBox; 
						stack ++;
						dgAssert (stack < sizeof (distPool)/sizeof (distPool[0]));

						distPool[stack] = leftDist;
						stackPool[stack] = &leftBox; 
						stack ++;
						dgAssert (stack < sizeof (distPool)/sizeof (distPool[0]));
					}
				} else {
					for (dgInt32 i = 0; i < box.m_vertexCount; i ++) {
						const dgVector& p = m_vertex[box.m_vertexStart + i];
						dgAssert (p.m_x >= box.m_box[0].m_x);
						dgAssert (p.m_x <= box.m_box[1].m_x);
						dgAssert (p.m_y >= box.m_box[0].m_y);
						dgAssert (p.m_y <= box.m_box[1].m_y);
						dgAssert (p.m_z >= box.m_box[0].m_z);
						dgAssert (p.m_z <= box.m_box[1].m_z);
						dgVector dist (p.DotProduct4(dir));
						//if (dist.m_x > maxProj.m_x) {
						//	maxProj = dist;
						//	index = box.m_vertexStart + i;
						//}
						dgVector mask (dist > maxProj);
						dgInt32 intMask = *((dgInt32*) &mask.m_x);
						index = ((box.m_vertexStart + i) & intMask) | (index & ~intMask);
						maxProj = maxProj.GetMax(dist);
					}
				}
			}
		}
	} else {
		for (dgInt32 i = 0; i < m_vertexCount; i ++) {
			const dgVector& p = m_vertex[i];
			dgVector dist (p.DotProduct4(dir));
			//if (dist.m_x > maxProj.m_x) {
			//	index = i;
			//	maxProj = dist;
			//}
			dgVector mask (dist > maxProj);
			dgInt32 intMask = *((dgInt32*) &mask.m_x);
			index = (i & intMask) | (index & ~intMask);
			maxProj = maxProj.GetMax(dist);
		}
	}

	if (vertexIndex) {
		*vertexIndex = index;
	}
	dgAssert (index != -1);
	return m_vertex[index];
}