显示dwg,dxf的控件Ddvue

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




  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值