void ArxEntityHelper::ZoomToEntities( const AcDbObjectIdArray& objIds ) { AcTransaction* pTrans = actrTransactionManager->startTransaction(); if( pTrans == 0 ) return; AcDbExtents exts; int len = objIds.length(); for( int i = 0; i < len; i++ ) { AcDbObject* pObj; if( Acad::eOk != pTrans->getObject( pObj, objIds[i], AcDb::kForRead ) ) continue; AcDbEntity* pEnt = AcDbEntity::cast( pObj ); if( pEnt == 0 ) continue; AcDbExtents extents; if( Acad::eOk != pEnt->getGeomExtents( extents ) ) continue; exts.addPoint( extents.minPoint() ); exts.addPoint( extents.maxPoint() ); } actrTransactionManager->endTransaction(); AcGePoint3d minPt = exts.minPoint(); AcGePoint3d maxPt = exts.maxPoint(); if( minPt.x <= maxPt.x && minPt.y <= maxPt.y && minPt.z <= maxPt.z ) { ZoomEntity_Helper( minPt, maxPt ); } }
AcDbObjectId CArxHelper::CreateMLeader(const CString& strText, const AcGePoint3d& ptArrow, const AcGePoint3d& ptBase, const AcGeVector3d& vectDir) { AcDbObjectId leaderId = AcDbObjectId::kNull; AcDbMText* pMText = new AcDbMText(); pMText->setContents(strText); pMText->setColorIndex(4); AcDbExtents extents; pMText->getGeomExtents(extents); AcDbMLeader *pEnt=new AcDbMLeader(); int i = 0; pEnt->setContentType(AcDbMLeaderStyle::kMTextContent); pEnt->addLeader(i); pEnt->addLeaderLine(ptArrow,i); pEnt->addLastVertex(i,ptBase); pEnt->setDoglegLength(1); pEnt->setDoglegDirection(i,vectDir); pEnt->setArrowSize(0.001); pEnt->setTextAttachmentType(AcDbMLeaderStyle::kAttachmentBottomLine,AcDbMLeaderStyle::kLeftLeader); pEnt->setTextAttachmentType(AcDbMLeaderStyle::kAttachmentBottomLine,AcDbMLeaderStyle::kRightLeader); pEnt->setTextAlignmentType(AcDbMLeaderStyle::kLeftAlignment); pEnt->setMText(pMText); AcGePoint3d pt = ptBase+vectDir*(extents.maxPoint().x-extents.minPoint().x)*1.1+AcGeVector3d::kYAxis*(extents.maxPoint().y-extents.minPoint().y)*1.1; pEnt->setTextLocation(pt); leaderId = AddToCAD(pEnt); return leaderId; }
void ArxEntityHelper::ZoomToEntity( const AcDbObjectId& objId ) { AcTransaction* pTrans = actrTransactionManager->startTransaction(); if( pTrans == 0 ) return; AcDbObject* pObj; if( Acad::eOk != pTrans->getObject( pObj, objId, AcDb::kForRead ) ) { actrTransactionManager->abortTransaction(); return; } AcDbEntity* pEnt = AcDbEntity::cast( pObj ); if( pEnt == 0 ) { actrTransactionManager->abortTransaction(); return; } AcDbExtents extents; bool ret = ( Acad::eOk == pEnt->getGeomExtents( extents ) ); actrTransactionManager->endTransaction(); if( ret && IsValidExtent( extents ) ) { ZoomEntity_Helper( extents.minPoint(), extents.maxPoint() ); } }
AcGePoint3d Additional_Class::Get_CenterPt( AcDbObjectId ObjID ) { AcDbEntity *pEnt = NULL; AcGePoint3d ptMax, ptMin, ptRes; ptRes.set(0,0,0); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, ObjID, AcDb::kForWrite)) { AcDbExtents pEntExtent; pEnt->getGeomExtents(pEntExtent); ptMax = pEntExtent.maxPoint(); ptMin = pEntExtent.minPoint(); ptRes.x = (ptMax.x + ptMin.x)/2; ptRes.y = (ptMax.y + ptMin.y)/2; ptRes.z = (ptMax.z + ptMin.z)/2; } pEnt->close(); return ptRes; }
AcDbObjectId CArxHelper::CreateText(const CString& strText, const AcGePoint3d& pt1, const AcGePoint3d& pt2, double dDist, BOOL bUp /* = TRUE */) { AcDbObjectId textId = AcDbObjectId::kNull; AcGePoint3d pt = (pt1 + pt2.asVector()) / 2.0; AcDbMText* pMText = new AcDbMText(); pMText->setContents(strText); pMText->setLocation(pt); pMText->setDirection(pt2-pt1); textId = AddToCAD(pMText,4); AcDbExtents extents; pMText->getGeomExtents(extents); AcGeVector3d vect = (pt2-pt1).normal() * (extents.maxPoint().x - extents.minPoint().x) / 2.0; AcGeMatrix3d xform = AcGeMatrix3d::translation(-vect); acdbOpenObject(pMText,textId,AcDb::kForWrite); pMText->transformBy(xform); pMText->close(); return textId; }
void ZoomToEntity( const AcDbObjectId& objId ) { AcTransaction* pTrans = actrTransactionManager->startTransaction(); if( pTrans == 0 ) return; AcDbObject* pObj; if( Acad::eOk != pTrans->getObject( pObj, objId, AcDb::kForRead ) ) { actrTransactionManager->abortTransaction(); return; } //AcApDocument //AcApDocManager //AcDbBlockTableRecord AcDbEntity* pEnt = AcDbEntity::cast( pObj ); if( pEnt == 0 ) { actrTransactionManager->abortTransaction(); return; } AcDbExtents extents; bool ret = ( Acad::eOk == pEnt->getGeomExtents( extents ) ); actrTransactionManager->endTransaction(); if( !ret ) { acutPrintf( _T( "\n1) exten无效" ) ); } else if( !IsValidExtent( extents ) ) { acutPrintf( _T( "\n2) exten无效" ) ); } else { ZoomEntity_Helper( extents.minPoint(), extents.maxPoint() ); } }
static bool IsValidExtent( const AcDbExtents& ext ) { AcGeVector3d v = ext.maxPoint() - ext.minPoint(); //acutPrintf(_T("\nextents:x=%.3f,%y=%.3f,z=%.3f\n"), v.x, v.y, v.z); return ( v.x >= 0 && v.y >= 0 && v.z >= 0 ); // x,y,z的差值必须>=0 }