明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1949|回复: 4

[求助]怎么样一次性画多条直线,进来看看代码

[复制链接]
发表于 2007-1-8 16:32:00 | 显示全部楼层 |阅读模式

我想输入两个点的坐标之后出来两条直线,下面是画直线的代码,大家帮我看看

按照这段代码这样执行的话pLine是一个点,pLine2的直线倒能画出来,请问是怎么回事?

另ads_point,ads_name的定义哪里有得查啊?

谢谢

Acad::ErrorStatus
postToDatabase(AcDbEntity* pEnt,AcDbObjectId& idObj)
{
 Acad::ErrorStatus es;
 AcDbBlockTable* pBlockTable;
 AcDbBlockTableRecord* pSpaceRecord;
 if(acdbHostApplicationServices()->workingDatabase()==NULL)
  return Acad::eNoDatabase;
 if ((es=acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead))==Acad::eOk)
 {
  if((es=pBlockTable->getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))==Acad::eOk)
  {
   if((es=pSpaceRecord->appendAcDbEntity(idObj,pEnt))==Acad::eOk)
    pEnt->close();
   pSpaceRecord->close();
  }
  pBlockTable->close();
 }
 return es;
}
//-----------------以下开始添加直线------------------------------------
Acad::ErrorStatus newLine()
{
 ads_point pt1,pt2;
 ads_point pt3,pt4;
 int retval;
 try
 {
  if((retval=acedGetPoint(NULL, "\nSelect lower left:",pt1))!=RTNORM)
   throw retval;
  if((retval=acedGetPoint(pt1,"\nSelect upper right:",pt2))!=RTNORM)
   throw retval;
 }
 catch (int e)
 {
  if(e==RTCAN)
   return Acad::eUserBreak ;
  if(e==RTERROR)
   return Acad::eInvalidInput ;
 }
 pt3[X]=pt1[X];
 pt3[Y]=pt1[Y]+10;
 pt3[Z]=pt1[Z];
 pt4[X]=pt1[X];
 pt4[Y]=pt1[Y]+10;
 pt4[Z]=pt1[Z];
 AcDbLine* pLine =new AcDbLine(asPnt3d(pt1),asPnt3d(pt2));
 AcDbLine* pLine2 =new AcDbLine(asPnt3d(pt3),asPnt3d(pt4));
 if(!pLine || !pLine2)
 {
  acedAlert("Not enough memory to create a Line!");
  return Acad::eOutOfMemory ;
 }


 AcDbObjectId id;
 postToDatabase(pLine,id);
 return postToDatabase(pLine2,id);

}

 楼主| 发表于 2007-1-8 17:21:00 | 显示全部楼层

自己来坐沙发吧

pt3[X]=pt1[X];
 pt3[Y]=pt1[Y]+10;
 pt3[Z]=pt1[Z];
 pt4[X]=pt1[X];
 pt4[Y]=pt1[Y]+10;
 pt4[Z]=pt1[Z];

晕死,这里写错了.应该为

pt3[X]=pt1[X];
 pt3[Y]=pt1[Y]+10;
 pt3[Z]=pt1[Z];
 pt4[X]=pt2[X];
 pt4[Y]=pt2[Y]+10;
 pt4[Z]=pt2[Z];

大家还有更好的方法来实现这个多线么?

 楼主| 发表于 2007-1-8 17:21:00 | 显示全部楼层

自己沙发了

pt3[X]=pt1[X];
 pt3[Y]=pt1[Y]+10;
 pt3[Z]=pt1[Z];
 pt4[X]=pt1[X];
 pt4[Y]=pt1[Y]+10;
 pt4[Z]=pt1[Z];
错了,

应该为

pt3[X]=pt1[X];
 pt3[Y]=pt1[Y]+10;
 pt3[Z]=pt1[Z];
 pt4[X]=pt2[X];
 pt4[Y]=pt2[Y]+10;
 pt4[Z]=pt2[Z];

发表于 2007-1-13 10:59:00 | 显示全部楼层
既然你直接return不作处理,何必使用try/catch呢?
 楼主| 发表于 2007-1-14 21:21:00 | 显示全部楼层
try/catch是捕捉选点的时候的throw阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 21:40 , Processed in 0.189753 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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