找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 48897|回复: 395

[日积月累]:Arx函数集,网友自制

 火... [复制链接]
发表于 2003-5-25 20:30:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
自愿发布,版权放弃,免除低水平的重复劳动

请勿发布有损贵公司(单位)核心竞争力的代码.

视质量酌情加积分

欢迎跟贴发布!

我先来抛砖
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1D豆 +1 收起 理由
ScmTools + 1 技术引导讨论和指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-5-26 13:06:35 | 显示全部楼层
我也跟一帖,大家还可以修改,重载。。。

  1. //************************************************************************
  2. //函数名称:selectEntityInLayer
  3. //函数类型:Acad::ErrorStatus
  4. //返回值:  正常:Acad::eOk
  5. //功能描述:选择指定图层上的所有实体!
  6. //函数作者:Darcy
  7. //创建日期:200X-XX-XX
  8. //参数列表:
  9. //变量名:nLayerName     变量类型:const char*           变量说明:(输入)图层名
  10. //变量名:nIDs           变量类型:AcDbObjectIdArray&    变量说明:(输出)图层中实体的对象标识符集合
  11. //************************************************************************
  12. Acad::ErrorStatus selectEntityInLayer(const char* nLayerName,AcDbObjectIdArray& nIDs)
  13. {
  14.         Acad::ErrorStatus es = Acad::eOk;

  15.         ads_name ents;
  16.         struct resbuf *rb;
  17.         rb=acutNewRb(AcDb::kDxfLayerName);
  18.         rb->restype=8;
  19.         rb->resval.rstring=(char*)nLayerName;
  20.         rb->rbnext=NULL;
  21.         acedSSGet("X",NULL,NULL,rb,ents);
  22.         long entNums=0;
  23.         acedSSLength(ents,&entNums);
  24.         if (entNums == 0)
  25.                 es = Acad::eInvalidInput;
  26.         else
  27.         {
  28.                 for (long a = 0; a < entNums ; a ++)
  29.                 {
  30.                         AcDbObjectId  objId;
  31.                         ads_name      ent;
  32.                         acedSSName(ents,a,ent);
  33.                         acdbGetObjectId(objId, ent);
  34.                         nIDs.append(objId);
  35.                 }
  36.         }
  37.         acedSSFree(ents);
  38.         acutRelRb(rb);

  39.         return es;
  40. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 2 反对 0

使用道具 举报

发表于 2003-7-8 10:34:17 | 显示全部楼层
受到版主鼓励,再贴两个,自己写的,莫要见笑

  1. //==========================================================
  2. 功能:新建一个图层
  3. 参数:LayerName -- 图层名,LayerColor -- 颜色名
  4. 返回:图层ID
  5. //==========================================================
  6. AcDbObjectId CreateNewLayer(CString LayerName, AcCmColor LayerColor)
  7. {
  8.         // 获得当前图形数据库的符号表
  9.         AcDbLayerTable *pLayerTable;
  10.         acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTable,
  11.                 AcDb::kForWrite);
  12.         // 生成新的图层表记录
  13.         AcDbLayerTableRecord *pLayerTableRecord = new AcDbLayerTableRecord;
  14.         pLayerTableRecord->setName(LayerName);                // 设置图层名
  15.         pLayerTableRecord->setColor(LayerColor);        // 设置图层颜色
  16.         AcDbObjectId layerId;
  17.         pLayerTable->add(layerId,pLayerTableRecord);
  18.         // 关闭图层表和图层表记录
  19.         pLayerTable->close();
  20.         pLayerTableRecord->close();
  21.         return layerId;
  22. }

  23. //==========================================================
  24. 功能:在指定图层上新建一条直线
  25. 参数:见注释
  26. 返回:直线ID
  27. //==========================================================
  28. AcDbObjectId CreateLine( double x1,double y1,double z1,  // 起点坐标
  29.                      double x2,double y2,double z2,  // 终点坐标
  30.                      AcDbObjectId layer)                   // 直线所在图层
  31. {
  32.         AcGePoint3d StartPt(x1,y1,z1);        // 起点
  33.         AcGePoint3d EndPt(x2,y2,z2);        // 终点
  34.         AcDbLine *pLine = new AcDbLine(StartPt,EndPt);
  35.         // 获得当前图形数据库的符号表
  36.         AcDbBlockTable *pBlockTable;
  37.         acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,
  38.                 AcDb::kForRead);
  39.         // 获得符号表中的模型空间块表记录指针,用于添加对象
  40.         AcDbBlockTableRecord *pBlockTableRecord;
  41.         pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
  42.         pBlockTable->close();
  43.         // 将直线添加到模型空间块表记录中
  44.         AcDbObjectId lineId;
  45.         pLine->setLayer(layer,Adesk::kTrue);        // 设置直线所在图层
  46.         pBlockTableRecord->appendAcDbEntity(lineId,pLine);
  47.         // 关闭块表记录指针和直线指针
  48.         pBlockTableRecord->close();
  49.         pLine->close();
  50.         // 返回直线ID号
  51.         return lineId;
  52. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

发表于 2003-6-6 09:33:00 | 显示全部楼层
  1. void CMyDatabase::rotationGroup(CString strGroupName ,CReiPoint ptRotation,double rotationAngle)
  2. {
  3.         AcGePoint3d pt;
  4.         AcDbDictionary *pGroupDict;
  5.         acdbCurDwg()->getGroupDictionary(pGroupDict,AcDb::kForWrite);
  6.         AcDbObjectId groupId;
  7.         AcDbGroup *pGroup;
  8.         pt.x=ptRotation.x;
  9.         pt.y=ptRotation.y;
  10.         pt.z=ptRotation.z;
  11.         if(pGroupDict->getAt(strGroupName,groupId)==Acad::eOk)
  12.        acdbOpenObject(pGroup,groupId,AcDb::kForWrite);
  13.         else
  14.         {
  15.                 pGroupDict->close();
  16.                 return;
  17.         }
  18.         pGroupDict->close();
  19.         AcDbGroupIterator* pIter=pGroup->newIterator();
  20.         AcDbEntity* pEnt;
  21.         AcDbObjectId objId;
  22.                 pIter=pGroup->newIterator();
  23.         for(;!pIter->done();pIter->next())
  24.         {
  25.                 objId=pIter->objectId();
  26.                 acdbOpenAcDbEntity(pEnt,objId,AcDb::kForWrite);
  27.                 rotationEntity(pEnt,pt,rotationAngle);
  28.                 pEnt->close();
  29.         }
  30.         delete pIter;
  31.         pGroup->close();
  32. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

发表于 2003-5-26 09:39:54 | 显示全部楼层

  1.   [FONT=courier new]
  2. BOOL Utils::ReadTxtFile(CString sFile, CStringArray &arComponent)
  3. {
  4.         CString sText = _T("");
  5.         CStdioFile file;
  6.         CFileFind findfile;
  7.         if (!findfile.FindFile(sFile))return FALSE;
  8.        
  9.         if(file.Open(sFile,CFile::modeRead))
  10.         {
  11.                 BOOL bSuccess = TRUE;
  12.                 while(bSuccess)
  13.                 {
  14.                         bSuccess = file.ReadString(sText);
  15.                         if(bSuccess)
  16.                         {
  17.                                 arComponent.Add(sText);                       
  18.                         }
  19.                 }
  20.                 file.Close();
  21.         }
  22.         return TRUE;
  23. }
  24.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-5-26 15:17:06 | 显示全部楼层
//创建字体类型

  1. void DrawAndEdit::createTextStyle(char *styleName, char *fontName, char *bigFontName, double textSize, double xScale, double obliqueAngle, double trPercent)
  2. {
  3.         AcDbTextStyleTable *pTextStyleTable;

  4.     acdbHostApplicationServices()->workingDatabase()
  5.         ->getSymbolTable(pTextStyleTable, AcDb::kForRead);
  6.         AcDbTextStyleTableRecord *pRecord;
  7.         pTextStyleTable->getAt(ACDB_MODEL_SPACE,pRecord,
  8.                 AcDb::kForWrite);

  9.         if (!pTextStyleTable->has(styleName)){
  10.                 AcDbObjectId recId;
  11.         pTextStyleTable->close();
  12.                 acdbHostApplicationServices()->workingDatabase()
  13.                         ->getSymbolTable(pTextStyleTable, AcDb::kForWrite);
  14.                 pRecord = new AcDbTextStyleTableRecord();
  15.                 pRecord->setName(styleName);
  16.                 pRecord->setFileName(fontName);
  17.                 pRecord->setBigFontFileName(bigFontName);
  18.                 pRecord->setTextSize(textSize);
  19.                 pRecord->setXScale(xScale);
  20.                 pRecord->setObliquingAngle(obliqueAngle);
  21.                 pRecord->setPriorSize(trPercent);
  22.                 pTextStyleTable->add(recId,pRecord);
  23.                 pRecord->close();
  24.         }

  25.         pTextStyleTable->close();

  26.         return;
  27. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-27 08:53:34 | 显示全部楼层
  1. //
  2. //生成新组(sGroupName)
  3. //追加数组中所有实体到该组中
  4. //组名字 ,   Id数组
  5. int createGroup(CString sGroupName,
  6.                                                                    const AcDbObjectIdArray *idArr)
  7. {
  8.         AcDbGroup       *pGroup = new AcDbGroup((LPSTR)(LPCTSTR)sGroupName);
  9.         AcDbObjectId     groupObjectId;
  10.         AcDbDictionary  *pGroupDict = NULL;

  11.         acdbHostApplicationServices()->workingDatabase()
  12.         ->getGroupDictionary(pGroupDict, AcDb::kForWrite);
  13.         pGroupDict->setAt(sGroupName, pGroup, groupObjectId);
  14.         pGroupDict->close();
  15.           pGroup->close();
  16.     acdbOpenObject(pGroup, groupObjectId, AcDb::kForWrite);
  17.         for (int i = 0; i < idArr->length(); i++)
  18.         {
  19.                 groupObjectId = idArr->at(i);
  20.                 pGroup->append(groupObjectId);   
  21.         }
  22.         pGroup->close();
  23.         return TRUE;
  24. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-3 23:46:29 | 显示全部楼层

一样好用的文本格式表建立函数

  1. AcDbObjectId CreateNewTextStyle()
  2. {
  3.         AcDbTextStyleTable *pTextStyleTable;
  4.         AcDbTextStyleTableRecord *pTextStyleTableRcd
  5.         AcDbObjectId textId;
  6.         acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pTextStyleTable,AcDb::kForWrite);

  7.         if (!pTextStyleTable->has(StyleName)
  8.         {
  9.                 AcDbTextStyleTableRecord *pTSTblRcd= new AcDbTextStyleTableRecord;
  10.                 pTSTblRcd->setName(StyleName);
  11.                 pTSTblRcd->setFileName(fontName);
  12.                 pTSTblRcd->setBigFontFileName(bigfontName);
  13.                 pTSTblRcd->setTextSize(textSize);
  14.                 pTSTblRcd->setXScale(xScale);
  15.                 pTSTblRcd->setObliquingAngle(obliqueAngle);
  16.                 pTSTblRcd->setPriorSize(trPercent);
  17.                 pTextStyleTable->add(textId,pTextStyleTableRcd);
  18.                 pTSTblRcd->close();
  19.         }
  20.                 pTextStyleTable->close();
  21.         return textId;

  22. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-4 22:53:40 | 显示全部楼层

is Region1 in Region2?

// Function name    : RgnInRgn
// Description      : is Region1 in Region2?
// Return type      : bool
// Argument         : const AcDbRegion* pRegion1
// Argument         : const AcDbRegion* pRegion2
游客,如果您要查看本帖隐藏内容请回复
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-16 12:38:01 | 显示全部楼层

遍历数据库版!


  1. //************************************************************************
  2. //函数名称:selectEntityInLayer
  3. //函数类型:Acad::ErrorStatus
  4. //返回值:
  5. //功能描述:选择指定层上的实体,得到其对象属性标识符!
  6. //函数作者:Darcy
  7. //创建日期:200X-XX-XX
  8. //参数列表:
  9. //变量名:nLayerName      变量类型:CString               变量说明:
  10. //变量名:nIDs            变量类型:AcDbObjectIdArray&    变量说明:
  11. //变量名:nModelSpace     变量类型:bool                  变量说明:
  12. //************************************************************************
  13. Acad::ErrorStatus    selectEntityInLayer(
  14.                                          CString nLayerName,
  15.                                          AcDbObjectIdArray& nIDs,
  16.                                          bool nModelSpace
  17.                                          )
  18. {
  19.     Acad::ErrorStatus es=Acad::eOk;

  20.     AcDbBlockTable*        pBlockTable=NULL;
  21.     AcDbBlockTableRecord*  pSpaceRecord=NULL;
  22.     if (acdbHostApplicationServices()->workingDatabase()==NULL)
  23.         return Acad::eNoDatabase;
  24.     if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))==Acad::eOk)
  25.     {
  26.         char entryName[13];
  27.         if (nModelSpace)
  28.             strcpy(entryName,ACDB_MODEL_SPACE);
  29.         else
  30.             strcpy(entryName,ACDB_PAPER_SPACE);
  31.         //Get the Model or Paper Space record and open it for read:  
  32.         if ((es = pBlockTable->getAt((const char*)entryName, pSpaceRecord, AcDb::kForRead))==Acad::eOk)
  33.         {
  34.                 AcDbBlockTableRecordIterator* pIter;
  35.                 if (pSpaceRecord->newIterator(pIter)==Acad::eOk)
  36.                 {
  37.                     for (pIter->start();!pIter->done();pIter->step())
  38.                     {
  39.                         char *name=NULL;
  40.                         AcDbEntity* pEntity;
  41.                         if (pIter->getEntity(pEntity,AcDb::kForRead)==Acad::eOk)
  42.                         {
  43.                             name=pEntity->layer();
  44.                             if (nLayerName.CompareNoCase(name)==0)
  45.                                 nIDs.append(pEntity->objectId());

  46.                             pEntity->close();
  47.                             acutDelString(name);
  48.                         }
  49.                     }
  50.                     delete pIter;
  51.                 }            
  52.                 pSpaceRecord->close();
  53.         }   
  54.         pBlockTable->close();
  55.     }

  56.     return es;
  57. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-5 16:36:09 | 显示全部楼层

  1. //=========================================================
  2. 功能:   判断两点是否相同(误差在指定范围内)
  3. 参数:   p1、p2为欲判定的两点
  4. 返回值: 0 -- 不相同;1 -- 相同
  5. //=========================================================
  6. int Equal_Points (const ads_point p1, const ads_point p2)
  7. {
  8.     // 指定误差范围
  9.     const ads_real Equality_Margin = (ads_real)0.00000001;
  10.    
  11.     int c ;
  12.     for (c = X ; c <= Z ; c++) {
  13.         if (fabs(p1[c] - p2[c]) > Equality_Margin) {
  14.             return (0) ;
  15.         }
  16.     }
  17.     return (1) ;
  18. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-7-8 08:06:26 | 显示全部楼层
/*
  时间:2003.06.26
  功能:判断点 pt 是否在区域 ptArr 内
  实现:根据射线法求交点个数,偶数-区域外,奇数-区域内
  变量:pt 指定点 ptArr 判断区域
  返回:在区域 TRUE 不在 FALSE
  修改:
*/

  1. BOOL BaseHandle::PointIsInPolygon(AcGePoint3d pt, AcGePoint3dArray ptArr)
  2. {
  3.                 int ptNum,i,interNum;
  4.                 AcGePoint3d ptA,ptB;
  5.                 ads_point pt0,pt1,pt2,ptIns,ptX;
  6.                
  7.                 interNum = 0;
  8.                 pt0[X] = 0.0;
  9.                 pt0[Y] = 0.0;
  10.                 pt0[Z] = 0.0;
  11.                 ptX[X] = pt.x;
  12.                 ptX[Y] = pt.y;
  13.                 ptX[Z] = pt.z;
  14.                 ptNum = ptArr.length();
  15.                 for (i = 0;i < ptNum - 1;i++){
  16.                         ptA = ptArr.at(i);
  17.                         ptB = ptArr.at(i + 1);
  18.                         pt1[X] = ptA.x;
  19.                         pt1[Y] = ptA.y;
  20.                         pt1[Z] = 0.0;
  21.                         pt2[X] = ptB.x;
  22.                         pt2[Y] = ptB.y;
  23.                         pt2[Z] = 0.0;
  24.                         if (acdbInters(ptX,pt0,pt1,pt2,1,ptIns) == RTNORM){
  25.                                 interNum++;
  26.                         }
  27.                 }
  28. //上述交点没有判断是否与某一端点重合,如果有interNum-1,有
  29. //兴趣的朋友可以修改完成。
  30.                 if (interNum % 2 == 0){
  31.                         return false;
  32.                 }else{
  33.                         return true;
  34.                 }
  35. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-26 17:51:30 | 显示全部楼层
如何交互生成面域对象

  1.         AcDbObjectId eId;
  2.         AcDbEntity * ent;
  3.         ads_name en;
  4.         int rc = acdbEntLast(en);  //获取数据库中任意一个实体
  5.     if (rc != RTNORM)
  6.     {
  7.         acutPrintf("the database has nothing.\n", rc);
  8.     }
  9.     if(!acedCommand(RTSTR,"-boundary",RTSTR,PAUSE,RTSTR,"",RTNONE))
  10.                 return;            //调用命令生成边界
  11.     for(;;)                        //边界可能是嵌套型的,也就是有孤岛,所以进行循环
  12.         {
  13.                 int rc = acdbEntNext(en,en);          //获取生成的边界
  14.                 if (rc != RTNORM)
  15.                         break;       //已经没有边界实体,退出循环
  16.                 acdbGetObjectId(eId, en);
  17.                 acdbOpenObject(ent, eId,AcDb::kForRead);
  18.                 ent->close();
  19.                 if(ent->isKindOf(AcDbPolyline::desc())) //生成的应是AcDbPolyline实体
  20.                   //..................
  21.                   //create region object                //这时就可以根据AcDbPolyline
  22.         };                                                  //的点的信息生成面域对象
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-29 16:06:46 | 显示全部楼层
已知一段弧的起点和终点以及其凸度,求其圆心

int getCenter(ads_point startPoint,ads_point endPoint,double bulge,ads_point& center)
{
if (bulge==0.0)
{
ads_point_set(startPoint,center);
return 0;
}
ads_point startPt,endPt;
if (bulge<0.0)
{
ads_point_set(endPoint,startPt);
ads_point_set(startPoint,endPt);
bulge=bulge*(-1.0);
}
else
{
ads_point_set(startPoint,startPt);
ads_point_set(endPoint,endPt);
}
double distStartToEnd,distX,distY,radius;
distStartToEnd=ads_distance(startPt,endPt);
distX=distStartToEnd/2.0;
distY=bulge*distX;
radius=((distX*distX)+(distY*distY))/(2.0*distY);

double tmpAng;
ads_point tmpPt;

tmpAng=ads_angle(startPt,endPt);
ads_polar(startPt,tmpAng,distX,tmpPt);
ads_polar(tmpPt,(tmpAng+(_PI/2.0)),(radius-distY),center);
return 1;

};
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-29 17:57:31 | 显示全部楼层

取得选择集包围盒

取得选择集包围盒
本来是放在下面的帖子里面的,现放在这里以便收集整理


  1.   [FONT=courier new]
  2. BOOL GetSSExtents(ads_name ss, ads_point &maxpt, ads_point &minpt)
  3. {
  4.         long len;
  5.         int ret=ads_sslength(ss,&len);
  6.         if(ret!=RTNORM||len<1) return FALSE;
  7.         AcDbObjectId objId;
  8.         ads_name ename;
  9.         AcDbEntity *pEnt;
  10.         AcDbExtents extent;
  11.         AcGePoint3d pt1,pt2;
  12.         ads_ssname (ss, 0, ename);
  13.         acdbGetObjectId(objId,ename);
  14.         acdbOpenObject(pEnt,objId,AcDb::kForRead);
  15.         pEnt->getGeomExtents(extent);
  16.         pt1=extent.maxPoint();
  17.         pt2=extent.minPoint();
  18.         pEnt->close();
  19.         for(int i=0;igetGeomExtents(extent);
  20.                 if(pt1[X]extent.minPoint()[X]||pt2[Y]>extent.minPoint()[Y])
  21.                         pt2=extent.minPoint();
  22.                 pEnt->close();
  23.         }
  24.         maxpt[X]=pt1[X];
  25.         maxpt[Y]=pt1[Y];
  26.         maxpt[Z]=pt1[Z];
  27.        
  28.         minpt[X]=pt2[X];
  29.         minpt[Y]=pt2[Y];
  30.         minpt[Z]=pt2[Z];

  31.         return TRUE;

  32. }  
  33.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-9 05:34 , Processed in 0.425130 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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