明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3508|回复: 8

[求助]任意图形加最大外形框

[复制链接]
发表于 2010-1-16 10:47 | 显示全部楼层 |阅读模式
现在有一大批图档要求算装箱,谁能帮忙编个只要框选一下就能把奇形怪状的产品图的最大外形用图框包住,最好加上个中心线,谢谢。
发表于 2010-1-16 19:59 | 显示全部楼层

上传个例图看一下。

发表于 2010-1-18 16:58 | 显示全部楼层
本帖最后由 作者 于 2010-1-18 17:38:21 编辑

ads_name ents;
 if(ads_ssget(NULL,NULL,NULL,NULL,ents) == RTNORM)
 {
  AcDbExtents ext;
  long nLen = 0;
  ads_sslength(ents,&nLen);
  long i = 0;
  for (; i < nLen; i++)
  {
   ads_name curEnt;
   ads_ssname(ents,i,curEnt);
   AcDbObjectId curId;
   if(acdbGetObjectId(curId,curEnt) != Acad::eOk)
    continue;
   AcDbEntity * pEnt = NULL;
   acdbOpenAcDbEntity(pEnt,curId,AcDb::kForRead);
   if (pEnt == NULL)
    continue;
   AcDbExtents curExt;
   pEnt->getGeomExtents(curExt);
   ext.addExt(curExt);
  }
  ads_ssfree(ents);
  AcDbDatabase * pDb = acdbCurDwg();
  if (pDb == NULL)
   return;
  AcDbBlockTable * pBlock = NULL;
  pDb->getBlockTable(pBlock,AcDb::kForWrite);
  if (pBlock == NULL)
   return;
  AcDbBlockTableRecord * pRecord = NULL;
  pBlock->getAt(ACDB_MODEL_SPACE,pRecord,AcDb::kForWrite);
  if (pRecord == NULL)
  {
   pBlock->close();
   return;
  }
  pBlock->close();
 
  //绘制矩形
  AcDbPolyline *pPolyExt = new AcDbPolyline;
  pPolyExt->addVertexAt(0,AcGePoint2d(ext.minPoint().x,ext.minPoint().y));
  pPolyExt->addVertexAt(1,AcGePoint2d(ext.minPoint().x,ext.maxPoint().y));
  pPolyExt->addVertexAt(2,AcGePoint2d(ext.maxPoint().x,ext.maxPoint().y));
  pPolyExt->addVertexAt(3,AcGePoint2d(ext.maxPoint().x,ext.minPoint().y));
  pPolyExt->setClosed(Adesk::kTrue);
  //绘制中心线
  AcDbLine * pVLn = new AcDbLine,* pHLn = new AcDbLine;
  pVLn->setStartPoint(AcGePoint3d((ext.minPoint().x+ext.maxPoint().x)*0.5,ext.minPoint().y,0));
  pVLn->setEndPoint(AcGePoint3d((ext.minPoint().x+ext.maxPoint().x)*0.5,ext.maxPoint().y,0));
  pHLn->setStartPoint(AcGePoint3d(ext.minPoint().x,(ext.minPoint().y+ext.maxPoint().y)*0.5,0));
  pHLn->setEndPoint(AcGePoint3d(ext.maxPoint().x,(ext.minPoint().y+ext.maxPoint().y)*0.5,0));
  pRecord->appendAcDbEntity(pPolyExt);
  pRecord->appendAcDbEntity(pVLn);
  pRecord->appendAcDbEntity(pHLn);
  pPolyExt->close();
  pVLn->close();
  pHLn->close();
  pRecord->close();
 }
 
 楼主| 发表于 2010-1-19 09:53 | 显示全部楼层

能够发个编译好的给我吗?谢谢

 楼主| 发表于 2010-1-30 10:26 | 显示全部楼层

论坛有好心人能把这编译成 *.arx发给我吗?谢谢!308553484@qq.com

发表于 2010-2-3 13:00 | 显示全部楼层
要什么版本的
发表于 2011-8-28 13:41 | 显示全部楼层
大哥啊,有没有LISP的呀?
发表于 2019-9-14 13:51 | 显示全部楼层
很多人需要这样的源码
发表于 2023-4-22 09:11 | 显示全部楼层
cfu18 发表于 2010-1-18 16:58
本帖最后由 作者 于 2010-1-18 17:38:21 编辑  ads_name ents;&nbsp;if(ads_ssget(NULL,NULL,NULL,NULL,en ...

怎么加入到LISP中去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 10:13 , Processed in 0.187491 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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