如果用vc读取dxf的属性数据(有尝)
如果用vc读取dxf的属性数据(有尝)急!
QQ 16976004
MSN alan_lus@hotmail.com 通过检索“printdxf”得到一份帮助代码:
void getlast()
{
struct resbuf *ebuf, *eb;
ads_name ent1;
acdbEntLast(ent1);
ebuf = acdbEntGet(ent1);
eb = ebuf;
acutPrintf("\nResults of entgetting last entity\n");
// Print items in the list.
for (eb = ebuf; eb != NULL; eb = eb->rbnext)
printdxf(eb); //printdxf此函数没有类型定义????报错一
// Release the acdbEntGet() list.
acutRelRb(ebuf);
}
int printdxf(eb)
struct resbuf *eb; //这句就更不清楚是怎么回事了?又是int,又是struct
//而且一个指针*eb没有赋值
{
int rt;
if (eb == NULL)
return RTNONE;
if ((eb->restype >= 0) && (eb->restype <= 9))
rt = RTSTR ;
else if ((eb->restype >= 10) && (eb->restype <= 19))
rt = RT3DPOINT;
else if ((eb->restype >= 38) && (eb->restype <= 59))
rt = RTREAL ;
else if ((eb->restype >= 60) && (eb->restype <= 79))
rt = RTSHORT ;
else if ((eb->restype >= 210) && (eb->restype <= 239))
rt = RT3DPOINT ;
else if (eb->restype < 0)
// Entity name (or other sentinel)
rt = eb->restype;
else
rt = RTNONE;
switch (rt) {
case RTSHORT:
acutPrintf("(%d . %d)\n", eb->restype,
eb->resval.rint);
break;
case RTREAL:
acutPrintf("(%d . %0.3f)\n", eb->restype,
eb->resval.rreal);
break;
case RTSTR:
acutPrintf("(%d . \"%s\")\n", eb->restype,
eb->resval.rstring);
break;
case RT3DPOINT:
acutPrintf("(%d . %0.3f %0.3f %0.3f)\n",
eb->restype,
eb->resval.rpoint, eb->resval.rpoint,
eb->resval.rpoint);
break;
case RTNONE:
acutPrintf("(%d . Unknown type)\n", eb->restype);
break;
case -1:
case -2:
// First block entity
acutPrintf("(%d . <Entity name: %8lx>)\n",
eb->restype, eb->resval.rlname);
}
return eb->restype; 可将帮助文件里的功能实现部分添加到你的程序当中,为何不能以函数的形式添加,
我也不知道。
void myEntityContext::onCommand(Adesk::UInt32 cmdIndex)
{
struct resbuf *ebuf, *eb;
ads_nameen;
acdbEntLast(en);
ebuf = acdbEntGet(en);
eb = ebuf;
acutPrintf("\nResults of entgetting last entity\n");
// Print items in the list.
for (eb = ebuf; eb != NULL; eb = eb->rbnext)
{
int rt;
//所选实体为形位公差类型,从autocad自带的lisp编辑器中可看到相关图元参数
/* if (eb->restype ==-1 )
{acutPrintf("(%d . <Entity name: %8lx>)\n",eb->restype, eb->resval.rlname); }
else if(eb->restype ==0)
{acutPrintf("(%d . \"%s\")\n", eb->restype,eb->resval.rstring); }
else if(eb->restype ==330)
{acutPrintf("(%d . <Entity name: %8lx>)\n",eb->restype, eb->resval.rlname); }
else if(eb->restype ==5)
{acutPrintf("(%d . \"%s\")\n", eb->restype,eb->resval.rstring); }
else if(eb->restype ==67)
{acutPrintf("(%d . %d)\n", eb->restype,eb->resval.rint); }
//else if(eb->restype ==410)
// {acutPrintf("(%d . %d)\n", eb->restype,eb->resval.rint); }
if ((eb->restype >= 0) && (eb->restype <= 9))
{ rt = RTSTR ;acutPrintf("(%d . \"%s\")\n", eb->restype,eb->resval.rstring); }
else if ((eb->restype >= 10) && (eb->restype <= 19)&&(eb->restype >= 210) && (eb->restype <= 239))
{ rt = RT3DPOINT; acutPrintf("(%d . %0.3f %0.3f %0.3f)\n",eb->restype,eb->resval.rpoint, eb->resval.rpoint, eb->resval.rpoint); }
else if ((eb->restype >= 38) && (eb->restype <= 59))
{rt = RTREAL ;acutPrintf("(%d . %0.3f)\n", eb->restype,eb->resval.rreal); }
else if ((eb->restype >= 60) && (eb->restype <= 79))
{rt = RTSHORT ; acutPrintf("(%d . %d)\n", eb->restype,eb->resval.rint); }
//else if ((eb->restype >= 210) && (eb->restype <= 239))
// rt = RT3DPOINT ;
else if (eb->restype < 0)
// Entity name (or other sentinel)
{ rt = eb->restype; acutPrintf("(%d . <Entity name: %8lx>)\n",eb->restype, eb->resval.rlname); }
else
{ rt = RTNONE;acutPrintf("(%d . Unknown type)\n", eb->restype);}
}
从帮助项中提取的源代码,还有写Unknown type,不过,你按合适的判断语句和输出语句就可看到在正确的参数。 //再整理一下,从程序中拷出来有点乱
void myEntityContext::onCommand(Adesk::UInt32 cmdIndex)
{
struct resbuf *ebuf, *eb;
ads_nameen;
acdbEntLast(en);
ebuf = acdbEntGet(en);
eb = ebuf;
acutPrintf("\nResults of entgetting last entity\n");
// Print items in the list.
for (eb = ebuf; eb != NULL; eb = eb->rbnext)
{
int rt;
if ((eb->restype >= 0) && (eb->restype <= 9))
{ rt = RTSTR ;acutPrintf("(%d . \"%s\")\n", eb->restype,eb->resval.rstring); }
else if ((eb->restype >= 10) && (eb->restype <= 19)&&(eb->restype >= 210) && (eb->restype <= 239))
{ rt = RT3DPOINT; acutPrintf("(%d . %0.3f %0.3f %0.3f)\n",eb->restype,eb->resval.rpoint, eb->resval.rpoint, eb->resval.rpoint); }
else if ((eb->restype >= 38) && (eb->restype <= 59))
{rt = RTREAL ;acutPrintf("(%d . %0.3f)\n", eb->restype,eb->resval.rreal); }
else if ((eb->restype >= 60) && (eb->restype <= 79))
{rt = RTSHORT ; acutPrintf("(%d . %d)\n", eb->restype,eb->resval.rint); }
else if (eb->restype < 0)
// Entity name (or other sentinel)
{ rt = eb->restype; acutPrintf("(%d . <Entity name: %8lx>)\n",eb->restype, eb->resval.rlname); }
else
{ rt = RTNONE;acutPrintf("(%d . Unknown type)\n", eb->restype);}
}
}
呵呵,用紫光老死机,而这个又没有tab键,那就这样了 您的程序不是在vc里吧?
我是要脱离cad的环境
我已经基本搞定了
谢谢您
QQ 16976440
msn alan_lus@hotmail.com
页:
[1]