描述:
请高手帮忙解决CAD二次开发数据读取存在的问题,代码如下:
CAcadApplication acad;
CAcadDocuments docs;
CAcadDocument doc;
CAcadEntity entity;
CAcadPolyline polyline;
CAcadSelectionSets sets;
CAcadSelectionSet set;
docs=acad.get_Documents();
doc=docs.Open(path,covFalse,COleVariant(_T("")));
sets=doc.get_SelectionSets();
VARIANT vGrpVals,vtStr,vtStr2;
COleSafeArray value,data,type,type2;
SAFEARRAY *GrpVals ;
SAFEARRAYBOUND bnd;
COleSafeArray pt,pt2;
double d1[]={0,0,0} ;
short typei[]={8,100};
long i=0,nFictureNum;
VARIANT CoordinateCount,Coor;
int coordcnt;
BOOL bGenerateAsBlock=FALSE;
set=sets.Add(_T("test"));
type.CreateOneDim(VT_I2,2,typei);
pt.CreateOneDim(VT_R8,3,d1);
bnd.lLbound = 0;
bnd.cElements= 2;
GrpVals = SafeArrayCreate(VT_VARIANT,1, &bnd);
vtStr2.vt = VT_BSTR;
vtStr2.bstrVal = SysAllocString(_T("AcDbPolyline"));
vtStr.vt = VT_BSTR;
vtStr.bstrVal = SysAllocString(_T(“0”));
i=0;
SafeArrayPutElement(GrpVals,&i,&vtStr);
i=1;
SafeArrayPutElement(GrpVals,&i,&vtStr2 );
vGrpVals.vt = VT_VARIANT | VT_ARRAY;
vGrpVals.parray = GrpVals;
set.Select(5,pt,pt,type,vGrpVals);
VariantClear(&vGrpVals);
long objsNum=set.get_Count();
到这里都正常,可以读出选择集中的对象个数
for(i=0;i<objsNum;i++)
{
polyline.AttachDispatch(set.Item(COleVariant(i)));
CoordinateCount=polyline.get_Coordinates();//到这里就出现问题了,下面数据转换的时候无法进行
//而且VANRIANT 变量的类型CoordinateCount.vt是8197,没有这个常数啊 coordcnt=CoordinateCount.lVal;
msg.Format(_T("%d"),coordcnt);
AfxMessageBox(msg);//msg=layer.get_Name();
}
set.Clear();