1、控件功能:
显示dwg,dxf格式的文件。我测试的版本比较低因此能查看dwg,dxf版本也比较低。但是没关系,因为高版本能兼容低版本。
2、详细简介
取值:用鼠标取对象(或者说实体)的句柄(或者说标识,ID),然后通过此句柄能访问该对象
BSTR selectHandles =NULL;
m_cad.SelectFromDrawing(&selectHandles);
UINT countUnit =SysStringLen(selectHandles);//长度
if (countUnit>0)
{
CString ss = COLE2T(selectHandles);
MessageBox(ss, _T("Info"));
SysFreeString(selectHandles);
}
导入:显示dwg、dxf文件
CFileDialog fileDlg(TRUE, _T("*.dwg;*.dxf"), _T(""), NULL);
if(fileDlg.DoModal() == IDOK)
{
m_filename = fileDlg.GetPathName();
VARIANT vPwd, vZoom;
vPwd.vt = VT_BSTR;
vPwd.bstrVal = L"";
vZoom.vt = VT_BOOL;
vZoom.boolVal = VARIANT_TRUE;
m_cad.Open(m_filename, vPwd, vZoom);
}
特显:改变对象的颜色
TCHAR szArray[256] = _T("");
GetDlgItemText(IDC_EDIT1, szArray, _countof(szArray));
if(m_cad.SetEntityColorByHandle(szArray, 1))
{
m_cad.Regen();
}
遍历:不是遍历对象的意思,这是原先的功能但是未能实现。将选中对象移动到视口中心
TCHAR szArray[256] = _T("");
GetDlgItemText(IDC_EDIT1, szArray, _countof(szArray));
BSTR layerName(NULL), lineType(NULL);
long colour(0),lineweight(0);
double x,y,z;
double x1,y1,z1;
double x2,y2,z2;
double x3,y3,z3;
long lx,ly;
long lx1,ly1;
long lx2,ly2;
CRect rect;
if(m_cad.GetEntityHeaderByHandle(szArray, &colour,&layerName, &lineType, &lineweight, &x, &y, &z))
{
m_cad.GetClientRect(&rect);
lx = rect.right /2;
ly = rect.bottom /2 ;
m_cad.GetEntityRangeByHandle(szArray,&x,&y,&z,&x1,&y1,&z1);
x2 = (x1 + x) / 2;
y2 = (y1 + y) / 2;
m_cad.DWGToClient(x2,y2,&x3,&y3);
lx1 = (long)x3;
ly1 = (long)y3;
lx2 = lx - lx1;
ly2 = ly - ly1;
m_cad.PanWindowCoordinates(lx2,ly2);
}
控件本身支持Pan和鼠标滑轮放大和缩小功能
Pan的功能实现不好,不直观。当然这可能是性能方面的考虑。
3.最大的缺点
不能遍历所有对象,只能提前获得句柄才能访问对象。
显示dwg dxf后,视口不能改变大小。只能重新打开,要是文件小性能还可以,否则有明显的迟钝的感觉。
上面通过SelectFromDrawing获得的句柄,不能修改或者访问标注
4.程序界面