int bhkCapsuleObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { Matrix3 m; Color color = Color(inode->GetWireColor()); GraphicsWindow *gw = vpt->getGW(); Material *mtl = gw->getMaterial(); m = inode->GetObjectTM(t); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); DWORD newrlim = GW_WIREFRAME/*|GW_Z_BUFFER*/; #if VERSION_3DSMAX >= ((5000<<16)+(15<<8)+0) // Version 5+ newrlim |= GW_EDGES_ONLY; #endif gw->setRndLimits(newrlim); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent()) gw->setColor( LINE_COLOR, color); UpdateMesh(t); mesh.render( gw, mtl, NULL, COMP_ALL); gw->setRndLimits(rlim); return 0; }
int SimpleWSMObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } if (!OKtoDisplay(t)) return 0; GraphicsWindow *gw = vpt->getGW(); Matrix3 mat = inode->GetObjectTM(t); UpdateMesh(t); gw->setTransform(mat); //mesh.render(gw, inode->Mtls(), DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|/*GW_BACKCULL|*/(rlim&GW_Z_BUFFER?GW_Z_BUFFER:0)); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen()) //gw->setColor( LINE_COLOR, wsmMtl.Kd[0], wsmMtl.Kd[1], wsmMtl.Kd[2]); gw->setColor(LINE_COLOR,GetUIColor(COLOR_SPACE_WARPS)); mesh.render(gw, &wsmMtl, (flags&USE_DAMAGE_RECT) ? &vpt->GetDammageRect() : NULL, COMP_ALL); gw->setRndLimits(rlim); return(0); }
int LuminaireObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } Matrix3 m; if (dumFlags&DISABLE_DISPLAY) return 0; GraphicsWindow *gw = vpt->getGW(); Material *mtl = gw->getMaterial(); m = inode->GetObjectTM(t); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&GW_Z_BUFFER) ); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent()) gw->setColor( LINE_COLOR, color.x, color.y, color.z); UpdateMesh(); mesh.render( gw, mtl, NULL, COMP_ALL); gw->setRndLimits(rlim); return 0; }
int BombObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } GraphicsWindow *gw = vpt->getGW(); Material *mtl = &swMtl; Matrix3 mat = inode->GetObjectTM(t); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|/*GW_BACKCULL|*/ (rlim&GW_Z_BUFFER?GW_Z_BUFFER:0) );//removed BC 2/16/99 DB gw->setTransform(mat); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen()) //gw->setColor( LINE_COLOR, swMtl.Kd[0], swMtl.Kd[1], swMtl.Kd[2]); gw->setColor(LINE_COLOR,GetUIColor(COLOR_SPACE_WARPS)); mesh.render(gw, mtl, NULL, COMP_ALL); if (hParam && GetWindowLongPtr(hParam,GWLP_USERDATA)==(LONG_PTR)this && GetFalloffOn(t)) { DrawLineProc lp(gw); DrawFalloffSphere(GetFalloff(t),lp); } gw->setRndLimits(rlim); return(0); }
int PBombObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { GraphicsWindow *gw = vpt->getGW(); Material *mtl = &swMtl; Matrix3 mat = inode->GetObjectTM(t); // UpdateMesh(t); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|/*GW_BACKCULL|*/ (rlim&GW_Z_BUFFER?GW_Z_BUFFER:0) );//removed BC 2/16/99 DB gw->setTransform(mat); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen()) gw->setColor(LINE_COLOR,GetUIColor(COLOR_SPACE_WARPS)); mesh.render(gw, mtl, NULL, COMP_ALL); int dorange,hoopson; pblock->GetValue(PB_RANGEON,0,hoopson,FOREVER); pblock->GetValue(PB_DECAYTYPE,0,dorange,FOREVER); float length; if (hoopson && dorange) { pblock->GetValue(PB_DECAY,t,length,FOREVER); float range; range=length; BombDrawLineProc lp(gw); DrawFalloffSphere(range,lp); } gw->setRndLimits(rlim); return(0); }
int RainParticle::Display( TimeValue t, INode* inode, ViewExp *vpt, int flags ) { if (!OKtoDisplay(t)) return 0; GraphicsWindow *gw = vpt->getGW(); DWORD rlim = gw->getRndLimits(); // Draw emitter gw->setRndLimits(GW_WIREFRAME | GW_EDGES_ONLY | (rlim & GW_Z_BUFFER) ); if (inode->Selected()) { gw->setColor( LINE_COLOR, GetSelColor()); } else if(!inode->IsFrozen()) { gw->setColor(LINE_COLOR,GetUIColor(COLOR_PARTICLE_EM)); } Material *mtl = gw->getMaterial(); if (mtl && !inode->Selected() && !inode->IsFrozen()) { gw->setColor(LINE_COLOR, mtl->Kd[0], mtl->Kd[1], mtl->Kd[2]); } gw->setTransform(inode->GetObjTMBeforeWSM(t)); mesh.render(gw, mtl, (flags & USE_DAMAGE_RECT) ? &vpt->GetDammageRect() : NULL, COMP_ALL); return 0; }
int SimpleParticle::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if (!OKtoDisplay(t)) return 0; Update(t,inode); GraphicsWindow *gw = vpt->getGW(); DWORD rlim = gw->getRndLimits(); // Draw emitter gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&GW_Z_BUFFER) ); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen()) //gw->setColor( LINE_COLOR, particleMtl.Kd[0], particleMtl.Kd[1], particleMtl.Kd[2]); gw->setColor(LINE_COLOR,GetUIColor(COLOR_PARTICLE_EM)); if (EmitterVisible()) { gw->setTransform(inode->GetObjTMBeforeWSM(t)); mesh.render(gw, &particleMtl, (flags&USE_DAMAGE_RECT) ? &vpt->GetDammageRect() : NULL, COMP_ALL); } // Draw particles gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&(GW_Z_BUFFER|GW_BOX_MODE)) ); Material *mtl = gw->getMaterial(); if (!inode->Selected() && !inode->IsFrozen()) gw->setColor( LINE_COLOR, mtl->Kd[0], mtl->Kd[1], mtl->Kd[2]); gw->setTransform(ident); parts.Render(gw,GetMarkerType()); gw->setRndLimits(rlim); return(0); }
int bhkProxyObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if (forceRedraw) { Interface *gi = GetCOREInterface(); gi->ForceCompleteRedraw(); } Matrix3 m; Color color = Color(inode->GetWireColor()); GraphicsWindow *gw = vpt->getGW(); Material *mtl = gw->getMaterial(); m = inode->GetObjectTM(t); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); DWORD newrlim = GW_WIREFRAME|GW_Z_BUFFER; #if VERSION_3DSMAX >= ((5000<<16)+(15<<8)+0) // Version 5+ newrlim |= GW_EDGES_ONLY; #endif gw->setRndLimits(newrlim); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent()) gw->setColor( LINE_COLOR, color); Matrix3 m3(true); float size = 20.0f; Point3 pts[5]; // X pts[0] = Point3(-size, 0.0f, 0.0f); pts[1] = Point3(size, 0.0f, 0.0f); vpt->getGW()->polyline(2, pts, NULL, NULL, FALSE, NULL); // Y pts[0] = Point3(0.0f, -size, 0.0f); pts[1] = Point3(0.0f, size, 0.0f); vpt->getGW()->polyline(2, pts, NULL, NULL, FALSE, NULL); // Z pts[0] = Point3(0.0f, 0.0f, -size); pts[1] = Point3(0.0f, 0.0f, size); vpt->getGW()->polyline(2, pts, NULL, NULL, FALSE, NULL); //UpdateMesh(t); int bvType = 0; pblock2->GetValue(PB_BOUND_TYPE, 0, bvType, FOREVER, 0); if (bvType != 0) { Matrix3 tm = gw->getTransform(); Matrix3 proxyTM(true); proxyTM.SetTranslate(proxyPos); gw->setTransform(proxyTM); proxyMesh.render( gw, mtl, NULL, COMP_ALL); gw->setTransform(tm); } gw->setRndLimits(rlim); return 0; }
int ProtHelpObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } Matrix3 m; GraphicsWindow *gw = vpt->getGW(); Material *mtl = gw->getMaterial(); created = TRUE; GetMat(t,inode,*vpt,m); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&GW_Z_BUFFER) ); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent()) gw->setColor( LINE_COLOR, GetUIColor(COLOR_TAPE_OBJ)); mesh.render( gw, mtl, NULL, COMP_ALL); // calc angle lastAngle = 0.0; #define RadToDegDbl (180.0 / 3.141592653589793) if(refNode[0] && refNode[1]) { Point3 origin = m.GetTrans(); Point3 vec1 = refNode[0]->GetObjectTM(t).GetTrans() - origin; Point3 vec2 = refNode[1]->GetObjectTM(t).GetTrans() - origin; float len1 = Length(vec1); float len2 = Length(vec2); if(len1 > 0.00001f && len2 > 0.00001f) { double cosAng = (double)DotProd(vec1, vec2) / (double)(len1 * len2); if(fabs(cosAng) <= 0.999999) // beyond float accuracy! lastAngle = acos(cosAng) * RadToDegDbl; else lastAngle = 180.0; } } #if 0 Point3 pt(0,0,0); TCHAR buf[32]; _stprintf(buf, "%g", lastAngle); gw->setColor(TEXT_COLOR, GetUIColor(COLOR_TAPE_OBJ)); gw->text(&pt, buf); #endif DrawLines(t, inode, gw, 1); UpdateUI(t); gw->setRndLimits(rlim); return(0); }
int TargetObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } if (MaxSDK::Graphics::IsRetainedModeEnabled()) { // 11/15/2010 // In Nitrous view port, do not draw the target when seeing from the target's camera if (NULL != vpt && NULL != vpt->GetViewCamera() && vpt->GetViewCamera()->GetTarget() == inode) { return 0; } } Matrix3 m; GraphicsWindow *gw = vpt->getGW(); GetMat(t,inode,*vpt,m); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&GW_Z_BUFFER) ); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent() && inode->GetLookatNode()) { const ObjectState& os = inode->GetLookatNode()->EvalWorldState(t); Object* ob = os.obj; // 6/25/01 3:32pm --MQM-- // set color to wire-frame color, // instead of COLOR_LIGHT_OBJ or COLOR_CAMERA_OBJ if ( (ob!=NULL) && ( (ob->SuperClassID()==LIGHT_CLASS_ID) || (ob->SuperClassID()==CAMERA_CLASS_ID) ) ) { Color color(inode->GetWireColor()); gw->setColor( LINE_COLOR, color ); } else gw->setColor( LINE_COLOR, GetUIColor(COLOR_CAMERA_OBJ)); // default target color, just use camera targ color } mesh.render( gw, gw->getMaterial(), NULL, COMP_ALL); gw->setRndLimits(rlim); // gw->fWinMarker(&pt,HOLLOW_BOX_MRKR); return(0); }
int WaveObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { GraphicsWindow *gw = vpt->getGW(); Material *mtl = &swMtl; DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|/*GW_BACKCULL|*/ (rlim&GW_Z_BUFFER?GW_Z_BUFFER:0) ); //removed BC 2/16/99 DB if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen()) gw->setColor( LINE_COLOR, swMtl.Kd[0], swMtl.Kd[1], swMtl.Kd[2]); SimpleWSMObject::Display(t,inode,vpt,flags); gw->setRndLimits(rlim); return(0); }
int CXTPSyntaxEditColorComboBox::SelectUserColor() { CColorDialog dlg(GetSelColor(), CC_RGBINIT, this); if (dlg.DoModal() == IDOK) { COLORREF crUser = dlg.GetColor(); if (FindColor(crUser) == CB_ERR) { SetUserColor(crUser); } else { SetUserColor(COLORREF_NULL); } return SetSelColor(crUser); } return CB_ERR; }
int TapeHelpObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } Matrix3 m; GraphicsWindow *gw = vpt->getGW(); Material *mtl = gw->getMaterial(); GetMat(t,inode,*vpt,m); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&GW_Z_BUFFER) ); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent()) gw->setColor( LINE_COLOR, GetUIColor(COLOR_TAPE_OBJ)); mesh.render( gw, mtl, NULL, COMP_ALL); DrawLine(t,inode,gw,1); gw->setRndLimits(rlim); if(editting && !specLenState) { Point3 pt(0,0,0); Matrix3 tm = inode->GetObjectTM(t); GetTargetPoint(t,inode,pt); float den = Length(tm.GetRow(2)); float dist = (den!=0)?Length(tm.GetTrans()-pt)/den : 0.0f; lengthSpin->SetValue( lastDist = dist, FALSE ); } if(editting) { m.NoTrans(); dirPt = m * Point3(0,0,1); float len = Length(dirPt); if(len != 0) dirPt *= 1.0f/len; UpdateUI(iObjParams->GetTime()); } return(0); }
int bhkListObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { Matrix3 m; Color color = Color(inode->GetWireColor()); GraphicsWindow *gw = vpt->getGW(); Material *mtl = gw->getMaterial(); m = inode->GetObjectTM(t); gw->setTransform(m); DWORD rlim = gw->getRndLimits(); DWORD newrlim = GW_WIREFRAME|GW_Z_BUFFER; #if VERSION_3DSMAX >= ((5000<<16)+(15<<8)+0) // Version 5+ newrlim |= GW_EDGES_ONLY; #endif gw->setRndLimits(newrlim); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen() && !inode->Dependent()) gw->setColor( LINE_COLOR, color); Matrix3 m3(true); float size = 5.0f; Point3 pts[5]; // X pts[0] = Point3(-size, 0.0f, 0.0f); pts[1] = Point3(size, 0.0f, 0.0f); vpt->getGW()->polyline(2, pts, NULL, NULL, FALSE, NULL); // Y pts[0] = Point3(0.0f, -size, 0.0f); pts[1] = Point3(0.0f, size, 0.0f); vpt->getGW()->polyline(2, pts, NULL, NULL, FALSE, NULL); // Z pts[0] = Point3(0.0f, 0.0f, -size); pts[1] = Point3(0.0f, 0.0f, size); vpt->getGW()->polyline(2, pts, NULL, NULL, FALSE, NULL); //UpdateMesh(t); //mesh.render( gw, mtl, NULL, COMP_ALL); gw->setRndLimits(rlim); return 0; }
int WindObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if ( ! vpt || ! vpt->IsAlive() ) { // why are we here DbgAssert(!_T("Invalid viewport!")); return FALSE; } GraphicsWindow *gw = vpt->getGW(); Material *mtl = &swMtl; Matrix3 mat = inode->GetObjectTM(t); DWORD rlim = gw->getRndLimits(); gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|/*GW_BACKCULL|*/ (rlim&GW_Z_BUFFER?GW_Z_BUFFER:0) );//removed BC 2/16/99 DB gw->setTransform(mat); if (inode->Selected()) gw->setColor( LINE_COLOR, GetSelColor()); else if(!inode->IsFrozen()) gw->setColor(LINE_COLOR,GetUIColor(COLOR_SPACE_WARPS)); mesh.render(gw, mtl, NULL, COMP_ALL); int hoopson;float decay; pblock2->GetValue(PB_HOOPSON,t,hoopson,FOREVER); pblock2->GetValue(PB_DECAY,t,decay,FOREVER); if (hoopson && (decay > 0.0f)) { int type;pblock2->GetValue(PB_TYPE,t,type,FOREVER); float range; range=(decay > 0.0f?0.6931472f / decay:0.0f); ModDrawLineProc lp(gw); if (type==FORCE_PLANAR) { float length; pblock2->GetValue(PB_DISPLENGTH,t,length,FOREVER); DrawPlaneRangeHoops(range,3.0f*length,lp); } else DrawFalloffSphere(range,lp); } gw->setRndLimits(rlim); return(0); }