明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1845|回复: 2

[ARX]如何闭合正在画的n边形?(给出源程序)

[复制链接]
发表于 2005-9-28 14:39:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2005-9-29 10:05:51 编辑

附上我的测试程序,里面提供了我尺寸标注  求面积  画表格的程序

#include <aced.h>
#include <acedads.h>
#include <dbents.h>
#include <dbsymtb.h>
#include <dbgroup.h>
#include <dbapserv.h>
#include <acestext.h>
#include <migrtion.h>
#include <geassign.h>
#include <math.h>
#include <dbpl.h >

 ads_point  pt1[512];
        AcGePoint3d  pt[512];
        int NodeNumCount;
void  area()
{
        int i=0;
 acedGetPoint(NULL,"\n请选择起始点:",asDblArray(pt[0]));
 
        do    {
  acedGetPoint(asDblArray(pt),"\n拾取下一点:",asDblArray(pt[i+1]));
  AcDbLine *pLine=new AcDbLine(pt,pt[i+1]);
  AcDbBlockTable *pBlkTable2;
  acdbHostApplicationServices()->workingDatabase()
   ->getSymbolTable(pBlkTable2, AcDb::kForRead);
  AcDbBlockTableRecord *pBlockTableRecord;
  
  pBlkTable2->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
   AcDb::kForWrite);
  pBlkTable2->close();
  
  AcDbObjectId lineId=AcDbObjectId::kNull;
  pBlockTableRecord->appendAcDbEntity(lineId, pLine);
  pBlockTableRecord->close();
  pLine->close();
  changepoint(pt1[i+1],pt[i+1]);//转换点的类型
  changepoint(pt1[0],pt[0]);//转换点的类型
   i++;
   NodeNumCount=i;//取得边数
   }
 while((Equal_Points (pt1, pt1[0]))==0);//起始点=终点时结束循环
}

int Equal_Points (const ads_point p1, const ads_point p2) //判断两点是否为同一点
{
    // 指定误差范围
    const ads_real Equality_Margin = (ads_real)0.0001;
    int c ;
    for (c = X ; c <= Z ; c++)
 {
        if (fabs(p1[c] - p2[c]) > Equality_Margin)
  { return (0) ; }
        }
 {
   AcDbLine *pLine=new AcDbLine(pt[0],pt[NodeNumCount]);
   AcDbBlockTable *pBlkTable2;
  acdbHostApplicationServices()->workingDatabase()
   ->getSymbolTable(pBlkTable2, AcDb::kForRead);
  
  AcDbBlockTableRecord *pBlockTableRecord;
  
  pBlkTable2->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
   AcDb::kForWrite);
  pBlkTable2->close();
  
  AcDbObjectId lineId=AcDbObjectId::kNull;
  pBlockTableRecord->appendAcDbEntity(lineId, pLine);
  pBlockTableRecord->close();
  pLine->close();
    return (1) ;
 }
}

void changepoint(ads_point& ads_pt,AcGePoint3d acge_pt)  //AcGePoint3d转换成ads_point类型
{
 double x=acge_pt[0];
 double y=acge_pt[1];
 double z=acge_pt[2];
 ads_pt[X]=x;
 ads_pt[Y]=y;
 ads_pt[Z]=z;
}

对于如上这段画n边形的程序,有个失误的地方,就是他是以起点=终点来判断n边形画结束的,如果遇到图形线段很多时,如果找不到起点,就会陷入死循环!!

在正常的CAd画图中我们可以用“C”命令来闭合当前正在画的图形,请问这在程序中如何实现,希望有高手指点一下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2005-9-30 19:24:00 | 显示全部楼层
斑竹能不能给个意见啊  谢谢了
发表于 2005-10-2 18:24:00 | 显示全部楼层

你可以用AcDbPolyline来画多边形,然后调用setClosed(Adesk::kTrue)实现闭合

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 04:52 , Processed in 0.154858 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表