huangbinlq 发表于 2007-10-28 08:35:00

[求助]arx中怎样获得图纸空间中可打印区域的坐标

<div class="tpc_content">朋友们,arx程序中怎样获得图纸空间中可打印区域(即虚线矩形)的四个点的坐标</div>

bskidtf 发表于 2024-11-2 04:06:05

没人解答吗?

bskidtf 发表于 2024-11-6 02:31:38

这是我写的方法,你可以试试

bool GetDashedBox( AcDbLayout* pLayout,AcGePoint2d &MinPt,AcGePoint2d &MaxPt )
{
    if (pLayout==nullptr)
    {
   return false;
    }
    ads_name EntName;
    Acad::ErrorStatus es=acdbGetAdsName (EntName,pLayout->objectId());
    if (es!=Acad::eOk)
    {   
   return false;
    }
    struct resbuf *rbENT_root,*rbtmp;
    rbENT_root=acdbEntGet(EntName);//获取对象链表
    if (rbENT_root==nullptr)
    {
   return false;
    }   
    rbtmp=rbENT_root;
    while (rbtmp!=nullptr)
    {
      if (rbtmp->restype==148)
      {
       MinPt.x=-rbtmp->resval.rreal;
      }
      if (rbtmp->restype==149)
      {
       MinPt.y=-rbtmp->resval.rreal;
      }
   rbtmp=rbtmp->rbnext;
    }
    acutRelRb(rbENT_root);
    doubleWidth=0,Heigth=0;//虚线框框的大小
    pLayout->getPlotPaperSize(Width,Heigth);   //纸张定义的大小,包含不可打印区域
    //去除不可打印区域。
    double printableXmin,printableYmin,printableXmax,printableYmax;
    pLayout->getPlotPaperMargins(printableXmin,printableYmin,printableXmax,printableYmax);
    Width =Width-printableXmin-printableXmax;
    Heigth=Heigth-printableYmin-printableYmax;
    //现在才是那个虚线框框的大小

    AcDbPlotSettings::PlotRotation RoAngtype=pLayout->plotRotation();//这个是相对与纸张定义来说的,纸张定义的如果是长乘以短,那么0度就是和定义的一样,90度就是逆时针旋转90
    if (RoAngtype==AcDbPlotSettings::k90degrees||RoAngtype==AcDbPlotSettings::k270degrees)
    {
   doubletemp=Width;
   Width=Heigth;
   Heigth=temp;
    }
    MaxPt.x=MinPt.x+Width;
    MaxPt.y=MinPt.y+Heigth;
    return true;
}
页: [1]
查看完整版本: [求助]arx中怎样获得图纸空间中可打印区域的坐标