示例#1
0
//---------------------------------------------------------------------------------------
void z_ed3View::OnMouseMove(UINT nFlags, CPoint point) 
{
    V3      scrPt;
    CPoint  pt = _mm._pt - point;
    

    if(_mm._rdown || _mm._ldown)
    {
        _mm._pt    = point; 
        //SetCursorPos(_mm._pt.x, _mm._pt.y);

		if(AKEY('L'))
		{
			DrawInHrc(_hdc);
			CView::OnMouseMove(nFlags, point);
			REAL cf = _fov + pt.y;
			
			if(cf < 35) cf=35;
			if(cf>140)  cf=140;

			_fov = cf ;
			DOC()->_cam.SetFov(_fov);

			SBT(3,MKSTR("FOV :%03.0f", _fov));
			return;
		}

/*
		if(!AKEY(VK_LBUTTON))
			_mm._ldown=0;

		if(!AKEY(VK_RBUTTON))
			_mm._rdown=0;
*/
    }

    DOC()->Make3dCursorPos(this, point, _rt, scrPt);


    if(_mm._ldown)
    {
        
        if(abs(pt.x) > 0|| 
           abs(pt.y) > 0)
        {
            if(_mm._rdown)
            {
                if(AKEY(VK_SPACE))
				{
                    DOC()->_cam.MoveUp(pt.y*64.f); 
				}
                else
				{
                    DOC()->_cam.MoveUp(pt.y*2.f);
				}

				if(AKEY(VK_SPACE))
				{
					DOC()->_cam.MoveSide(-pt.x*64.f);    	
				}
				else
				{
					DOC()->_cam.MoveSide(-pt.x*2.f);
				}
            }
			else
			{
				if(AKEY(VK_SHIFT))
				{
					V3		cr ;
					int		nC = 0;
					Brush** ppb = DOC()->GetSelBrushes(nC);
					if(nC){
						cr = (*ppb)->_box.GetCenter();
					}
					REAL dst = -vdist(DOC()->_cam._pos , cr);
					DOC()->_cam._pos = cr;
					DOC()->_cam.Rotate(-pt.x/128.f,-pt.y/128.f,0);
					DOC()->_cam._pos = cr + (DOC()->_cam._fwd)*dst;


				}
				else
				{
					DOC()->_cam.Rotate(-pt.x/128.f,-pt.y/128.f,0);
				}
    			
			}
			_rotating = TRUE;
        }
		
        SBT(2,MKSTR("CAM: %04.2f %04.2f z:%04.2f",	DOC()->_cam._pos.x/GMeters,
															DOC()->_cam._pos.y/GMeters,
															DOC()->_cam._pos.z/GMeters));
		if(DOC()->_compviewmode != C_NA)
		{
			DOC()->Invalidate(); //allow to see the full BSP
		}
		else
			DrawInHrc(_hdc);

	}
    else if(_mm._rdown )
    {
        
        if(AKEY(VK_SPACE) )
            DOC()->_cam.MoveFwd(pt.y*64.f);
        else
            DOC()->_cam.MoveFwd(pt.y*4.f);
	
		SBT(2,MKSTR("CAM: %04.2f %04.2f z:%04.2f",DOC()->_cam._pos.x/GMeters,
														  DOC()->_cam._pos.y/GMeters,
														  DOC()->_cam._pos.z/GMeters));
        _rotating = TRUE;
		if(DOC()->_compviewmode != C_NA)
		{
			DOC()->Invalidate();
		}
		else
			DrawInHrc(_hdc);

    }
    
    if(_mm._rdown || _mm._ldown)
        Rollover(point);
    
	CView::OnMouseMove(nFlags, point);
}
示例#2
0
/* w blob_number identyfikator obiektu binarnego w tabeli tblob */
long db2_bmd_db_export_blob(void *hDB,GenBuf_t *dataGenBuf,char **blob_number)
{

	DB_bmd_db_conn_t *db_conn=NULL;
		long err=0;
	#ifndef BLOB_IN_BYTEA
		long lobj_fd=0,tmp=0;
		Oid lobjId ;
	#else
		char *SQLQuery			= NULL;
		char *c_tmp				= NULL;
		long fetched_counter = 0;
		long rows = 0;
		long cols = 0;
		//Oid in_oid[]={0,17}; /* varchar, bytea */
		char* params[]={NULL,NULL};	//{chunk_size,bobj};
		int params_length[2]={0,0};	//nalezy ustawic rozmiary przynajmniej dla danych nie tekstowych
		//int params_format[2]={0,1}; /* text,binary */
		void *bmd_db_res	= NULL;
		SQLRETURN     rc;
	#endif

		PRINT_INFO("LIBBMDPGINF Exporting file to LO\n");

		if (hDB==NULL)
			return BMD_ERR_PARAM1;
		if (dataGenBuf == NULL)
			{	BMD_FOK(BMD_ERR_PARAM2);	}
		if (blob_number == NULL)
			{	BMD_FOK(BMD_ERR_PARAM3);	}
		if ((*blob_number) != NULL)
			{	BMD_FOK(BMD_ERR_PARAM3);	}
		if( (*((long *)hDB)) != BMD_DBCONN_MAGIC )
			return BMD_ERR_INVALID_PTR;

		db_conn=(DB_bmd_db_conn_t *)hDB;
		if( db_conn->hdbc == NULL )
			return BMD_ERR_NODATA;

		SBT(hDB,db_conn);
		/*
		 * Utworz large object.
		 */
	#ifndef BLOB_IN_BYTEA
		//lobjId = lo_creat(db_conn->pg_conn, INV_READ | INV_WRITE);
		if( lobjId == 0)
		{
			RBT(hDB,db_conn);
			PRINT_ERROR("LIBBMDPGERR Error in creating large object - lo_creat.\n");
			return BMD_ERR_OP_FAILED;
		}

		//lobj_fd = lo_open(db_conn->pg_conn, lobjId, INV_WRITE);
		//if(lobj_fd == -1)
		{
			RBT(hDB,db_conn);
			BMD_FOK(BMD_ERR_OP_FAILED);
		}

		//tmp = lo_write(db_conn->pg_conn, lobj_fd, (char *)dataGenBuf->buf, dataGenBuf->size);
		if(tmp < dataGenBuf->size)
		{
			RBT(hDB,db_conn);
			BMD_FOK(BMD_ERR_OP_FAILED);
		}

		//(void) lo_close(db_conn->pg_conn, lobj_fd);
		asprintf(blob_number, "%li", (long)lobjId);
	#else
		/* pobierz sekwencj� numeru obiektu binarnego lobjId (blob_number)*/
		asprintf(&SQLQuery, "VALUES NEXT VALUE FOR co_raster_id");
		 ;
		if(SQLQuery == NULL) return NO_MEMORY;
		err = db2_bmd_db_execute_sql(	hDB, SQLQuery,
											&rows, &cols, (void **)&bmd_db_res);
		/**if(SQLQuery != NULL) */{ free(SQLQuery); SQLQuery=NULL; }
		if(err<BMD_OK)
		{
			PRINT_ERROR("LIBBMDSQLERR Error in while execute VALUES NEXT VALUE FOR co_raster_id\n");
			db2_bmd_db_rollback_transaction(hDB, NULL);
			if(SQLQuery != NULL) { free(SQLQuery); SQLQuery=NULL; }
			return err;
		}
		err=db2_bmd_db_result_get_value(hDB,(void *)bmd_db_res,0,0,&c_tmp,FETCH_ABSOLUTE,&fetched_counter);
		if(err<BMD_OK)
		{
			PRINT_ERROR("LIBBMDSQLERR Error while getting value\n");
			db2_bmd_db_rollback_transaction(hDB, NULL);
			db2_bmd_db_result_free((void**)&bmd_db_res);
			if(SQLQuery != NULL) { free(SQLQuery); SQLQuery=NULL; }
			return err;
		}
		db2_bmd_db_result_free((void**)&bmd_db_res);
		bmd_db_res = NULL;

		//wlasciwy etap zapisu
		params[0] = (char *)c_tmp;
		params[1] = (char *) dataGenBuf->buf;

		params_length[0] = (int)strlen(c_tmp);
		params_length[1] = dataGenBuf->size;

		db_conn = (DB_bmd_db_conn_t *) hDB;
		SQLCHAR *stmt = ( SQLCHAR * )"INSERT INTO tblob(fk_co_raster_id,bobj) VALUES (?, ?)";
				//sizeof(params)/sizeof(params[0]),
				//in_oid, (const char *const * )params, (const int*)params_length,
				//(const int*)params_format, 1

		rc = SQLAllocHandle(SQL_HANDLE_STMT, *(db_conn->hdbc), db_conn->hstmt);
			if (rc != SQL_SUCCESS)
			{
				PRINT_ERROR("Error while esec sql query: INSERT INTO tblob...\n");
				extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
				db2_bmd_db_rollback_transaction(hDB, NULL);
				return BMD_DB_EXECUTION_ERROR;
			}

		rc = SQLBindParameter(*(db_conn->hstmt), 1, SQL_PARAM_INPUT, SQL_C_CHAR,
		                             SQL_VARCHAR, params_length[0], 0, params[0], params_length[0], NULL);
		if (rc != SQL_SUCCESS)
					{
						PRINT_ERROR(">--- Error while SQLBindParameter, (SQL_VARCHAR)\n");
						extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
						db2_bmd_db_rollback_transaction(hDB, NULL);
						return BMD_DB_EXECUTION_ERROR;
					}
		rc = SQLBindParameter(*(db_conn->hstmt), 2, SQL_PARAM_INPUT, SQL_C_BINARY,
					SQL_BLOB, params_length[1], 0, params[1], params_length[1], NULL);
		if (rc != SQL_SUCCESS)
					{
						PRINT_ERROR(">--- Error while SQLBindParameter, (SQL_BLOB)\n");
						extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
						db2_bmd_db_rollback_transaction(hDB, NULL);
						return BMD_DB_EXECUTION_ERROR;
					}
		rc = SQLExecDirect(*(db_conn->hstmt), stmt, SQL_NTS);
		if (rc != SQL_SUCCESS)
					{
						PRINT_ERROR("Driver reported the following diagnostics: ");
						extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
						db2_bmd_db_rollback_transaction(hDB, NULL);
						return BMD_DB_EXECUTION_ERROR;
					}

		*blob_number = c_tmp;
		c_tmp = NULL;	//przekazywane na zewnatrz funkcji
		params[0] = NULL;
		if (rc == SQL_SUCCESS)

		{
			/* success */
			err = BMD_OK;
		}
		else
		{
			PRINT_ERROR("LIBBMDPINFO DBresultStatus(pq_db_res)\n");
			db2_bmd_db_rollback_transaction(hDB, NULL);
			BMD_FOK(BMD_ERR_NODATA);
		}

	#endif
		EBT(hDB,db_conn);

		return err;

}
示例#3
0
LRESULT CMainFrame::OnSbarNoty(WPARAM kc, LPARAM down)
{
    if(kc==VK_SHIFT)
    {
        if(down)
        {
            SBT(0, "Back Sel(+Tab), SelBox Touch, Scroll View, Slow Zoom, Center Rot-Mode") ;
            return 0;
        }
    }
    else if(kc==VK_CONTROL)
    {
        if(down)
        {
            SBT(0, "2DE Insert/Extrude, Trig Move, Add Sel, White wire, HSR merge, Motion spread, 3D dblclk view") ;
            return 0;
        }
    }
    else if(kc==VK_SPACE)
    {
        if(down)
        {
            SBT(0, "Updates all views or TexApply=4bpp") ;
            return 0;
        }
    }
    else if(kc >= '0' && kc<='9')
    {
        int ikc = kc-'0';
        if(down)
        {
            if(ikc==0)
            {
                SBT(0, "Rot mode: double click resets rotation");
                return 0;
            }
            else
            {
                SBT(0, MKSTR("Rot mode, dblclk rotates %d degrees, 0 1 2 3 selection modes", 180/ikc));
                return 0;
            }
        }
    }
    else
    {
        char *expl[32]={
            "Current action affect only polygons, 3D simulate left click",
            "Current action affect only polygons, 3D simulate mid click",
            "Current action affect only polygons, 3D simulate right click",
            "Current action affect only brusges, Resize on both dimensions",
            "Extrude polygon backwards",
            "Extrude polygon along its normal",
            "Texture rotation mode",
            "Move mouse to adjust Field of view",
            "ZY Lock. Moves / Resizes on X",
            "ZX Lock Moves / Resizes on Y",
            "XY Lock Moves / Resizes on Z"
        };
        char hotchars[] = "IOPBRNTLXYZ";
        for(int i=0; i<strlen(hotchars); i++ )
        {
            if(kc==hotchars[i])
            {
                if(down)
                {
                    SBT(0, expl[i]); 
                    return 0;
                }
            }
        }
    }
    if(down)
        SBT(0, "Curent key is not bounded to any action...");

    return 0;
}