void LLPanelVolume::getState( ) { LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); LLViewerObject* root_objectp = objectp; if(!objectp) { objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); // *FIX: shouldn't we just keep the child? if (objectp) { LLViewerObject* parentp = objectp->getRootEdit(); if (parentp) { root_objectp = parentp; } else { root_objectp = objectp; } } } LLVOVolume *volobjp = NULL; if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) { volobjp = (LLVOVolume *)objectp; } if( !objectp ) { //forfeit focus if (gFocusMgr.childHasKeyboardFocus(this)) { gFocusMgr.setKeyboardFocus(NULL); } // Disable all text input fields clearCtrls(); return; } LLUUID owner_id; std::string owner_name; LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); // BUG? Check for all objects being editable? BOOL editable = root_objectp->permModify() && !root_objectp->isPermanentEnforced(); BOOL single_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ) && LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1; // Select Single Message if (single_volume) { getChildView("edit_object")->setVisible(true); getChildView("edit_object")->setEnabled(true); getChildView("select_single")->setVisible(false); } else { getChildView("edit_object")->setVisible(false); getChildView("select_single")->setVisible(true); getChildView("select_single")->setEnabled(true); } // Light properties BOOL is_light = volobjp && volobjp->getIsLight(); getChild<LLUICtrl>("Light Checkbox Ctrl")->setValue(is_light); getChildView("Light Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp); if (is_light && editable && single_volume) { getChildView("label color")->setEnabled(true); //mLabelColor ->setEnabled( TRUE ); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LightColorSwatch->setEnabled( TRUE ); LightColorSwatch->setValid( TRUE ); LightColorSwatch->set(volobjp->getLightBaseColor()); } childSetEnabled("label texture",true); LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); if (LightTextureCtrl) { LightTextureCtrl->setEnabled(TRUE); LightTextureCtrl->setValid(TRUE); LightTextureCtrl->setImageAssetID(volobjp->getLightTextureID()); } getChildView("Light Intensity")->setEnabled(true); getChildView("Light Radius")->setEnabled(true); getChildView("Light Falloff")->setEnabled(true); getChildView("Light FOV")->setEnabled(true); getChildView("Light Focus")->setEnabled(true); getChildView("Light Ambiance")->setEnabled(true); getChild<LLUICtrl>("Light Intensity")->setValue(volobjp->getLightIntensity()); getChild<LLUICtrl>("Light Radius")->setValue(volobjp->getLightRadius()); getChild<LLUICtrl>("Light Falloff")->setValue(volobjp->getLightFalloff()); LLVector3 params = volobjp->getSpotLightParams(); getChild<LLUICtrl>("Light FOV")->setValue(params.mV[0]); getChild<LLUICtrl>("Light Focus")->setValue(params.mV[1]); getChild<LLUICtrl>("Light Ambiance")->setValue(params.mV[2]); mLightSavedColor = volobjp->getLightColor(); } else { getChild<LLSpinCtrl>("Light Intensity", true)->clear(); getChild<LLSpinCtrl>("Light Radius", true)->clear(); getChild<LLSpinCtrl>("Light Falloff", true)->clear(); getChildView("label color")->setEnabled(false); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LightColorSwatch->setEnabled( FALSE ); LightColorSwatch->setValid( FALSE ); } childSetEnabled("label texture",false); LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); if (LightTextureCtrl) { LightTextureCtrl->setEnabled(FALSE); LightTextureCtrl->setValid(FALSE); } getChildView("Light Intensity")->setEnabled(false); getChildView("Light Radius")->setEnabled(false); getChildView("Light Falloff")->setEnabled(false); getChildView("Light FOV")->setEnabled(false); getChildView("Light Focus")->setEnabled(false); getChildView("Light Ambiance")->setEnabled(false); } // Flexible properties BOOL is_flexible = volobjp && volobjp->isFlexible(); getChild<LLUICtrl>("Flexible1D Checkbox Ctrl")->setValue(is_flexible); if (is_flexible || (volobjp && volobjp->canBeFlexible())) { getChildView("Flexible1D Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp && !volobjp->isMesh() && !objectp->isPermanentEnforced()); } else { getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false); } if (is_flexible && editable && single_volume) { getChildView("FlexNumSections")->setVisible(true); getChildView("FlexGravity")->setVisible(true); getChildView("FlexTension")->setVisible(true); getChildView("FlexFriction")->setVisible(true); getChildView("FlexWind")->setVisible(true); getChildView("FlexForceX")->setVisible(true); getChildView("FlexForceY")->setVisible(true); getChildView("FlexForceZ")->setVisible(true); getChildView("FlexNumSections")->setEnabled(true); getChildView("FlexGravity")->setEnabled(true); getChildView("FlexTension")->setEnabled(true); getChildView("FlexFriction")->setEnabled(true); getChildView("FlexWind")->setEnabled(true); getChildView("FlexForceX")->setEnabled(true); getChildView("FlexForceY")->setEnabled(true); getChildView("FlexForceZ")->setEnabled(true); LLFlexibleObjectData *attributes = (LLFlexibleObjectData *)objectp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); getChild<LLUICtrl>("FlexNumSections")->setValue((F32)attributes->getSimulateLOD()); getChild<LLUICtrl>("FlexGravity")->setValue(attributes->getGravity()); getChild<LLUICtrl>("FlexTension")->setValue(attributes->getTension()); getChild<LLUICtrl>("FlexFriction")->setValue(attributes->getAirFriction()); getChild<LLUICtrl>("FlexWind")->setValue(attributes->getWindSensitivity()); getChild<LLUICtrl>("FlexForceX")->setValue(attributes->getUserForce().mV[VX]); getChild<LLUICtrl>("FlexForceY")->setValue(attributes->getUserForce().mV[VY]); getChild<LLUICtrl>("FlexForceZ")->setValue(attributes->getUserForce().mV[VZ]); } else { getChild<LLSpinCtrl>("FlexNumSections", true)->clear(); getChild<LLSpinCtrl>("FlexGravity", true)->clear(); getChild<LLSpinCtrl>("FlexTension", true)->clear(); getChild<LLSpinCtrl>("FlexFriction", true)->clear(); getChild<LLSpinCtrl>("FlexWind", true)->clear(); getChild<LLSpinCtrl>("FlexForceX", true)->clear(); getChild<LLSpinCtrl>("FlexForceY", true)->clear(); getChild<LLSpinCtrl>("FlexForceZ", true)->clear(); getChildView("FlexNumSections")->setEnabled(false); getChildView("FlexGravity")->setEnabled(false); getChildView("FlexTension")->setEnabled(false); getChildView("FlexFriction")->setEnabled(false); getChildView("FlexWind")->setEnabled(false); getChildView("FlexForceX")->setEnabled(false); getChildView("FlexForceY")->setEnabled(false); getChildView("FlexForceZ")->setEnabled(false); } // Physics properties mComboPhysicsShapeLabel->setEnabled(editable); mSpinPhysicsGravity->set(objectp->getPhysicsGravity()); mSpinPhysicsGravity->setEnabled(editable); mSpinPhysicsFriction->set(objectp->getPhysicsFriction()); mSpinPhysicsFriction->setEnabled(editable); mSpinPhysicsDensity->set(objectp->getPhysicsDensity()); mSpinPhysicsDensity->setEnabled(editable); mSpinPhysicsRestitution->set(objectp->getPhysicsRestitution()); mSpinPhysicsRestitution->setEnabled(editable); // update the physics shape combo to include allowed physics shapes mComboPhysicsShapeType->removeall(); mComboPhysicsShapeType->add(getString("None"), LLSD(1)); BOOL isMesh = FALSE; LLSculptParams *sculpt_params = (LLSculptParams *)objectp->getParameterEntry(LLNetworkData::PARAMS_SCULPT); if (sculpt_params) { U8 sculpt_type = sculpt_params->getSculptType(); U8 sculpt_stitching = sculpt_type & LL_SCULPT_TYPE_MASK; isMesh = (sculpt_stitching == LL_SCULPT_TYPE_MESH); } if(isMesh && objectp) { const LLVolumeParams &volume_params = objectp->getVolume()->getParams(); LLUUID mesh_id = volume_params.getSculptID(); if(gMeshRepo.hasPhysicsShape(mesh_id)) { // if a mesh contains an uploaded or decomposed physics mesh, // allow 'Prim' mComboPhysicsShapeType->add(getString("Prim"), LLSD(0)); } } else { // simple prims always allow physics shape prim mComboPhysicsShapeType->add(getString("Prim"), LLSD(0)); } mComboPhysicsShapeType->add(getString("Convex Hull"), LLSD(2)); mComboPhysicsShapeType->setValue(LLSD(objectp->getPhysicsShapeType())); mComboPhysicsShapeType->setEnabled(editable && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced())); mObject = objectp; mRootObject = root_objectp; }
void FSFloaterObjectExport::addPrim(LLViewerObject* object, bool root) { LLSD prim; LLUUID object_id = object->getID(); bool default_prim = true; struct f : public LLSelectedNodeFunctor { LLUUID mID; f(const LLUUID& id) : mID(id) {} virtual bool apply(LLSelectNode* node) { return (node->getObject() && node->getObject()->mID == mID); } } func(object_id); LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode(&func); default_prim = (!FSExportPermsCheck::canExportNode(node, false)); if (root) { if (object->isAttachment()) { prim["attachment_point"] = ATTACHMENT_ID_FROM_STATE(object->getState()); } } else { LLViewerObject* parent_object = (LLViewerObject*)object->getParent(); prim["parent"] = parent_object->getID(); } prim["position"] = object->getPosition().getValue(); prim["scale"] = object->getScale().getValue(); prim["rotation"] = ll_sd_from_quaternion(object->getRotation()); if (default_prim) { LL_DEBUGS("export") << object_id.asString() << " failed export check. Using default prim" << LL_ENDL; prim["flags"] = ll_sd_from_U32((U32)0); prim["volume"]["path"] = LLPathParams().asLLSD(); prim["volume"]["profile"] = LLProfileParams().asLLSD(); prim["material"] = (S32)LL_MCODE_WOOD; } else { mExported = true; prim["flags"] = ll_sd_from_U32(object->getFlags()); prim["volume"]["path"] = object->getVolume()->getParams().getPathParams().asLLSD(); prim["volume"]["profile"] = object->getVolume()->getParams().getProfileParams().asLLSD(); prim["material"] = (S32)object->getMaterial(); if (object->getClickAction() != 0) { prim["clickaction"] = (S32)object->getClickAction(); } LLVOVolume *volobjp = NULL; if (object->getPCode() == LL_PCODE_VOLUME) { volobjp = (LLVOVolume *)object; } if(volobjp) { if(volobjp->isSculpted()) { const LLSculptParams *sculpt_params = (const LLSculptParams *)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT); if (sculpt_params) { if(volobjp->isMesh()) { if (!mAborted) { mAborted = true; } return; } else { if (exportTexture(sculpt_params->getSculptTexture())) { prim["sculpt"] = sculpt_params->asLLSD(); } else { LLSculptParams default_sculpt; prim["sculpt"] = default_sculpt.asLLSD(); } } } } if(volobjp->isFlexible()) { const LLFlexibleObjectData *flexible_param_block = (const LLFlexibleObjectData *)object->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); if (flexible_param_block) { prim["flexible"] = flexible_param_block->asLLSD(); } } if (volobjp->getIsLight()) { const LLLightParams *light_param_block = (const LLLightParams *)object->getParameterEntry(LLNetworkData::PARAMS_LIGHT); if (light_param_block) { prim["light"] = light_param_block->asLLSD(); } } if (volobjp->hasLightTexture()) { const LLLightImageParams* light_image_param_block = (const LLLightImageParams*)object->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); if (light_image_param_block) { prim["light_texture"] = light_image_param_block->asLLSD(); } } } if(object->isParticleSource()) { LLViewerPartSourceScript* partSourceScript = object->getPartSourceScript(); prim["particle"] = partSourceScript->mPartSysData.asLLSD(); if (!exportTexture(partSourceScript->mPartSysData.mPartImageID)) { prim["particle"]["PartImageID"] = LLUUID::null.asString(); } } U8 texture_count = object->getNumTEs(); for(U8 i = 0; i < texture_count; ++i) { LLTextureEntry *checkTE = object->getTE(i); LL_DEBUGS("export") << "Checking texture number " << (S32)i << ", ID " << checkTE->getID() << LL_ENDL; if (FSCommon::isDefaultTexture(checkTE->getID())) // <FS:CR> Check against default textures { LL_DEBUGS("export") << "...is a default texture." << LL_ENDL; prim["texture"].append(checkTE->asLLSD()); } else if (exportTexture(checkTE->getID())) { LL_DEBUGS("export") << "...export check passed." << LL_ENDL; prim["texture"].append(checkTE->asLLSD()); } else { LL_DEBUGS("export") << "...export check failed." << LL_ENDL; checkTE->setID(LL_DEFAULT_WOOD_UUID); // TODO: use user option of default texture. prim["texture"].append(checkTE->asLLSD()); } // [FS:CR] Materials support if (checkTE->getMaterialParams().notNull()) { LL_DEBUGS("export") << "found materials. Checking permissions..." << LL_ENDL; LLSD params = checkTE->getMaterialParams().get()->asLLSD(); /// *TODO: Feeling lazy so I made it check both. This is incorrect and needs to be expanded /// to retain exportable textures not just failing both when one is non-exportable (or unset). if (exportTexture(params["NormMap"].asUUID()) && exportTexture(params["SpecMap"].asUUID())) { LL_DEBUGS("export") << "...passed check." << LL_ENDL; prim["materials"].append(params); } } } if (!object->getPhysicsShapeUnknown()) { prim["ExtraPhysics"]["PhysicsShapeType"] = (S32)object->getPhysicsShapeType(); prim["ExtraPhysics"]["Density"] = (F64)object->getPhysicsDensity(); prim["ExtraPhysics"]["Friction"] = (F64)object->getPhysicsFriction(); prim["ExtraPhysics"]["Restitution"] = (F64)object->getPhysicsRestitution(); prim["ExtraPhysics"]["GravityMultiplier"] = (F64)object->getPhysicsGravity(); } prim["name"] = node->mName; prim["description"] = node->mDescription; prim["creation_date"] = ll_sd_from_U64(node->mCreationDate); LLAvatarName avatar_name; LLUUID creator_id = node->mPermissions->getCreator(); if (creator_id.notNull()) { prim["creator_id"] = creator_id; if (LLAvatarNameCache::get(creator_id, &avatar_name)) { prim["creator_name"] = avatar_name.asLLSD(); } } LLUUID owner_id = node->mPermissions->getOwner(); if (owner_id.notNull()) { prim["owner_id"] = owner_id; if (LLAvatarNameCache::get(owner_id, &avatar_name)) { prim["owner_name"] = avatar_name.asLLSD(); } } LLUUID group_id = node->mPermissions->getGroup(); if (group_id.notNull()) { prim["group_id"] = group_id; if (LLAvatarNameCache::get(group_id, &avatar_name)) { prim["group_name"] = avatar_name.asLLSD(); } } LLUUID last_owner_id = node->mPermissions->getLastOwner(); if (last_owner_id.notNull()) { prim["last_owner_id"] = last_owner_id; if (LLAvatarNameCache::get(last_owner_id, &avatar_name)) { prim["last_owner_name"] = avatar_name.asLLSD(); } } prim["base_mask"] = ll_sd_from_U32(node->mPermissions->getMaskBase()); prim["owner_mask"] = ll_sd_from_U32(node->mPermissions->getMaskOwner()); prim["group_mask"] = ll_sd_from_U32(node->mPermissions->getMaskGroup()); prim["everyone_mask"] = ll_sd_from_U32(node->mPermissions->getMaskEveryone()); prim["next_owner_mask"] = ll_sd_from_U32(node->mPermissions->getMaskNextOwner()); prim["sale_info"] = node->mSaleInfo.asLLSD(); prim["touch_name"] = node->mTouchName; prim["sit_name"] = node->mSitName; static LLCachedControl<bool> sExportContents(gSavedSettings, "FSExportContents"); if (sExportContents) { mInventoryRequests.push_back(object_id); object->registerInventoryListener(this, NULL); object->dirtyInventory(); object->requestInventory(); } } mManifest["prim"][object_id.asString()] = prim; }
void LLPanelVolume::getState( ) { LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); LLViewerObject* root_objectp = objectp; if(!objectp) { objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); // *FIX: shouldn't we just keep the child? if (objectp) { LLViewerObject* parentp = objectp->getRootEdit(); if (parentp) { root_objectp = parentp; } else { root_objectp = objectp; } } } LLVOVolume *volobjp = NULL; if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) { volobjp = (LLVOVolume *)objectp; } if( !objectp ) { //forfeit focus if (gFocusMgr.childHasKeyboardFocus(this)) { gFocusMgr.setKeyboardFocus(NULL); } // Disable all text input fields clearCtrls(); return; } BOOL owners_identical; LLUUID owner_id; std::string owner_name; owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); // BUG? Check for all objects being editable? BOOL editable = root_objectp->permModify(); BOOL single_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ) && LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1; // Select Single Message if (single_volume) { childSetVisible("edit_object",true); childSetEnabled("edit_object",true); childSetVisible("select_single",false); } else { childSetVisible("edit_object",false); childSetVisible("select_single",true); childSetEnabled("select_single",true); } // Light properties BOOL is_light = volobjp && volobjp->getIsLight(); childSetValue("Light Checkbox Ctrl",is_light); childSetEnabled("Light Checkbox Ctrl",editable && single_volume && volobjp); if (is_light && editable && single_volume) { childSetEnabled("label color",true); //mLabelColor ->setEnabled( TRUE ); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LightColorSwatch->setEnabled( TRUE ); LightColorSwatch->setValid( TRUE ); LightColorSwatch->set(volobjp->getLightBaseColor()); } childSetEnabled("label texture",true); LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); if (LightTextureCtrl) { LightTextureCtrl->setEnabled(TRUE); LightTextureCtrl->setValid(TRUE); LightTextureCtrl->setImageAssetID(volobjp->getLightTextureID()); } childSetEnabled("Light Intensity",true); childSetEnabled("Light Radius",true); childSetEnabled("Light Falloff",true); childSetEnabled("Light FOV",true); childSetEnabled("Light Focus",true); childSetEnabled("Light Ambiance",true); childSetValue("Light Intensity",volobjp->getLightIntensity()); childSetValue("Light Radius",volobjp->getLightRadius()); childSetValue("Light Falloff",volobjp->getLightFalloff()); LLVector3 params = volobjp->getSpotLightParams(); childSetValue("Light FOV",params.mV[0]); childSetValue("Light Focus",params.mV[1]); childSetValue("Light Ambiance",params.mV[2]); mLightSavedColor = volobjp->getLightColor(); } else { getChild<LLSpinCtrl>("Light Intensity", true)->clear(); getChild<LLSpinCtrl>("Light Radius", true)->clear(); getChild<LLSpinCtrl>("Light Falloff", true)->clear(); childSetEnabled("label color",false); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LightColorSwatch->setEnabled( FALSE ); LightColorSwatch->setValid( FALSE ); } childSetEnabled("label texture",false); LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); if (LightTextureCtrl) { LightTextureCtrl->setEnabled(FALSE); LightTextureCtrl->setValid(FALSE); } childSetEnabled("Light Intensity",false); childSetEnabled("Light Radius",false); childSetEnabled("Light Falloff",false); childSetEnabled("Light FOV",false); childSetEnabled("Light Focus",false); childSetEnabled("Light Ambiance",false); } // Flexible properties BOOL is_flexible = volobjp && volobjp->isFlexible(); childSetValue("Flexible1D Checkbox Ctrl",is_flexible); if (is_flexible || (volobjp && volobjp->canBeFlexible())) { childSetEnabled("Flexible1D Checkbox Ctrl", editable && single_volume && volobjp); } else { childSetEnabled("Flexible1D Checkbox Ctrl", false); } if (is_flexible && editable && single_volume) { childSetVisible("FlexNumSections",true); childSetVisible("FlexGravity",true); childSetVisible("FlexTension",true); childSetVisible("FlexFriction",true); childSetVisible("FlexWind",true); childSetVisible("FlexForceX",true); childSetVisible("FlexForceY",true); childSetVisible("FlexForceZ",true); childSetEnabled("FlexNumSections",true); childSetEnabled("FlexGravity",true); childSetEnabled("FlexTension",true); childSetEnabled("FlexFriction",true); childSetEnabled("FlexWind",true); childSetEnabled("FlexForceX",true); childSetEnabled("FlexForceY",true); childSetEnabled("FlexForceZ",true); LLFlexibleObjectData *attributes = (LLFlexibleObjectData *)objectp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); childSetValue("FlexNumSections",(F32)attributes->getSimulateLOD()); childSetValue("FlexGravity",attributes->getGravity()); childSetValue("FlexTension",attributes->getTension()); childSetValue("FlexFriction",attributes->getAirFriction()); childSetValue("FlexWind",attributes->getWindSensitivity()); childSetValue("FlexForceX",attributes->getUserForce().mV[VX]); childSetValue("FlexForceY",attributes->getUserForce().mV[VY]); childSetValue("FlexForceZ",attributes->getUserForce().mV[VZ]); } else { getChild<LLSpinCtrl>("FlexNumSections", true)->clear(); getChild<LLSpinCtrl>("FlexGravity", true)->clear(); getChild<LLSpinCtrl>("FlexTension", true)->clear(); getChild<LLSpinCtrl>("FlexFriction", true)->clear(); getChild<LLSpinCtrl>("FlexWind", true)->clear(); getChild<LLSpinCtrl>("FlexForceX", true)->clear(); getChild<LLSpinCtrl>("FlexForceY", true)->clear(); getChild<LLSpinCtrl>("FlexForceZ", true)->clear(); childSetEnabled("FlexNumSections",false); childSetEnabled("FlexGravity",false); childSetEnabled("FlexTension",false); childSetEnabled("FlexFriction",false); childSetEnabled("FlexWind",false); childSetEnabled("FlexForceX",false); childSetEnabled("FlexForceY",false); childSetEnabled("FlexForceZ",false); } // Update material part // slightly inefficient - materials are unique per object, not per TE U8 material_code = 0; struct f : public LLSelectedTEGetFunctor<U8> { U8 get(LLViewerObject* object, S32 te) { return object->getMaterial(); } } func; bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code ); if (editable && single_volume && material_same) { mComboMaterial->setEnabled( TRUE ); mLabelMaterial->setEnabled( TRUE ); // <edit> /* if (material_code == LL_MCODE_LIGHT) { if (mComboMaterial->getItemCount() == mComboMaterialItemCount) { mComboMaterial->add(LEGACY_FULLBRIGHT_DESC); } mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC); } else { if (mComboMaterial->getItemCount() != mComboMaterialItemCount) { mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC); } // *TODO:Translate mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code))); } */ mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code))); // </edit> } else { mComboMaterial->setEnabled( FALSE ); mLabelMaterial->setEnabled( FALSE ); } // Physics properties childSetValue("Physics Gravity", objectp->getPhysicsGravity()); childSetEnabled("Physics Gravity", editable); childSetValue("Physics Friction", objectp->getPhysicsFriction()); childSetEnabled("Physics Friction", editable); childSetValue("Physics Density", objectp->getPhysicsDensity()); childSetEnabled("Physics Density", editable); childSetValue("Physics Restitution", objectp->getPhysicsRestitution()); childSetEnabled("Physics Restitution", editable); // update the physics shape combo to include allowed physics shapes getChild<LLComboBox>("Physics Shape Type Combo Ctrl", TRUE)->removeall(); getChild<LLComboBox>("Physics Shape Type Combo Ctrl", TRUE)->add("None", LLSD(1)); getChild<LLComboBox>("Physics Shape Type Combo Ctrl", TRUE)->add("Prim", LLSD(0)); getChild<LLComboBox>("Physics Shape Type Combo Ctrl", TRUE)->add("Convex Hull", LLSD(2)); getChild<LLComboBox>("Physics Shape Type Combo Ctrl", TRUE)->setValue(LLSD(objectp->getPhysicsShapeType())); getChild<LLComboBox>("Physics Shape Type Combo Ctrl", TRUE)->setEnabled(editable); mObject = objectp; mRootObject = root_objectp; }
void LLPanelVolume::getState( ) { LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); LLViewerObject* root_objectp = objectp; if(!objectp) { objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); // *FIX: shouldn't we just keep the child? if (objectp) { LLViewerObject* parentp = objectp->getRootEdit(); if (parentp) { root_objectp = parentp; } else { root_objectp = objectp; } } } LLVOVolume *volobjp = NULL; if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) { volobjp = (LLVOVolume *)objectp; } if( !objectp ) { //forfeit focus if (gFocusMgr.childHasKeyboardFocus(this)) { gFocusMgr.setKeyboardFocus(NULL); } // Disable all text input fields clearCtrls(); return; } BOOL owners_identical; LLUUID owner_id; std::string owner_name; owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); // BUG? Check for all objects being editable? BOOL editable = root_objectp->permModify(); BOOL single_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ) && LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1; // Select Single Message if (single_volume) { getChildView("edit_object")->setVisible(true); getChildView("edit_object")->setEnabled(true); getChildView("select_single")->setVisible(false); } else { getChildView("edit_object")->setVisible(false); getChildView("select_single")->setVisible(true); getChildView("select_single")->setEnabled(true); } // Light properties BOOL is_light = volobjp && volobjp->getIsLight(); getChild<LLUICtrl>("Light Checkbox Ctrl")->setValue(is_light); getChildView("Light Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp); if (is_light && editable && single_volume) { getChildView("label color")->setEnabled(true); //mLabelColor ->setEnabled( TRUE ); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LightColorSwatch->setEnabled( TRUE ); LightColorSwatch->setValid( TRUE ); LightColorSwatch->set(volobjp->getLightBaseColor()); } LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); if (LightTextureCtrl) { LightTextureCtrl->setEnabled(TRUE); LightTextureCtrl->setValid(TRUE); LightTextureCtrl->setImageAssetID(volobjp->getLightTextureID()); } getChildView("Light Intensity")->setEnabled(true); getChildView("Light Radius")->setEnabled(true); getChildView("Light Falloff")->setEnabled(true); getChildView("Light FOV")->setEnabled(true); getChildView("Light Focus")->setEnabled(true); getChildView("Light Ambiance")->setEnabled(true); getChild<LLUICtrl>("Light Intensity")->setValue(volobjp->getLightIntensity()); getChild<LLUICtrl>("Light Radius")->setValue(volobjp->getLightRadius()); getChild<LLUICtrl>("Light Falloff")->setValue(volobjp->getLightFalloff()); LLVector3 params = volobjp->getSpotLightParams(); getChild<LLUICtrl>("Light FOV")->setValue(params.mV[0]); getChild<LLUICtrl>("Light Focus")->setValue(params.mV[1]); getChild<LLUICtrl>("Light Ambiance")->setValue(params.mV[2]); mLightSavedColor = volobjp->getLightColor(); } else { getChild<LLSpinCtrl>("Light Intensity", true)->clear(); getChild<LLSpinCtrl>("Light Radius", true)->clear(); getChild<LLSpinCtrl>("Light Falloff", true)->clear(); getChildView("label color")->setEnabled(false); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LightColorSwatch->setEnabled( FALSE ); LightColorSwatch->setValid( FALSE ); } LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); if (LightTextureCtrl) { LightTextureCtrl->setEnabled(FALSE); LightTextureCtrl->setValid(FALSE); } getChildView("Light Intensity")->setEnabled(false); getChildView("Light Radius")->setEnabled(false); getChildView("Light Falloff")->setEnabled(false); getChildView("Light FOV")->setEnabled(false); getChildView("Light Focus")->setEnabled(false); getChildView("Light Ambiance")->setEnabled(false); } // Flexible properties BOOL is_flexible = volobjp && volobjp->isFlexible(); getChild<LLUICtrl>("Flexible1D Checkbox Ctrl")->setValue(is_flexible); if (is_flexible || (volobjp && volobjp->canBeFlexible())) { getChildView("Flexible1D Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp); } else { getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false); } if (is_flexible && editable && single_volume) { getChildView("FlexNumSections")->setVisible(true); getChildView("FlexGravity")->setVisible(true); getChildView("FlexTension")->setVisible(true); getChildView("FlexFriction")->setVisible(true); getChildView("FlexWind")->setVisible(true); getChildView("FlexForceX")->setVisible(true); getChildView("FlexForceY")->setVisible(true); getChildView("FlexForceZ")->setVisible(true); getChildView("FlexNumSections")->setEnabled(true); getChildView("FlexGravity")->setEnabled(true); getChildView("FlexTension")->setEnabled(true); getChildView("FlexFriction")->setEnabled(true); getChildView("FlexWind")->setEnabled(true); getChildView("FlexForceX")->setEnabled(true); getChildView("FlexForceY")->setEnabled(true); getChildView("FlexForceZ")->setEnabled(true); LLFlexibleObjectData *attributes = (LLFlexibleObjectData *)objectp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); getChild<LLUICtrl>("FlexNumSections")->setValue((F32)attributes->getSimulateLOD()); getChild<LLUICtrl>("FlexGravity")->setValue(attributes->getGravity()); getChild<LLUICtrl>("FlexTension")->setValue(attributes->getTension()); getChild<LLUICtrl>("FlexFriction")->setValue(attributes->getAirFriction()); getChild<LLUICtrl>("FlexWind")->setValue(attributes->getWindSensitivity()); getChild<LLUICtrl>("FlexForceX")->setValue(attributes->getUserForce().mV[VX]); getChild<LLUICtrl>("FlexForceY")->setValue(attributes->getUserForce().mV[VY]); getChild<LLUICtrl>("FlexForceZ")->setValue(attributes->getUserForce().mV[VZ]); } else { getChild<LLSpinCtrl>("FlexNumSections", true)->clear(); getChild<LLSpinCtrl>("FlexGravity", true)->clear(); getChild<LLSpinCtrl>("FlexTension", true)->clear(); getChild<LLSpinCtrl>("FlexFriction", true)->clear(); getChild<LLSpinCtrl>("FlexWind", true)->clear(); getChild<LLSpinCtrl>("FlexForceX", true)->clear(); getChild<LLSpinCtrl>("FlexForceY", true)->clear(); getChild<LLSpinCtrl>("FlexForceZ", true)->clear(); getChildView("FlexNumSections")->setEnabled(false); getChildView("FlexGravity")->setEnabled(false); getChildView("FlexTension")->setEnabled(false); getChildView("FlexFriction")->setEnabled(false); getChildView("FlexWind")->setEnabled(false); getChildView("FlexForceX")->setEnabled(false); getChildView("FlexForceY")->setEnabled(false); getChildView("FlexForceZ")->setEnabled(false); } mObject = objectp; mRootObject = root_objectp; }
void FSExport::addPrim(LLViewerObject* object, bool root) { LLSD prim; LLUUID object_id = object->getID(); bool default_prim = true; struct f : public LLSelectedNodeFunctor { LLUUID mID; f(const LLUUID& id) : mID(id) {} virtual bool apply(LLSelectNode* node) { return (node->getObject() && node->getObject()->mID == mID); } } func(object_id); LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode(&func); if (node) { if ((LLGridManager::getInstance()->isInSecondLife()) && object->permYouOwner() && (gAgentID == node->mPermissions->getCreator() || megaPrimCheck(node->mPermissions->getCreator(), object))) { default_prim = false; } #if OPENSIM if (LLGridManager::getInstance()->isInOpenSim() && object->permYouOwner() && object->permModify() && object->permCopy() && object->permTransfer()) { default_prim = false; } #endif } else { LL_WARNS("export") << "LLSelect node for " << object_id.asString() << " not found. Using default prim instead." << LL_ENDL; default_prim = true; } if (root) { if (object->isAttachment()) { prim["attachment_point"] = ATTACHMENT_ID_FROM_STATE(object->getState()); } } else { LLViewerObject* parent_object = (LLViewerObject*)object->getParent(); prim["parent"] = parent_object->getID(); } prim["position"] = object->getPosition().getValue(); prim["scale"] = object->getScale().getValue(); prim["rotation"] = ll_sd_from_quaternion(object->getRotation()); if (default_prim) { LL_DEBUGS("export") << object_id.asString() << " failed export check. Using default prim" << LL_ENDL; prim["flags"] = ll_sd_from_U32((U32)0); prim["volume"]["path"] = LLPathParams().asLLSD(); prim["volume"]["profile"] = LLProfileParams().asLLSD(); prim["material"] = (S32)LL_MCODE_WOOD; } else { mExported = true; prim["flags"] = ll_sd_from_U32(object->getFlags()); prim["volume"]["path"] = object->getVolume()->getParams().getPathParams().asLLSD(); prim["volume"]["profile"] = object->getVolume()->getParams().getProfileParams().asLLSD(); prim["material"] = (S32)object->getMaterial(); if (object->getClickAction() != 0) { prim["clickaction"] = (S32)object->getClickAction(); } LLVOVolume *volobjp = NULL; if (object->getPCode() == LL_PCODE_VOLUME) { volobjp = (LLVOVolume *)object; } if(volobjp) { if(volobjp->isSculpted()) { const LLSculptParams *sculpt_params = (const LLSculptParams *)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT); if (sculpt_params) { if(volobjp->isMesh()) { if (!mAborted) { reportToNearbyChat(LLTrans::getString("export_fail_no_mesh")); mAborted = true; } return; } else { if (exportTexture(sculpt_params->getSculptTexture())) { prim["sculpt"] = sculpt_params->asLLSD(); } else { LLSculptParams default_sculpt; prim["sculpt"] = default_sculpt.asLLSD(); } } } } if(volobjp->isFlexible()) { const LLFlexibleObjectData *flexible_param_block = (const LLFlexibleObjectData *)object->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); if (flexible_param_block) { prim["flexible"] = flexible_param_block->asLLSD(); } } if (volobjp->getIsLight()) { const LLLightParams *light_param_block = (const LLLightParams *)object->getParameterEntry(LLNetworkData::PARAMS_LIGHT); if (light_param_block) { prim["light"] = light_param_block->asLLSD(); } } if (volobjp->hasLightTexture()) { const LLLightImageParams* light_image_param_block = (const LLLightImageParams*)object->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); if (light_image_param_block) { prim["light_texture"] = light_image_param_block->asLLSD(); } } } if(object->isParticleSource()) { LLViewerPartSourceScript* partSourceScript = object->getPartSourceScript(); prim["particle"] = partSourceScript->mPartSysData.asLLSD(); if (!exportTexture(partSourceScript->mPartSysData.mPartImageID)) { prim["particle"]["PartImageID"] = LLUUID::null.asString(); } } U8 texture_count = object->getNumTEs(); for(U8 i = 0; i < texture_count; ++i) { if (exportTexture(object->getTE(i)->getID())) { prim["texture"].append(object->getTE(i)->asLLSD()); } else { LLTextureEntry te(LL_DEFAULT_WOOD_UUID); // TODO: use user option of default texture. prim["texture"].append(te.asLLSD()); } } if (!object->getPhysicsShapeUnknown()) { prim["ExtraPhysics"]["PhysicsShapeType"] = (S32)object->getPhysicsShapeType(); prim["ExtraPhysics"]["Density"] = (F64)object->getPhysicsDensity(); prim["ExtraPhysics"]["Friction"] = (F64)object->getPhysicsFriction(); prim["ExtraPhysics"]["Restitution"] = (F64)object->getPhysicsRestitution(); prim["ExtraPhysics"]["GravityMultiplier"] = (F64)object->getPhysicsGravity(); } prim["name"] = node->mName; prim["description"] = node->mDescription; prim["creation_date"] = ll_sd_from_U64(node->mCreationDate); LLAvatarName avatar_name; LLUUID creator_id = node->mPermissions->getCreator(); if (creator_id.notNull()) { prim["creator_id"] = creator_id; if (LLAvatarNameCache::get(creator_id, &avatar_name)) { prim["creator_name"] = avatar_name.asLLSD(); } } LLUUID owner_id = node->mPermissions->getOwner(); if (owner_id.notNull()) { prim["owner_id"] = owner_id; if (LLAvatarNameCache::get(owner_id, &avatar_name)) { prim["owner_name"] = avatar_name.asLLSD(); } } LLUUID group_id = node->mPermissions->getGroup(); if (group_id.notNull()) { prim["group_id"] = group_id; if (LLAvatarNameCache::get(group_id, &avatar_name)) { prim["group_name"] = avatar_name.asLLSD(); } } LLUUID last_owner_id = node->mPermissions->getLastOwner(); if (last_owner_id.notNull()) { prim["last_owner_id"] = last_owner_id; if (LLAvatarNameCache::get(last_owner_id, &avatar_name)) { prim["last_owner_name"] = avatar_name.asLLSD(); } } prim["base_mask"] = ll_sd_from_U32(node->mPermissions->getMaskBase()); prim["owner_mask"] = ll_sd_from_U32(node->mPermissions->getMaskOwner()); prim["group_mask"] = ll_sd_from_U32(node->mPermissions->getMaskGroup()); prim["everyone_mask"] = ll_sd_from_U32(node->mPermissions->getMaskEveryone()); prim["next_owner_mask"] = ll_sd_from_U32(node->mPermissions->getMaskNextOwner()); prim["sale_info"] = node->mSaleInfo.asLLSD(); prim["touch_name"] = node->mTouchName; prim["sit_name"] = node->mSitName; mInventoryRequests.push_back(object_id); object->registerInventoryListener(this, NULL); object->dirtyInventory(); object->requestInventory(); } mFile["prim"][object_id.asString()] = prim; }