bool iAModuleInterface::AttachToMdiChild( MdiChild * child ) { //check if already attached m_mdiChild = child; if( isAttached() ) return false; //create attachment try { iAModuleAttachmentToChild * attachment = CreateAttachment( m_mainWnd, iAChildData( child ) ); if( !attachment ) return false; //add an attachment m_attachments.push_back( attachment ); connect( child, SIGNAL( closed() ), this, SLOT( attachedChildClosed() ) ); connect ( attachment, SIGNAL( detach() ), this, SLOT (detach() ) ); } catch( itk::ExceptionObject &excep ) { child->addMsg( tr("%1 in File %2, Line %3").arg( excep.GetDescription() ) .arg( excep.GetFile() ) .arg( excep.GetLine() ) ); return false; } return true; }
bool CWizDatabase::AddAttachment(const WIZDOCUMENTDATA& document, const CString& strFileName, WIZDOCUMENTATTACHMENTDATA& dataRet) { CString strMD5 = ::WizMd5FileString(strFileName); if (!CreateAttachment(document.strGUID, WizExtractFileName(strFileName), strFileName, "", strMD5, dataRet)) return false; if (!::WizCopyFile(strFileName, GetAttachmentFileName(dataRet.strGUID), false)) { DeleteAttachment(dataRet, false); return false; } SetAttachmentDataDownloaded(dataRet.strGUID, true); UpdateDocumentAttachmentCount(document.strGUID); return true; }
// setup CRenderModel class for rendering one model and eventually it's shadow(s) void CModelObject::SetupModelRendering( CRenderModel &rm) { _sfStats.IncrementCounter( CStatForm::SCI_MODELS); _pfModelProfile.StartTimer( CModelProfile::PTI_INITMODELRENDERING); _pfModelProfile.IncrementTimerAveragingCounter( CModelProfile::PTI_INITMODELRENDERING); // get model's data and lerp info rm.rm_pmdModelData = (CModelData*)GetData(); GetFrame( rm.rm_iFrame0, rm.rm_iFrame1, rm.rm_fRatio); const INDEX ctVertices = rm.rm_pmdModelData->md_VerticesCt; if( rm.rm_pmdModelData->md_Flags & MF_COMPRESSED_16BIT) { // set pFrame to point to last and next frames' vertices rm.rm_pFrame16_0 = &rm.rm_pmdModelData->md_FrameVertices16[rm.rm_iFrame0 *ctVertices]; rm.rm_pFrame16_1 = &rm.rm_pmdModelData->md_FrameVertices16[rm.rm_iFrame1 *ctVertices]; } else { // set pFrame to point to last and next frames' vertices rm.rm_pFrame8_0 = &rm.rm_pmdModelData->md_FrameVertices8[rm.rm_iFrame0 *ctVertices]; rm.rm_pFrame8_1 = &rm.rm_pmdModelData->md_FrameVertices8[rm.rm_iFrame1 *ctVertices]; } // obtain current rendering preferences rm.rm_rtRenderType = _mrpModelRenderPrefs.GetRenderType(); // remember blending color rm.rm_colBlend = MulColors( rm.rm_colBlend, mo_colBlendColor); // get decompression/stretch factors FLOAT3D &vDataStretch = rm.rm_pmdModelData->md_Stretch; rm.rm_vStretch(1) = vDataStretch(1) * mo_Stretch(1); rm.rm_vStretch(2) = vDataStretch(2) * mo_Stretch(2); rm.rm_vStretch(3) = vDataStretch(3) * mo_Stretch(3); rm.rm_vOffset = rm.rm_pmdModelData->md_vCompressedCenter; // check if object is inverted (in mirror) BOOL bXInverted = rm.rm_vStretch(1) < 0; BOOL bYInverted = rm.rm_vStretch(2) < 0; BOOL bZInverted = rm.rm_vStretch(3) < 0; rm.rm_ulFlags &= ~RMF_INVERTED; if( bXInverted != bYInverted != bZInverted != _aprProjection->pr_bInverted) rm.rm_ulFlags |= RMF_INVERTED; // prepare projections _pfModelProfile.StartTimer( CModelProfile::PTI_INITPROJECTION); _pfModelProfile.IncrementTimerAveragingCounter( CModelProfile::PTI_INITPROJECTION); PrepareView(rm); _pfModelProfile.StopTimer( CModelProfile::PTI_INITPROJECTION); // get mip factor from projection (if needed) if( (INDEX&)rm.rm_fDistanceFactor==12345678) { FLOAT3D vObjectAbs; _aprProjection->PreClip( rm.rm_vObjectPosition, vObjectAbs); rm.rm_fDistanceFactor = _aprProjection->MipFactor( Min(vObjectAbs(3), 0.0f)); } // adjust mip factor in case of dynamic stretch factor if( mo_Stretch != FLOAT3D(1,1,1)) { rm.rm_fMipFactor = rm.rm_fDistanceFactor - Log2( Max(mo_Stretch(1),Max(mo_Stretch(2),mo_Stretch(3)))); } else { rm.rm_fMipFactor = rm.rm_fDistanceFactor; } // adjust mip factor by custom settings rm.rm_fMipFactor = rm.rm_fMipFactor*mdl_fLODMul +mdl_fLODAdd; // get current mip model using mip factor rm.rm_iMipLevel = GetMipModel( rm.rm_fMipFactor); mo_iLastRenderMipLevel = rm.rm_iMipLevel; // get current vertices mask rm.rm_pmmiMip = &rm.rm_pmdModelData->md_MipInfos[rm.rm_iMipLevel]; // don't allow any shading, if shading is turned off if( rm.rm_rtRenderType & RT_SHADING_NONE) { rm.rm_colAmbient = C_WHITE|CT_OPAQUE; rm.rm_colLight = C_BLACK; } // calculate light vector as seen from model, so that vertex normals // do not need to be transformed for lighting calculations FLOAT fLightDirection=(rm.rm_vLightDirection).Length(); if( fLightDirection>0.001f) { rm.rm_vLightDirection /= fLightDirection; } else { rm.rm_vLightDirection = FLOAT3D(0,0,0); } rm.rm_vLightObj = rm.rm_vLightDirection * !rm.rm_mObjectRotation; // precalculate rendering data if needed extern void PrepareModelForRendering( CModelData &md); PrepareModelForRendering( *rm.rm_pmdModelData); // done with setup if viewing from this model if( rm.rm_ulFlags&RMF_SPECTATOR) { _pfModelProfile.StopTimer( CModelProfile::PTI_INITMODELRENDERING); return; } _pfModelProfile.StartTimer( CModelProfile::PTI_INITATTACHMENTS); // for each attachment on this model object FOREACHINLIST( CAttachmentModelObject, amo_lnInMain, mo_lhAttachments, itamo) { _pfModelProfile.IncrementTimerAveragingCounter( CModelProfile::PTI_INITATTACHMENTS); CAttachmentModelObject *pamo = itamo; // create new render model structure pamo->amo_prm = &_armRenderModels.Push(); const BOOL bVisible = CreateAttachment( rm, *pamo); if( !bVisible) { // skip if not visible pamo->amo_prm = NULL; _armRenderModels.Pop(); continue; } // prepare if visible _pfModelProfile.StopTimer( CModelProfile::PTI_INITMODELRENDERING); _pfModelProfile.StopTimer( CModelProfile::PTI_INITATTACHMENTS); pamo->amo_moModelObject.SetupModelRendering( *pamo->amo_prm); _pfModelProfile.StartTimer( CModelProfile::PTI_INITATTACHMENTS); _pfModelProfile.StartTimer( CModelProfile::PTI_INITMODELRENDERING); }
void LEM::SetLmAscentHoverStage() { ClearThrusterDefinitions(); agc.SetVesselStats(APS_ISP, APS_THRUST, true); ShiftCentreOfMass(_V(0.0,3.0,0.0)); SetSize (5); SetCOG_elev (5); SetEmptyMass (1920.0); SetPMI(_V(2.8, 2.29, 2.37)); SetCrossSections (_V(21,23,17)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,0.7)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); double tdph = -5.8; SetTouchdownPoints (_V(0, tdph, 5), _V(-5, tdph, -5), _V(5, tdph, -5)); VSSetTouchdownPoints(GetHandle(), _V(0, tdph, 5), _V(-5, tdph, -5), _V(5, tdph, -5)); VECTOR3 mesh_dir=_V(-0.191,-0.02,+0.383); UINT meshidx = AddMesh (hLMAscent, &mesh_dir); SetMeshVisibilityMode (meshidx, MESHVIS_VCEXTERNAL); if (!ph_Asc) ph_Asc = CreatePropellantResource(AscentFuelMassKg); // 2nd stage Propellant SetDefaultPropellantResource (ph_Asc); // Display 2nd stage propellant level in generic HUD // orbiter main thrusters th_hover[0] = CreateThruster (_V( 0.0, -2.5, 0.0), _V( 0,1,0), APS_THRUST, ph_Asc, APS_ISP); th_hover[1] = CreateThruster (_V( 0.01, -2.0, 0.0), _V( 0,1,0), 0, ph_Asc, 0); // this is a "virtual engine",no thrust and no fuel // needed for visual gimbaling for corrected engine flames DelThrusterGroup(THGROUP_HOVER,true); thg_hover = CreateThrusterGroup (th_hover, 2, THGROUP_HOVER); AddExhaust (th_hover[1], 6.0, 0.8, exhaustTex); SetCameraOffset (_V(-1,1.0,0.0)); status = 2; stage = 2; SetEngineLevel(ENGINE_HOVER,0); AddRCS_LMH2(-1.86); bModeHover=true; if(ph_Dsc){ DelPropellantResource(ph_Dsc); ph_Dsc = 0; } VECTOR3 dockpos = {0.0 ,0.58, 0.0}; VECTOR3 dockdir = {0,1,0}; VECTOR3 dockrot = { -0.8660254, 0, 0.5 }; SetDockParams(dockpos, dockdir, dockrot); hattDROGUE = CreateAttachment(true, dockpos, dockdir, dockrot, "PADROGUE"); InitNavRadios (4); LDGswitch=false; AFEED1switch=true; AFEED2switch=true; AFEED3switch=true; AFEED4switch=true; // Descent stage detached. agc.SetInputChannelBit(030, DescendStageAttached, false); CheckRCS(); }
void LEM::SetLmVesselHoverStage() { ClearThrusterDefinitions(); agc.SetVesselStats(DPS_ISP, DPS_THRUST, true); SetEmptyMass(AscentFuelMassKg + 4374.0); SetSize (7); SetPMI (_V(3.26,2.22,3.26)); SetCrossSections (_V(24.53,21.92,24.40)); // SetPMI (_V(2.8,2.29,2.37)); // SetCrossSections (_V(21,23,17)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,0.7)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); SetTouchdownPoints (_V(0, -3.86, 5), _V(-5, -3.86, -5), _V(5, -3.86, -5)); VSSetTouchdownPoints(GetHandle(), _V(0, -3.86, 5), _V(-5, -3.86, -5), _V(5, -3.86, -5)); VECTOR3 mesh_dir=_V(-0.003,-0.03,0.004); UINT meshidx; if (Landed) { meshidx = AddMesh (hLMLanded, &mesh_dir); }else{ UINT probeidx; meshidx = AddMesh (hLMLanded, &mesh_dir); probeidx = AddMesh (hLemProbes, &mesh_dir); SetMeshVisibilityMode (probeidx, MESHVIS_VCEXTERNAL); } SetMeshVisibilityMode (meshidx, MESHVIS_VCEXTERNAL); if (!ph_Dsc){ ph_Dsc = CreatePropellantResource(DescentFuelMassKg); //2nd stage Propellant } SetDefaultPropellantResource (ph_Dsc); // display 2nd stage propellant level in generic HUD if (!ph_RCSA){ ph_RCSA = CreatePropellantResource(133.084001); } if (!ph_RCSB){ ph_RCSB = CreatePropellantResource(133.084001); } // orbiter main thrusters th_hover[0] = CreateThruster (_V(0.0 , -2.0, 0.0), _V(0,1,0), 46706.3, ph_Dsc, 3107); th_hover[1] = CreateThruster (_V(0.013, -2.8, -0.034), _V(0,1,0), 0, ph_Dsc, 0); //this is a "virtual engine",no thrust and no fuel //needed for visual gimbaling for corrected engine flames DelThrusterGroup(THGROUP_HOVER,true); thg_hover = CreateThrusterGroup(th_hover, 2, THGROUP_HOVER); AddExhaust (th_hover[1], 10.0, 1.5, exhaustTex); SetCameraOffset (_V(-1,1.0,0.0)); status = 1; stage = 1; SetEngineLevel(ENGINE_HOVER,0); AddRCS_LMH(-1.85); bModeHover=true; VECTOR3 dockpos = {0.0 ,2.6, 0.0}; VECTOR3 dockdir = {0,1,0}; VECTOR3 dockrot = { -0.8660254, 0, 0.5 }; SetDockParams(dockpos, dockdir, dockrot); hattDROGUE = CreateAttachment(true, dockpos, dockdir, dockrot, "PADROGUE"); InitNavRadios (4); LDGswitch=true; ATT2switch=true; ATT3switch=true; ATT1switch=true; AFEED1switch=false; AFEED2switch=false; AFEED3switch=false; AFEED4switch=false; // Descent stage attached. agc.SetInputChannelBit(030, DescendStageAttached, true); CheckRCS(); }
void LEM::SetLmVesselDockStage() { double fuelmass; int mnumber; ClearThrusterDefinitions(); agc.SetVesselStats(DPS_ISP, DPS_THRUST, true); // // Changed to reflect mission-specific empty and fuel mass // // From "Apollo by the Numbers" // mnumber=agc.GetApolloNo(); if(mnumber < 15) { SetEmptyMass(6565); fuelmass=8375.; } else { SetEmptyMass(7334); fuelmass=8891.; } SetSize (6); // SetPMI (_V(2.8,2.29,2.37)); SetPMI(_V(2.5428, 2.2871, 2.7566)); // SetCrossSections (_V(21,23,17)); //SetPMI(_V(3.26, 2.22, 3.26)); SetCrossSections (_V(24.53,21.92,24.40)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,0.7)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); SetTouchdownPoints (_V(0,0,10), _V(-1,0,-10), _V(1,0,-10)); VECTOR3 mesh_dir=_V(0.0,-0.2,0.03); UINT meshidx = AddMesh (hLMPKD, &mesh_dir); SetMeshVisibilityMode (meshidx, MESHVIS_VCEXTERNAL); if (!ph_Dsc) ph_Dsc = CreatePropellantResource(fuelmass); //2nd stage Propellant SetDefaultPropellantResource (ph_Dsc); // display 2nd stage propellant level in generic HUD // 133.084001 kg is 293.4 pounds, which is the fuel + oxidizer capacity of one RCS tank. if (!ph_RCSA) { ph_RCSA = CreatePropellantResource(133.084001); } if (!ph_RCSB) { ph_RCSB = CreatePropellantResource(133.084001); } // orbiter main thrusters th_hover[0] = CreateThruster (_V(0.0 , -3.3, 0.0), _V(0,1,0), 46706.3, ph_Dsc, 3107); th_hover[1] = CreateThruster (_V(0.013, -3.0, -0.03), _V(0,1,0), 0, ph_Dsc, 0); //this is a "virtual engine",no thrust and no fuel //needed for visual gimbaling for corrected engine flames DelThrusterGroup(THGROUP_HOVER,true); thg_hover = CreateThrusterGroup(th_hover, 2, THGROUP_HOVER); AddExhaust(th_hover[1], 10.0, 1.2, exhaustTex); SetCameraOffset (_V(-1,1.0,0.0)); SetEngineLevel(ENGINE_HOVER,0); AddRCS_LMH(-1.85); status = 0; stage = 0; bModeDocked=true; VECTOR3 dockpos = {0.0 ,2.6, 0.0}; VECTOR3 dockdir = {0,1,0}; VECTOR3 dockrot = { -0.8660254, 0, 0.5 }; SetDockParams(dockpos, dockdir, dockrot); hattDROGUE = CreateAttachment(true, dockpos, dockdir, dockrot, "PADROGUE"); InitNavRadios (4); LDGswitch=false; ATT2switch=true; ATT3switch=true; ATT1switch=true; AFEED1switch=false; AFEED2switch=false; AFEED3switch=false; AFEED4switch=false; // Descent stage attached. agc.SetInputChannelBit(030, DescendStageAttached, true); CheckRCS(); }