我的问题

lyemail19791103 2006-05-13 05:52:47
#include<stdlib.h>/* 定义了exit()函数 */
#include<math.h>/* 定义了fmodf()函数 */
#include"vg.h"
/* 自定义运动模式回调函数声明 */
int my_motion_model(vgMotionCallbackStruct *mot_cb);
void toggleEnable(vgMotion* com);
/* 用户数据参数结构体声明 */
typedef struct
{
float x, y, z; /* 数据库单位的位置坐标 */
float h, p, r; /* 以角度为单位的姿态角 */
float velocity; /* 运动速度 */
vgPosition *pos; /* 临时位姿 */
}motion_model_data;
//struct PositionStruct g_Position;
void main( int argc , char *argv[ ] )
{
/* 定义必要的Vega 类实例指针 */
vgObserver *obs;
vgMotion *mot;
vgIsector *ise;
vgIDev *idev;
motion_model_data *my_data; /* 用户数据指针 */
int i;
if ( argc < 2 )
{
printf ( "Useage: %s \\n" , argv[0] );
exit ( -1 );
}
/* 初始化、定义、配置系统 */
vgInitSys();
vgDefineSys(argv[1]);
vgConfigSys();
obs = vgGetObserv( 0 );
/* 取消不必要的Isector 的限制 */
for(i=0;i<vgGetObservNumIsect(obs);i++)
{
ise = vgGetObservIsect( obs, i );
vgRemObservIsect( obs, ise );
}

mot = vgGetObservMot( obs );
/* 设置运动模式 */
if (!mot)
{
mot = vgNewMot();
vgName(mot, "My Motion Model");
vgObservMot(obs, mot);
vgProp(obs, VGOBS_TETHERSTATE, VGOBS_DYNAMIC);
}
/* 指定输入设备 */
idev = vgNewIDev();
vgName(idev, "Mouse");
vgIDevOpen(idev);
vgMotIDev(mot, idev);
/* 注册新的自定义运动模式 */
vgMotRegister(VGMOT_USER1, my_motion_model);
/* 为运动模式回调函数用户自定义数据分配内存空间并创建用户数据 */
my_data = vgCalloc(sizeof(motion_model_data), vgGetSharedArena());

// my_data = pfCalloc(1, sizeof(motion_model_data), vgGetSharedArena());


/* 指定回调函数所使用的用户数据参数 */
vgUserData(mot, my_data);
/* 指定使用自定义的运动模式 */
vgProp(mot, VGMOT_MODEL, VGMOT_USER1);
/* 主循环 */
while ( 1 )
{
vgSyncFrame ();
vgFrame ();
/* 键盘响应控制 */
switch(vgGetWinKey(vgGetWin(0)))
{
case 'x':
toggleEnable(mot);
break;
default:
break;
}
}
}
/* 控制Vega 类实例的启用或禁用 */
void toggleEnable(vgMotion* com)
{

if (vgGetProp(com, VGCOMMON_ENABLED))
vgProp(com, VGCOMMON_ENABLED, VG_OFF);
else
vgProp(com, VGCOMMON_ENABLED, VG_ON);
}
/* 自定义运动模式的实现函数 */
int my_motion_model(vgMotionCallbackStruct *mot_cb)
{
vgIDev *idev; /* 输入设备 */
int toggles[3]; /* 输入设备按键 */
int middlebutton, leftbutton, rightbutton;
float devicex, devicey, devicez; /* 输入设备坐标 */
float deviceh, devicep, devicer;
float sin_h, cos_h;
static vgPosition *device_pos = NULL; /* 设备坐标位姿 */
motion_model_data *data; /* 用户数据指针 */
data = (motion_model_data *)mot_cb->user_data;
if (!data)
{
printf("motion model callback data not available\\n");
return(-1);
}


idev=vgGetMotIDev(mot_cb->mot); /* 获取输入设备指针 */
if(!device_pos)
device_pos=vgNewPos(); /* 创建必需的设备坐标位姿 */
switch(mot_cb->reason)
{
/* 运动初始化 */
case VGMOT_INIT_EVENT:
if (!data->pos)
data->pos = vgNewPos();
vgGetPos(mot_cb->mot, data->pos);
vgGetPosVec(data->pos, &data->x, &data->y, &data->z,
&data->h, &data->p, &data->r);
/* 运动初始位置 */
data->x = 2500.0f;
data->y = 2500.0f;
data->z = 2.5f;
/* 运动初始姿态 */
data->h = 0.0f;
data->p = 0.0f;

data->r = 0.0f;
/* 运动初始速度 */
data->velocity = 1.0f;
break;
/* 更新运动模式 */
case VGMOT_UPDATE_EVENT:
/* 获取鼠标位置坐标 */
vgGetPos( idev, device_pos );
vgGetPosVec( device_pos, &devicex, &devicey, &devicez,
&deviceh, &devicep, &devicer );
/* 获取鼠标按键信息 */
vgIDevReadToggleData( idev, toggles, 3 );
leftbutton = toggles[0];
middlebutton = toggles[1];
rightbutton = toggles[2];
/* 速度控制 */
if (leftbutton)
{
if (data->velocity < 10.0f)
data->velocity += 1.0f;
}
if (rightbutton)
{
if ( data->velocity > 1.0f)
data->velocity -= 1.0f;
}
/* 视点高度控制 */
if (leftbutton && middlebutton)
data->z += 1;
if (rightbutton && middlebutton)
data->z -= 1;
/* 平转方向控制 */
data->h -= devicex;
if ((data->h < -360.0f) || (data->h > 360.0f))
{
data->h = fmod(data->h, 360.0f);
}
vgGetSinCos(data->h, &sin_h, &cos_h);
/* 视点位置控制 */
data->x -= data->velocity * sin_h * devicey;
data->y += data->velocity * cos_h * devicey;
/* 保存位姿矢量 */

vgPosVec(data->pos, data->x, data->y, data->z,
data->h, data->p, data->r);
/* 更新运动位姿 */
vgPos(mot_cb->mot, data->pos);
break;
/* 运动复位控制 */
case VGMOT_RESET_EVENT:
vgGetPos(mot_cb->mot, data->pos);
vgGetPosVec(data->pos, &data->x, &data->y, &data->z,&data->h, &data->p, &data->r);
/* 设置复位位姿 */
data->x = 2600.0f;
data->y = 2400.0f;
data->z = 3.0f;
data->h = 0.0f;
data->p = 0.0f;
data->r = 0.0f;
/* 设置复位速度 */
data->velocity = 1.0f;
break;
/* 运动停止 */
case VGMOT_STOP_EVENT:
data->velocity = 0.0f;
/* 退出运动模式 */
case VGMOT_EXIT_EVENT:
/* 清理位姿内存空间 */
vgDelPos(data->pos);
data->pos = NULL;
break;
/* 通常不会发生的事件 */
default:
vgNotify( VG_WARN, VG_APP, "My Motion Model: Invalid Callback event",
mot_cb->reason );
break;
}
return(0);
}
Compiling...
xl.cpp
C:\Documents and Settings\DZJS\桌面\xl\xl.cpp(59) : error C2440: '=' : cannot convert from 'void *' to 'motion_model_data *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

xl.exe - 1 error(s), 0 warning(s)
如何解决?
...全文
154 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crob 2006-05-13
  • 打赏
  • 举报
回复
上面都写了,强制转换错误,自己查查吧。
CUG122032 2006-05-13
  • 打赏
  • 举报
回复
太长了.让人到哪找去?

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧