当前位置: 首页>>代码示例>>C++>>正文


C++ MobilizedBody::getBody方法代码示例

本文整理汇总了C++中MobilizedBody::getBody方法的典型用法代码示例。如果您正苦于以下问题:C++ MobilizedBody::getBody方法的具体用法?C++ MobilizedBody::getBody怎么用?C++ MobilizedBody::getBody使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在MobilizedBody的用法示例。


在下文中一共展示了MobilizedBody::getBody方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: generateDecorations

    virtual void generateDecorations(const State& state, Array_<DecorativeGeometry>& geometry) override {
        const Vec3 frcColors[] = {Red,Orange,Cyan,Green,Blue,Yellow};
        m_system.realize(state, Stage::Velocity);

        const int ncont = m_compliant.getNumContactForces(state);
        for (int i=0; i < ncont; ++i) {
            const ContactForce& force = m_compliant.getContactForce(state,i);
            const ContactId     id    = force.getContactId();
			// define if it's femur_lat -> femur_med contact pair: id=8
			//if (id == 6 || id == 8 || id==4 || id==2 || id==10 )
			//	continue;
			ContactSnapshot cs = m_compliant.getContactTrackerSubsystem().getActiveContacts(state);
			//cout <<  "contact: " << id << endl;
			//ContactId idFemur = cs.getContactIdForSurfacePair( ContactSurfaceIndex(2), ContactSurfaceIndex(3));
			//ContactId idMeniscFemur1 = cs.getContactIdForSurfacePair( ContactSurfaceIndex(0), ContactSurfaceIndex(2));
			//ContactId idMeniscTibia1 = cs.getContactIdForSurfacePair( ContactSurfaceIndex(0), ContactSurfaceIndex(4));
			//ContactId idMeniscFemur2 = cs.getContactIdForSurfacePair( ContactSurfaceIndex(1), ContactSurfaceIndex(3));
			//ContactId idMeniscTibia2 = cs.getContactIdForSurfacePair( ContactSurfaceIndex(1), ContactSurfaceIndex(4));
			ContactId idLatFemurTibia = cs.getContactIdForSurfacePair( ContactSurfaceIndex(0), ContactSurfaceIndex(2));
			ContactId idMedFemurTibia = cs.getContactIdForSurfacePair( ContactSurfaceIndex(1), ContactSurfaceIndex(2));
			ContactId idFemur = cs.getContactIdForSurfacePair( ContactSurfaceIndex(0), ContactSurfaceIndex(1));

			if (id == idFemur)
				continue;

			const SimbodyMatterSubsystem& matter = m_compliant.getMultibodySystem().getMatterSubsystem();
			// get tibia's mobilized body
			MobilizedBody tibiaMobod = matter.getMobilizedBody(MobilizedBodyIndex(22));
			MobilizedBody femurLatmobod = matter.getMobilizedBody(MobilizedBodyIndex(19));
			MobilizedBody femurMedmobod = matter.getMobilizedBody(MobilizedBodyIndex(20));

			//for (int numContacts=0; numContacts<cs.getNumContacts(); numContacts++)
			//{
				//ContactSurfaceIndex csi1 = cs.getContact(numContacts).getSurface1();
				//ContactSurfaceIndex csi2 = cs.getContact(numContacts).getSurface2();
				//cout << "surf1: " << csi1 << " surf2: " << csi2 << endl;
			//}
			if (cs.getNumContacts()>0)
			{
				DecorativeGeometry decTibiaContactGeometry = tibiaMobod.getBody().updDecoration(0);
				decTibiaContactGeometry.setOpacity( 0.9);
				decTibiaContactGeometry.setColor( Gray);

				DecorativeGeometry decFemurLatContactGeometry = femurLatmobod.getBody().updDecoration(0);
				decFemurLatContactGeometry.setOpacity(1);
				decFemurLatContactGeometry.setColor(Gray);

				DecorativeGeometry decFemurMedContactGeometry = femurMedmobod.getBody().updDecoration(0);
				decFemurMedContactGeometry.setOpacity(1);
				decFemurMedContactGeometry.setColor(Gray);

				// Tibia transformation
				const Transform& X_BM = tibiaMobod.getOutboardFrame(state); // M frame in B
				const Transform& X_GB = tibiaMobod.getBodyTransform(state); // B in Ground
				const Transform& X_PF = tibiaMobod.getInboardFrame(state);
				Transform X_GM = X_GB*X_BM; // M frame in Ground
				// rotate 
				//Rotation& newRot = X_GM.updR();
				//Rotation parentRot = X_PF.R();
				//newRot.operator*=( parentRot.invert());
				// translate in front of the whole body
				X_GM.setP( X_GM.operator+=( Vec3(0.3,0,0)).p());
				// set new transform
				decTibiaContactGeometry.setTransform( X_GM);

				// Medial Femur Transformation
				const Transform& X_BM_medFemur = femurMedmobod.getOutboardFrame(state); // M frame in B
				const Transform& X_GB_medFemur = femurMedmobod.getBodyTransform(state); // B in Ground
				const Transform& X_PF_medFemur = femurMedmobod.getInboardFrame(state);
				Transform X_GM_medFemur = X_GB_medFemur*X_BM_medFemur; // M frame in Ground
				// rotate 
				//Rotation& newRot_medFemur = X_GM_medFemur.updR();
				//Rotation parentRot_medFemur = X_PF_medFemur.R();
				//newRot_medFemur.operator*=(parentRot_medFemur).operator*=(Rotation(1.57079, CoordinateAxis::ZCoordinateAxis()));
				//newRot_medFemur.setRotationFromAngleAboutZ(1.570796326794897);
				// translate in front of the whole body
				X_GM_medFemur.setP(X_GM_medFemur.operator+=(Vec3(0.3, 0.1, 0)).p());
				// set new transform
				decFemurMedContactGeometry.setTransform(X_GM_medFemur);

				// Lateral Femur Transformation
				const Transform& X_BM_latFemur = femurLatmobod.getOutboardFrame(state); // M frame in B
				const Transform& X_GB_latFemur = femurLatmobod.getBodyTransform(state); // B in Ground
				const Transform& X_PF_latFemur = femurLatmobod.getInboardFrame(state);
				Transform X_GM_latFemur = X_GB_latFemur*X_BM_latFemur; // M frame in Ground
				// rotate 
				//Rotation& newRot_latFemur = X_GM_latFemur.updR();
				//Rotation parentRot_latFemur = X_PF_latFemur.R();
				//newRot_latFemur.operator*=(parentRot_latFemur).operator*=(Rotation(1.57079, CoordinateAxis::ZCoordinateAxis()));
				//newRot_latFemur.setRotationFromAngleAboutZ(1.570796326794897);
				// translate in front of the whole body
				X_GM_latFemur.setP(X_GM_latFemur.operator+=(Vec3(0.3, 0.1, 0)).p());
				// set new transform
				decFemurLatContactGeometry.setTransform(X_GM_latFemur);

				ContactPatch patch;
				const bool found = m_compliant.calcContactPatchDetailsById(state,id,patch);
				//cout << "patch for id" << id << " found=" << found << endl;
				//cout << "resultant=" << patch.getContactForce() << endl;
				//cout << "num details=" << patch.getNumDetails() << endl;
//.........这里部分代码省略.........
开发者ID:mariiiiiia,项目名称:ACLproj,代码行数:101,代码来源:ACLsimulatorimpl.cpp


注:本文中的MobilizedBody::getBody方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。