*ARX对数据的类型和单位进行转换
*ARX对数据的类型和单位进行转换
量钢单位转换函数
AutoCAD软件包的文件acad.unt中,定义了一些常用的量钢单位转换关系,例如英里与公里,华氏与摄氏等等。函数acutCvUnit()用来将一种单位的数值转换成另一种单位的数值。单位用字符串的形式表示,使用的字符串必须与文件acad.unt中定义的一致。如果当前绘图单位是工程单位或建筑单位(英尺或英寸),下面的程序能把指定的距离转换成米为单位的值:
ads_real eng_len,metric_len;
char *prmpt=”请输入距离:”;
if(acedGetDist(NULL,prmpt,&eng_len)!=RTNORM) return BAD;
acutCvUnit(eng_len,”inches”,”meters”,&metric_len);
[I]注意:不能用函数acutCvUnit()转换不相配的单位,例如不能把英寸转换成年[/I]。
字符串转换函数
函数acdbRToS()用来将一个实数转换成字符串值;
函数acdbAngToS()用来将一个角度值转换成字符串值;
函数acdbDisToF()用来将一个字符串值转换成实数值;
函数acdbAngToF()用来将一个字符串值转换成角度值。
[I]注意:字符串格式由AutoCAD的系统变量来控制,对于实数值,单位和精度由系统变量LUNITS和IUPREC指定;对于角度值,单位和精度由系统变量AUNITS和AUPERC指定。不论实数还是角度值,标注变量DIMZIN控制着是否在生成字符串的前后补0[/I]。
下面的程序是调用函授acdbRToS()的方法:
ads_real x=17.5;
char fmtval[12];
//精度是第三个参数
acdbRToS(x,1,4,fmtval);
acutPrintf(“结果形式为%s\n”,fmtval);
acdbRToS(x,2,2,fmtval);
acutPrintf(“结果形式为%s\n”,fmtval);
acdbRToS(x,3,2,fmtval);
acutPrintf(“结果形式为%s\n”,fmtval);
acdbRToS(x,4,2,fmtval);
acutPrintf(“结果形式为%s\n”,fmtval);
acdbRToS(x,5,2,fmtval);
acutPrintf(“结果形式为%s\n”,fmtval);
假定系统变量DIMZIN为0,在AutoCAD文本屏幕上显示为:
结果形式为1.7500E+01
结果形式为17.50
结果形式为1′-5.50″
结果形式为1′-5 1/2″
结果形式为17 1/2
当系统变量UNITMODE等于1时,输出串的单位由输入字符串的单位决定,因此,函数acdbRToS()在下列模式下返回的值在形式上是不同的:工程单位制(模式3)、建筑单位制(模式4)和分数形式(模式5)。当UNITMODE=1时,在上面的例子中,前两行的输出形式不变,后三行将变为:
结果形式为1′5.50″
结果形式为1′5 -1/2″
结果形式为17 -1/2
函数acdbDisToF()和acdbRToS()功能相反。下例就是引用上面程序转换后生成的字符串值,再进行反变换得来的,因此,参数restuil的值是17.5。
acdbDisToF(“1.7500E+01”,1,&resuil);
acdbDisToF(“17.50”,2,&resuil);
acdbDisToF(“1′-5.50\″”,3,&resuil);
acdbDisToF(“1′-5 1/2\″”,4,&resuil);
acdbDisToF(“17 1/2”,5,&resuil);
下面的程序代码调用函数acdbAngToS()的方法。与acdbRToS()的调用类似:
ads_real ang=3.14159;
char fmtval[12];
acdbAngToS(ang,0,0,fmtval);
acutPrintf(“角度的形式为%s\n”,fmtval);
acdbAngToS(ang,1,4,fmtval);
acutPrintf(“角度的形式为%s\n”,fmtval);
acdbAngToS(ang,2,4,fmtval);
acutPrintf(“角度的形式为%s\n”,fmtval);
acdbAngToS(ang,3,4,fmtval);
acutPrintf(“角度的形式为%s\n”,fmtval);
acdbAngToS(ang,4,2,fmtval);
acutPrintf(“角度的形式为%s\n”,fmtval);
假定系统变量DIMZIN为0,在AutoCAD文本屏幕上显示为:
角度的形式为180
角度的形式为180d0′0″
角度的形式为200.0000g
角度的形式为3.1416r
角度的形式为w
函数acdbAngToF()与acdbAngToS()功能相反。下例就是引用上面程序转换后生成的字符串值,再进行反变换得来的,因此,参数restuil的值是3.14159。
acdbAngToF(“180”,0,&resuil);
acdbAngToF(“180d0′0\″”,1,&resuil);
acdbAngToF(“200.0000g″”,2,&resuil);
acdbAngToF(“3.1416r”,3,&resuil);
acdbAngToF(“w”,4,&resuil);*