CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

相关分类

示例 3:获取窗口坐标

2022-12-31 14:58| 发布者: admin| 查看: 308| 评论: 0|来自: AutoCAD

此示例演示如何使用 ofand获取视区的显示坐标。当您绘制依赖于视口物理布局的图形(如随视口的大小或边框而变化的图标和标记)时,此功能非常方便。绘制的图形将随平移和缩放而变化。AcGiViewportDraw::polylineDc()AcGiViewport::getViewportDcCorners()

该示例在视区的右上角绘制一个框。框的宽度和高度始终是视区最短尺寸的十分之一,并且框位于视口最短尺寸的十分之一下方和视区右上角的左侧:

      void     
      AsdkIconSamp::subViewportDraw(AcGiViewportDraw* pV)     
 { 
      // Get the       current viewport's display coordinates.     
 // 
      AcGePoint2d       lower_left, upper_right;     
      pV->viewport       ().getViewportDcCorners(lower_left,     
      upper_right);     
  
      double xsize =       upper_right.x - lower_left.x;     
      double ysize =       upper_right.y - lower_left.y;     
  
      xsize /= 10.0;     
      ysize /= 10.0;     
  
      double xcenter       = upper_right.x - xsize;     
      double ycenter       = upper_right.y - ysize;     
  
      double       half_xsize = xsize / 2.0;     
      double       half_ysize = ysize / 2.0;     
  
      // Create a       unit square.     
 // 
      const int       num_verts = 5;     
  
      AcGePoint3d       verts[num_verts];     
  
      for (int i = 0;       i < num_verts; i++) {     
      verts[i].x =       xcenter;     
      verts[i].y =       ycenter;     
      verts[i].z =       0.0;     
 } 
      verts[0].x -=       half_xsize;     
      verts[0].y +=       half_ysize;     
      verts[1].x +=       half_xsize;     
      verts[1].y +=       half_ysize;     
      verts[2].x +=       half_xsize;     
      verts[2].y -=       half_ysize;     
      verts[3].x -=       half_xsize;     
      verts[3].y -=       half_ysize;     
  
      verts[4] =       verts[0];     
  
      pV-       >subEntityTraits().setColor(kRed);     
  
      pV->geometry       ().polylineDc(num_verts, verts);     
 } 
void
AsdkIconSamp::viewportDraw(AcGiViewportDraw* pV)
{
    // Get the current viewport's display coordinates.
    //
    AcGePoint2d lower_left, upper_right;
    pV->viewport().getViewportDcCorners(lower_left,
        upper_right);
    double xsize = upper_right.x - lower_left.x;
    double ysize = upper_right.y - lower_left.y;
    xsize /= 10.0;
    ysize /= 10.0;
    double xcenter = upper_right.x - xsize;
    double ycenter = upper_right.y - ysize;
    double half_xsize = xsize / 2.0;
    double half_ysize = ysize / 2.0;
    // Create a unit square.
    //
    const int num_verts = 5;
    AcGePoint3d verts[num_verts];
    for (int i = 0; i < num_verts; i++) {
        verts[i].x = xcenter;
        verts[i].y = ycenter;
        verts[i].z = 0.0;
    }
    verts[0].x -= half_xsize;
    verts[0].y += half_ysize;
    verts[1].x += half_xsize;
    verts[1].y += half_ysize;
    verts[2].x += half_xsize;
    verts[2].y -= half_ysize;
    verts[3].x -= half_xsize;
    verts[3].y -= half_ysize;
    verts[4] = verts[0];
    pV->subEntityTraits().setColor(kRed);
    pV->geometry().polylineDc(num_verts, verts);
}

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 15:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部