显示dwg,dxf的控件Ddvue

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pipi0714/article/details/22713503

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.程序界面




展开阅读全文

没有更多推荐了,返回首页