void plRTSpotLight::GetLocalBoundBox( TimeValue t, INode *node, ViewExp *vpt, Box3 &box ) { Point3 loc = node->GetObjectTM( t ).GetTrans(); float scaleFactor = vpt->NonScalingObjectSize() * vpt->GetVPWorldWidth( loc ) / 360.0f; float width, depth; box = fMesh.getBoundingBox(); // Because we want to scale about the origin, not the box center, we have to do this funky offset Point3 boxCenter = box.Center(); box.Translate( -boxCenter ); box.Scale( scaleFactor ); boxCenter *= scaleFactor; box.Translate( boxCenter ); // Include points for the spotlight. That means either the attenuated cone or // our unattenuated cone display if( ( extDispFlags & EXT_DISP_ONLY_SELECTED ) ) { if( GetUseAtten() ) depth = GetAtten( t, ATTEN_END ); else depth = 100.f + 50.f; // Include arrows width = depth * tan( DegToRad( GetFallsize( t ) / 2.f ) ); box += Point3( -width, -width, 0.f ); box += Point3( width, width, -depth ); } }
void TapeHelpObject::GetLocalBoundBox(TimeValue t, INode* inode, ViewExp* vpt, Box3& box ) { if ( ! vpt || ! vpt->IsAlive() ) { box.Init(); return; } Matrix3 m = inode->GetObjectTM(t); Point3 pt; Point3 q[4]; float scaleFactor = vpt->NonScalingObjectSize()*vpt->GetVPWorldWidth(m.GetTrans())/(float)360.0; box = mesh.getBoundingBox(); box.Scale(scaleFactor); float d; if (GetTargetPoint(t,inode,pt)) { d = Length(m.GetTrans()-pt)/Length(inode->GetObjectTM(t).GetRow(2)); box += Point3(float(0),float(0),-d); } if(GetSpecLen()) { GetLinePoints(t, q, GetLength(t) ); box += q[0]; box += q[1]; } }
void plRTProjDirLight::GetLocalBoundBox( TimeValue t, INode *node, ViewExp *vpt, Box3 &box ) { Point3 loc = node->GetObjectTM( t ).GetTrans(); float scaleFactor = vpt->NonScalingObjectSize() * vpt->GetVPWorldWidth( loc ) / 360.0f; float width, height, depth; box = fMesh.getBoundingBox(); // Because we want to scale about the origin, not the box center, we have to do this funky offset Point3 boxCenter = box.Center(); box.Translate( -boxCenter ); box.Scale( scaleFactor ); boxCenter *= scaleFactor; box.Translate( boxCenter ); if( ( extDispFlags & EXT_DISP_ONLY_SELECTED ) ) { fProjPB->GetValue( kWidth, t, width, FOREVER ); fProjPB->GetValue( kHeight, t, height, FOREVER ); fProjPB->GetValue( kRange, t, depth, FOREVER ); width /= 2.f; height /= 2.f; box += Point3( -width, -height, 0.f ); box += Point3( width, height, -depth ); } }
void VRayCamera::GetLocalBoundBox(TimeValue t, INode *node, ViewExp *vpt, Box3& box) { Matrix3 m=node->GetObjectTM(t); float scaleFactor=vpt->NonScalingObjectSize()*vpt->GetVPWorldWidth(m.GetTrans())/360.0f; box=mesh.getBoundingBox(); box.Scale(scaleFactor); if (extendedDisplayFlags & EXT_DISP_ONLY_SELECTED) box+=Point3(0.0f, 0.0f, -GetTDist(t)); }
void TargetObject::GetLocalBoundBox(TimeValue t, INode* inode, ViewExp* vpt, Box3& box ){ if ( ! vpt || ! vpt->IsAlive() ) { box.Init(); return; } Matrix3 m = inode->GetObjectTM(t); float scaleFactor = vpt->NonScalingObjectSize()*vpt->GetVPWorldWidth(m.GetTrans())/(float)360.0; box = mesh.getBoundingBox(); box.Scale(scaleFactor); }
void ProtHelpObject::GetLocalBoundBox(TimeValue t, INode* inode, ViewExp* vpt, Box3& box ) { if ( ! vpt || ! vpt->IsAlive() ) { box.Init(); return; } Matrix3 m = inode->GetObjectTM(t); Point3 pt; Point3 q[4]; float scaleFactor = vpt->NonScalingObjectSize()*vpt->GetVPWorldWidth(m.GetTrans())/360.0f; box = mesh.getBoundingBox(); box.Scale(scaleFactor); if (GetTargetPoint(0, t, &pt)) box += Inverse(m) * pt; if (GetTargetPoint(1, t, &pt)) box += Inverse(m) * pt; }
void plRTDirLight::GetLocalBoundBox( TimeValue t, INode *node, ViewExp *vpt, Box3 &box ) { Point3 loc = node->GetObjectTM( t ).GetTrans(); float scaleFactor = vpt->NonScalingObjectSize() * vpt->GetVPWorldWidth( loc ) / 360.0f; float width, height, depth; box = fMesh.getBoundingBox(); // Because we want to scale about the origin, not the box center, we have to do this funky offset Point3 boxCenter = box.Center(); box.Translate( -boxCenter ); box.Scale( scaleFactor ); boxCenter *= scaleFactor; box.Translate( boxCenter ); if( ( extDispFlags & EXT_DISP_ONLY_SELECTED ) ) { width = 2 * 20.f + ( 10.f / 2.f ); // Add in half arrow size height = 2 * 20.f + ( 10.f / 2.f ); depth = 100.f; box += Point3( -width, -height, 0.f ); box += Point3( width, height, -depth ); } }