vector<int> Lattice::getIndex(int num) const { vector<int> base = _range_width; base.push_back( _atom_num_in_cell ); vector<int> res = base_transform(num, base); for(int i=0; i<_dimension; ++i) res[i] += _range[i].first; return res; }
void MSceneMessage_AfterImportOpen_CallbackFunc(void *callbackData) { MStatus status; MItDag it(MItDag::kBreadthFirst, MFn::kTransform, &status); if (!status) { status.perror("MItDag::#ctor"); return; } for(; !it.isDone(); it.next()) { MObject object = it.item(&status); if (!status) { status.perror("MObject::item"); return; } /* * Make sure the object is a Helix */ MFnDagNode dagNode(object); if (dagNode.typeId(&status) == ::Helix::Helix::id) { /* * This object is a helix, iterate over all of its bases and set their translation */ Model::Helix helix(object); for(Model::Helix::BaseIterator it = helix.begin(); it != helix.end(); ++it) { MFnTransform base_transform(it->getDagPath(status)); if (!status) { status.perror("MFnTransform::getDagPath"); return; } MVector translation = base_transform.getTranslation(MSpace::kTransform, &status); if (!status) { status.perror("MFnTransform::getTranslation"); return; } if (!(status = base_transform.setTranslation(translation, MSpace::kTransform))) { status.perror("MFnTransform::setTranslation"); return; } } } } }
weight_slider::weight_slider(const float3& position_, const float& height_, const float& mass_) : position(position_), height(height_), mass(mass_) { // avg_norm_height.fill(1.0f); // create slider bodies (base is fixed/static, tray is dynamic) constexpr float body_height = 0.025f; base_info = &pc->add_rigid_info<physics_controller::SHAPE::BOX>(0.0f, float3(0.5f, body_height, 0.5f)); tray_info = &pc->add_rigid_info<physics_controller::SHAPE::BOX>(mass, float3(0.5f, body_height, 0.5f)); base_body = &pc->add_rigid_body(*base_info, position + float3(0.5f, 0.0f, 0.5f)); tray_body = &pc->add_rigid_body(*tray_info, position + float3(0.5f, height, 0.5f)); // btTransform base_transform(btTransform::getIdentity()); btTransform tray_transform(btTransform::getIdentity()); base_transform.getBasis().setValue(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f); tray_transform.getBasis().setValue(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f); tray_transform.setOrigin(btVector3(0.0f, height - 0.1f, 0.0f)); constraint = new btSliderConstraint(*base_body->get_body(), *tray_body->get_body(), base_transform, tray_transform, true); constraint->setLowerLinLimit(0.0f); constraint->setUpperLinLimit(height); constraint->setPoweredLinMotor(true); constraint->setTargetLinMotorVelocity(100.0f); constraint->setMaxLinMotorForce(100.0f); // disable any angular rotation constraint->setLowerAngLimit(0.0f); constraint->setUpperAngLimit(0.0f); constraint->setSoftnessDirAng(0.0f); constraint->setRestitutionDirAng(0.0f); constraint->setDampingDirAng(0.0f); constraint->setSoftnessLimAng(0.0f); constraint->setRestitutionLimAng(0.0f); constraint->setDampingLimAng(0.0f); constraint->setSoftnessOrthoAng(0.0f); constraint->setRestitutionOrthoAng(0.0f); constraint->setDampingOrthoAng(0.0f); constraint->setPoweredAngMotor(false); // body rotation must also be disabled (+disable deactivation) base_body->get_body()->setActivationState(DISABLE_DEACTIVATION); base_body->get_body()->setSleepingThresholds(0.0f, 0.0f); base_body->get_body()->setAngularFactor(0.0f); tray_body->get_body()->setActivationState(DISABLE_DEACTIVATION); tray_body->get_body()->setSleepingThresholds(0.0f, 0.0f); tray_body->get_body()->setAngularFactor(0.0f); }