// // Default constructor. // void U32VecSuite::testCtor00() { U32Vec vec; bool ok = ((!vec.canGrow()) && (vec.growthFactor() == 0) && (vec.numItems() == 0) && (vec.capacity() == U32Vec::DefaultCap)); CPPUNIT_ASSERT(ok); }
void ESceneGroupTool::MakeThumbnail() { if (SelectionCount(true)==1) { CGroupObject* object = 0; for (ObjectIt it=m_Objects.begin(); it!=m_Objects.end(); it++) { if ((*it)->Selected()) { object = dynamic_cast<CGroupObject*>(*it); break; } } VERIFY (object); object->Select (false); // save render params Flags32 old_flag = psDeviceFlags; // set render params psDeviceFlags.set (rsStatistic|rsDrawGrid,FALSE); U32Vec pixels; u32 w=512,h=512; if (EDevice.MakeScreenshot (pixels,w,h)) { AnsiString tex_name = ChangeFileExt(object->Name,".thm"); SStringVec lst; ObjectList grp_lst; object->GetObjects (grp_lst); for (ObjectIt it=grp_lst.begin(); it!=grp_lst.end(); ++it) lst.push_back ((*it)->Name); EGroupThumbnail tex (tex_name.c_str(),false); tex.CreateFromData (pixels.begin(),w,h,lst); string_path fn; FS.update_path (fn,_groups_,object->RefName()); strcat (fn,".group"); tex.Save (FS.get_file_age(fn)); }else { ELog.DlgMsg (mtError,"Can't make screenshot."); } object->Select (true); // restore render params psDeviceFlags = old_flag; }else { ELog.DlgMsg (mtError,"Select 1 GroupObject."); } }
void ETextureThumbnail::Draw(HDC hdc, const Irect& R) { if(0==m_Pixels.size()) { u32 image_w, image_h, image_a; xr_string fn_img = EFS.ChangeFileExt(m_Name.c_str(),".tga"); string_path fn; FS.update_path (fn,_textures_,fn_img.c_str()); if( !FS.exist(fn) ) { fn_img = EFS.ChangeFileExt(m_Name.c_str(),".dds"); FS.update_path(fn,_game_textures_,fn_img.c_str()); if( !FS.exist( fn ) ) { ELog.Msg(mtError,"Can't make preview for texture '%s'.",m_Name.c_str()); return; } } U32Vec data; u32 w, h, a; if (!Surface_Load(fn,data,image_w,image_h,image_a)) { ELog.Msg(mtError,"Can't make preview for texture '%s'.",m_Name.c_str()); return; } ImageLib.MakeThumbnailImage(this,data.begin(),image_w,image_h,image_a); } if (Valid()) { Irect r; r.x1 = R.x1+1; r.y1 = R.y1+1; r.x2 = R.x2-1; r.y2 = R.y2-1; if (_Width()!=_Height()) FHelper.FillRect(hdc,r,0x00000000); if (_Width()>_Height()) { r.y2 -= r.height()-iFloor(r.height()*float(_Height())/float(_Width())); }else { r.x2 -= r.width()-iFloor(r.width()*float(_Width())/float(_Height())); } inherited::Draw(hdc,r); } }
u32 VPack(Fvector& V){ u32 P = 0xffffffff; u32 ix,iy,iz; ix = floorf(float(V.x-VMmin.x)/VMscale.x*clpMX); iy = floorf(float(V.y-VMmin.y)/VMscale.y*clpMY); iz = floorf(float(V.z-VMmin.z)/VMscale.z*clpMZ); R_ASSERT(ix<=clpMX && iy<=clpMY && iz<=clpMZ); { U32Vec* vl; vl = &(VM[ix][iy][iz]); for(U32It it=vl->begin();it!=vl->end(); it++) if( verts[*it].similar(V) ) { P = *it; break; } } if (0xffffffff==P){ P = verts.size(); sVert sV; sV.set(V); verts.push_back (sV); VM[ix][iy][iz].push_back(P); u32 ixE,iyE,izE; ixE = floorf(float(V.x+VMeps.x-VMmin.x)/VMscale.x*clpMX); iyE = floorf(float(V.y+VMeps.y-VMmin.y)/VMscale.y*clpMY); izE = floorf(float(V.z+VMeps.z-VMmin.z)/VMscale.z*clpMZ); R_ASSERT(ixE<=clpMX && iyE<=clpMY && izE<=clpMZ); if (ixE!=ix) VM[ixE][iy][iz].push_back (P); if (iyE!=iy) VM[ix][iyE][iz].push_back (P); if (izE!=iz) VM[ix][iy][izE].push_back (P); if ((ixE!=ix)&&(iyE!=iy)) VM[ixE][iyE][iz].push_back (P); if ((ixE!=ix)&&(izE!=iz)) VM[ixE][iy][izE].push_back (P); if ((iyE!=iy)&&(izE!=iz)) VM[ix][iyE][izE].push_back (P); if ((ixE!=ix)&&(iyE!=iy)&&(izE!=iz)) VM[ixE][iyE][izE].push_back (P); } return P; }
void U32VecSuite::testAdd04() { Sample0 vec0; U32Vec vec; size_t startAt = 0; size_t itemCount = 1; unsigned int numAdds = vec.add(vec0, startAt, itemCount); bool ok = (numAdds == itemCount); CPPUNIT_ASSERT(ok); startAt = 1; itemCount = vec0.numItems() - 1; numAdds = vec.add(vec0, startAt, itemCount); ok = (numAdds == itemCount) && (vec == vec0); CPPUNIT_ASSERT(ok); vec.reset(); numAdds = vec.add(vec0); ok = (numAdds == vec0.numItems()) && (vec == vec0); CPPUNIT_ASSERT(ok); numAdds = vec.reset(vec0, 0, vec0.numItems()); ok = (numAdds == vec0.numItems()) && (vec == vec0); CPPUNIT_ASSERT(ok); int growBy = 0; vec.setGrowth(growBy); vec.resize(vec.numItems()); ok = (!vec.add(vec0.peek(5))); CPPUNIT_ASSERT(ok); ok = (!vec.addAtIndex(0, vec0.peek(5))); CPPUNIT_ASSERT(ok); }
bool CEditableMesh::OptimizeFace(st_Face& face){ Fvector points[3]; int mface[3]; int k; for (k=0; k<3; k++){ points[k].set(m_Verts[face.pv[k].pindex]); mface[k] = -1; } // get similar vert idx list for (k=0; k<3; k++){ U32Vec* vl; int ix,iy,iz; ix = iFloor(float(points[k].x-VMmin.x)/VMscale.x*MX); iy = iFloor(float(points[k].y-VMmin.y)/VMscale.y*MY); iz = iFloor(float(points[k].z-VMmin.z)/VMscale.z*MZ); vl = &(VM[ix][iy][iz]); for(U32It it=vl->begin();it!=vl->end(); it++){ FvectorIt v = m_NewPoints.begin()+(*it); if( v->similar(points[k],EPS) ) mface[k] = *it; } } for(k=0; k<3; k++ ){ if( mface[k] == -1 ){ mface[k] = m_NewPoints.size(); m_NewPoints.push_back( points[k] ); int ix,iy,iz; ix = iFloor(float(points[k].x-VMmin.x)/VMscale.x*MX); iy = iFloor(float(points[k].y-VMmin.y)/VMscale.y*MY); iz = iFloor(float(points[k].z-VMmin.z)/VMscale.z*MZ); VM[ix][iy][iz].push_back(mface[k]); int ixE,iyE,izE; ixE = iFloor(float(points[k].x+VMeps.x-VMmin.x)/VMscale.x*MX); iyE = iFloor(float(points[k].y+VMeps.y-VMmin.y)/VMscale.y*MY); izE = iFloor(float(points[k].z+VMeps.z-VMmin.z)/VMscale.z*MZ); if (ixE!=ix) VM[ixE][iy][iz].push_back(mface[k]); if (iyE!=iy) VM[ix][iyE][iz].push_back(mface[k]); if (izE!=iz) VM[ix][iy][izE].push_back(mface[k]); if ((ixE!=ix)&&(iyE!=iy)) VM[ixE][iyE][iz].push_back(mface[k]); if ((ixE!=ix)&&(izE!=iz)) VM[ixE][iy][izE].push_back(mface[k]); if ((iyE!=iy)&&(izE!=iz)) VM[ix][iyE][izE].push_back(mface[k]); if ((ixE!=ix)&&(iyE!=iy)&&(izE!=iz)) VM[ixE][iyE][izE].push_back(mface[k]); } } if ((mface[0]==mface[1])||(mface[1]==mface[2])||(mface[0]==mface[2])){ Msg("!Optimize: Invalid face found. Removed."); return false; }else{ face.pv[0].pindex = mface[0]; face.pv[1].pindex = mface[1]; face.pv[2].pindex = mface[2]; return true; } }