可以在callback函数中进行创建,创建完成后清空输入的两个点并且激活到圆心输入控件上,这样就可以一直创建了。
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!
能帮我看一下是不是代码有问题吗?
这样我也看不出来你的代码哪里有问题,但是这个思路是可行的,我做出来过。
好吧,还是谢谢你了
能帮我看一下是不是代码有问题吗? #define id1Point 1//圆心点控件 #define id2Point 2//边界点控件 bool 边界点是否激活 = false;//预览用到 static int Createcircle(int vdata); static void Createcircledatainit(int vdata); static int CreatecircleEcho(int vdata); static int Nextcircle(char* form, int idField, int vdata); int registerCreateCircleCommands(void) { cvxCmdFunc(“Createcircle”, Createcircle, VX_CODE_GENERAL); cvxCmdFunc(“Createcircledatainit”, Createcircledatainit, VX_CODE_GENERAL); cvxCmdFunc(“CreatecircleEcho”, CreatecircleEcho, VX_CODE_GENERAL); cvxCmdFunc(“Nextcircle”, Nextcircle, VX_CODE_GENERAL); return 0; } int unregisterCreateCircleCommands(void) { cvxCmdFuncUnload(“Createcircle”); cvxCmdFuncUnload(“Createcircledatainit”); cvxCmdFuncUnload(“CreatecircleEcho”); cvxCmdFuncUnload(“Nextcircle”); return 0; } int Createcircle(int vdata)//模板函数 { cvxMsgDisp(“画圆”); svxPoint 圆心点 = {}; svxPoint2 二维圆心点 = {}; svxPoint 边界点 = {}; //读取点1的值 svxData 点数据 = {}; cvxDataGet(vdata, id1Point, &点数据); 圆心点 = 点数据.Pnt; 二维圆心点.x = 点数据.Pnt.x; 二维圆心点.y = 点数据.Pnt.y; //读取点2的值 点数据 = {}; cvxDataGet(vdata, id2Point, &点数据); 边界点 = 点数据.Pnt; double 半径 = 0.0; ZwPointDistanceGet(圆心点, 边界点, &半径); szwSketchCircleCreateByRadius 圆数据; szwEntityHandle 圆句柄; ZwSketchCircleCreateByRadiusInit(&圆数据);// 初始化圆数据 圆数据.center = 二维圆心点; 圆数据.radius = 半径; ZwSketchCircleCreateByRadius(圆数据,nullptr); return 0; } void Createcircledatainit(int idData)//数据初始化 { cvxMsgDisp(“初始化”); 边界点是否激活 = false; } int CreatecircleEcho(int vdata)//预览 { svxPoint 圆心点 = {}; svxPoint2 二维圆心点 = {}; svxPoint 边界点 = {}; //读取点1的值 svxData 点数据 = {}; cvxDataGet(vdata, id1Point, &点数据); 圆心点 = 点数据.Pnt; 二维圆心点.x = 点数据.Pnt.x; 二维圆心点.y = 点数据.Pnt.y; //读取点2的值 点数据 = {}; cvxDataGet(vdata, id2Point, &点数据); 边界点 = 点数据.Pnt; double 半径 = 0.0; ZwPointDistanceGet(圆心点, 边界点, &半径); //读取当前活动的字段 int 激活的字段 = 0; cvxFormActiveField(&激活的字段); if (!边界点是否激活 && 激活的字段 == id2Point) //如果激活过点2控件,则标志位设置为true { 边界点是否激活 = true; } if (激活的字段 == id1Point || 激活的字段 == id2Point) //如果焦点在点控件上 { if (!边界点是否激活) //如果是初始状态,先不预览 { return 0; } // szwSketchCircleCreateByRadius 圆数据; szwEntityHandle 圆句柄; ZwSketchCircleCreateByRadiusInit(&圆数据);// 初始化圆数据 圆数据.center = 二维圆心点; 圆数据.radius = 半径; cvxEchoCustomStart();//预览圆 ZwSketchCircleCreateByRadius(圆数据, nullptr); cvxEchoCustomEnd(); } return 0; } int Nextcircle(char* form, int idField, int vdata)//点2控件回调,生成下一个圆 { cvxMsgDisp(“下一个”); Createcircle(vdata); // 重置数据并回到点1 cvxEchoDraw(); // 立即刷新显示 cvxDataClear(vdata, id1Point);//清除点1数据 cvxDataClear(vdata, id2Point);//清除点2数据 cvxFieldFocusSet(form, id1Point);//焦点转移到点1 边界点是否激活 = false; // 重置标志位 return 0; }
我现在是利用第二个点控件的回调函数来创建圆,函数返回成功,但是实际上没有生成圆,而且无法删除两个点的数据,切换焦点也无效,虽然函数返回值是ok的?