huangyhg 发表于 2003-10-20 18:06:00

10.20提取“标注”的尺寸值信息(已经找了2天2夜了,苦啊!!!)

//开发环境:Vc6.0和arx2000
//调试下面的代码段时,报错:contextmenu\ModalDlg.cpp(53) : error C2664: //'measurement' : cannot convert parameter 1 from 'const double *' to 'double &'
//A reference that is not to 'const' cannot be bound to a non-lvalue
//代码段欲实现的目标(未能实现)
//提取“标注”的尺寸值信息,比如:在autocad2000中画一直线段,并标注有//尺寸100,想通过arx程序编码形式,实现通过鼠标选中该“尺寸标注”,读取//并显示这个尺寸值“100”到自定义的对话框中的一文本框里。
ads_nameen;
AcDbObjectId eId;
acdbGetObjectId(eId,en);
AcDbObject *pObj;
acdbOpenObject(pObj,eId,AcDb::kForRead);
if(pObj->isKindOf(AcDbDimension::desc()))
{
        //m_measure关联对话框上的一个文本框的double型变量
//问1:m_measure变量应定义成什么类型?

        AcDbDimension::measurement(&m_measure);
//帮助项中写道:Acad::ErrorStatus measurement( double &val);
//val        This function returns set to the current measurement value for this dimension.
//问2:提取“标注”的尺寸值信息的函数是measurement吗?其格式是?

//问2续:怎么让m_measure得到尺寸值?

UpdateData(FALSE);//FALSE大写
pObj->close();
// iterate(eId);
}
else
{
        pObj->close();
        ads_printf("\nselected entity is unknow!");
}


//非常感谢!!!

leeyeafu 发表于 2003-10-20 18:36:00

试试这个:
// double m_measure;
   //如果你将变量m_measure声明为double指针,可用measure(*m_measure);
ads_nameen;
AcDbObjectId eId;
acdbGetObjectId(eId,en);
AcDbObject *pObj;
acdbOpenObject(pObj,eId,AcDb::kForRead);
AcDbDimension *ObjDim;   //这个临时变量用于存放转换为AcDbDimension类型的实体
if(pObj->isKindOf(AcDbDimension::desc()))
{
    ObjDim = AcDbDimension::cast(pObj);
    ObjDim->measure(m_measure);//或者ObjDim->measure(*measure);
    ObjDim->close();
    pObj->close();
}
else
{
   ......
}

至于指针和引用的正确使用,你可以看看源码区的置顶帖子“深入......”,当你理解了那篇文章所述内容后,遇到error C2664就不会措手无策了。

huangyhg 发表于 2003-10-21 14:55:00

哈哈哈
我会了
今天是个好~~好~~~日子

huangyhg 发表于 2003-10-21 15:24:00

我也拜读了斑竹的文章,现在差不多会用帮助项里的函数格式了
程序结果已经调试出来了

hourui800720 发表于 2011-7-29 16:44:42

gao ren a ,lihai
页: [1]
查看完整版本: 10.20提取“标注”的尺寸值信息(已经找了2天2夜了,苦啊!!!)