コード例 #1
0
ファイル: U32VecSuite.cpp プロジェクト: thanhtphung/cppware
//
// Default constructor.
//
void U32VecSuite::testCtor00()
{
    U32Vec vec;
    bool ok = ((!vec.canGrow()) &&
        (vec.growthFactor() == 0) &&
        (vec.numItems() == 0) &&
        (vec.capacity() == U32Vec::DefaultCap));
    CPPUNIT_ASSERT(ok);
}
コード例 #2
0
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.");
    }
}
コード例 #3
0
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);
    }
}
コード例 #4
0
ファイル: portalutils.cpp プロジェクト: NeoAnomaly/xray
    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;
    }
コード例 #5
0
ファイル: U32VecSuite.cpp プロジェクト: thanhtphung/cppware
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);
}
コード例 #6
0
ファイル: EditMeshModify.cpp プロジェクト: OLR-xray/OLR-3.0
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;
	}
}