static bool CheackTubeLenth(AcDbObjectId& objId) { objId = ArxUtilHelper::SelectObject( _T( "请选择一条瓦斯管路:" ) ); if( objId.isNull() ) return false; if( !ArxUtilHelper::IsEqualType( _T( "GasTube" ), objId ) ) return false; AcTransaction *pTrans = actrTransactionManager->startTransaction(); if ( 0 == pTrans ) return false; AcDbObject *pObj; if (Acad::eOk != pTrans->getObject(pObj,objId,AcDb::kForRead)) return false; GasTube *pGasTube = GasTube::cast(pObj); if ( 0 == pGasTube) { actrTransactionManager->abortTransaction(); return false; } AcGePoint3d spt,ept; pGasTube->getSEPoint(spt,ept); //double angle = pGasTube->getAngle(); actrTransactionManager->endTransaction(); AcGeVector3d v = ept - spt; double tubeLenth = v.length(); return true; }
static void AddDirection( const AcDbObjectId& objId, const AcGePoint3d& spt, const AcGePoint3d& ept ) { AcGeVector3d v = ept - spt; if( v.length() < 100 ) return; double angle = v.angleTo( AcGeVector3d::kXAxis, -AcGeVector3d::kZAxis ); WindDirection* pDir = new WindDirection( spt + v * 0.5, angle ); // 巷道中心位置 pDir->setRelatedGE( objId ); ArxUtilHelper::PostToModelSpace( pDir ); }
static void EffectRanDrawed(AcDbObjectId ttunel) { AcTransaction *pTrans = actrTransactionManager->startTransaction(); if ( 0 == pTrans ) return; AcDbObject *pObj; if (Acad::eOk != pTrans->getObject(pObj,ttunel,AcDb::kForRead)) return; TTunnel *pTTunnel = TTunnel::cast(pObj); if ( 0 == pTTunnel) { actrTransactionManager->abortTransaction(); return; } AcGePoint3d spt,ept; pTTunnel->getSEPoint(spt,ept); double angle = pTTunnel->getAngle(); actrTransactionManager->endTransaction(); AcDbObjectIdArray eTags; DrawHelper::GetTagGEById2( ttunel, _T( "EffectRanTagGE" ), eTags ); if (!eTags.isEmpty()) { ArxEntityHelper::EraseObjects( eTags, true ); } AcGeVector3d v = ept - spt; double diatance = v.length(); CString area,way; if(!DataHelper::GetPropertyData(ttunel,_T("断面面积"),area)) return; if(!DataHelper::GetPropertyData(ttunel,_T("通风方法"),way)) return; double minDistan,maxDistan; if(way.IsEmpty()) return; if(area.IsEmpty()) return; if (_T("压入式") == way || _T("长压短抽") == way) { minDistan = 4*sqrtf(_tstof(area)); maxDistan = 5*sqrtf(_tstof(area)); } else { minDistan = 0; maxDistan = 1.5*sqrtf(_tstof(area)); } EffectRanTagGE *pTag = new EffectRanTagGE(ept,angle,minDistan,maxDistan,diatance*0.1); if (0 == pTag) return; pTag->setRelatedGE(ttunel); if( !ArxUtilHelper::PostToModelSpace( pTag ) ) delete pTag; }
void SimpleChimneyDraw::drawSegment( AcGiWorldDraw* mode, const AcGePoint3d& spt, const AcGePoint3d& ept ) { AcGeVector3d v = ept - spt; int n = ( int )( ( v.length() + m_space ) / ( m_length + m_space ) ); //acutPrintf(_T("\n可绘制的个数:%d"), n); v.normalize(); AcGePoint3d pt = spt; for( int i = 0; i < n; i++ ) { DrawSegment( mode, pt, v, m_length, m_width, m_lineWidth ); pt = pt + v * ( m_length + m_space ); } double ll = ( ept - pt ).length(); if( ll > m_length * 0.5 ) // 如果有长度的50%,则绘制一小段 { DrawSegment( mode, pt, v, ll, m_width, m_lineWidth ); } }
// This function is called to update the entity based on the // input values. // Adesk::Boolean AsdkEllipseJig::update() { switch (mPromptCounter) { case 0: // At this time, mAxis contains the value of one // endpoint of the desired major axis. The // AcDbEllipse class stores the major axis as the // vector from the center point to where the axis // intersects the ellipse path (such as half of the true // major axis), so we already have what we need. // mMajorAxis = mAxisPt - mCenterPt; break; case 1: // Calculate the radius ratio. mRadiusRatio // currently contains the distance from the ellipse // center to the current pointer position. This is // half of the actual minor axis length. Since // AcDbEllipse stores the major axis vector as the // vector from the center point to the ellipse curve // (half the major axis), to get the radius ratio we // simply divide the value currently in mRadiusRatio // by the length of the stored major axis vector. // mRadiusRatio = mRadiusRatio / mMajorAxis.length(); break; } // Now update the ellipse with the latest setting. // mpEllipse->set(mCenterPt, mNormal, mMajorAxis, mRadiusRatio); return Adesk::kTrue; }
AcBr::ErrorStatus faceDump(const AcBrFace& faceEntity) { AcBr::ErrorStatus returnValue = AcBr::eOk; // Verify that AcBr was explicitly and not implicitly loaded, // by testing ObjectARX functions (which are unavailable unless // explicitly loaded) if (faceEntity.isA() == NULL) { acutPrintf(ACRX_T("\n faceDump: AcBrEntity::isA() failed\n")); return returnValue; } if (!faceEntity.isKindOf(AcBrFace::desc())) { acutPrintf(ACRX_T("\n faceDump: AcBrEntity::isKindOf() failed\n")); return returnValue; } AcBrEntity* entClass = (AcBrEntity*)&faceEntity; AcBrEdge* pEdge = AcBrEdge::cast(entClass); if (pEdge != NULL) { acutPrintf(ACRX_T("\n faceDump: AcBrEntity::cast() failed\n")); return (AcBrErrorStatus)Acad::eNotThatKindOfClass; } AcGe::EntityId entId; returnValue = faceEntity.getSurfaceType(entId); if (returnValue != AcBr::eOk) { acutPrintf(ACRX_T("\n Error in AcBrFace::getSurfaceType:")); errorReport(returnValue); return returnValue; } AcGeSurface* surfaceGeometry = NULL; AcGeSurface* nativeGeometry = NULL; // NOTE: ignore unsupported geometry types for now, since we already know // that elliptic cylinders and elliptic cones are rejected by AcGe, but we // can still perform useful evaluations on the external bounded surface. returnValue = getNativeSurface(faceEntity, surfaceGeometry, nativeGeometry); if ((returnValue != AcBr::eOk) && (returnValue != (AcBrErrorStatus)Acad::eInvalidInput)) { acutPrintf(ACRX_T("\n Error in getNativeSurface:")); errorReport(returnValue); delete surfaceGeometry; delete nativeGeometry; return returnValue; } switch (entId) { case(kPlane): { acutPrintf(ACRX_T("\nSurface Type: Plane\n")); AcGePlane* planeGeometry = (AcGePlane*)nativeGeometry; AcGePoint3d pt = planeGeometry->pointOnPlane(); AcGeVector3d normal = planeGeometry->normal(); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Point on Plane is (")); acutPrintf (ACRX_T("%lf , "), pt.x); acutPrintf (ACRX_T("%lf , "), pt.y); acutPrintf (ACRX_T("%lf "), pt.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Plane normal direction is (")); acutPrintf (ACRX_T("%lf , "), normal.x); acutPrintf (ACRX_T("%lf , "), normal.y); acutPrintf (ACRX_T("%lf "), normal.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } case(kSphere): { acutPrintf(ACRX_T("\nSurface Type: Sphere\n")); AcGeSphere* sphereGeometry = (AcGeSphere*)nativeGeometry; AcGePoint3d centre = sphereGeometry->center(); double ang1, ang2, ang3, ang4; sphereGeometry->getAnglesInU(ang1, ang2); sphereGeometry->getAnglesInV(ang3, ang4); AcGePoint3d north = sphereGeometry->northPole(); AcGePoint3d south = sphereGeometry->southPole(); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Sphere centre is (")); acutPrintf (ACRX_T("%lf , "), centre.x); acutPrintf (ACRX_T("%lf , "), centre.y); acutPrintf (ACRX_T("%lf "), centre.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Sphere radius is %lf\n"), sphereGeometry->radius()); acutPrintf(ACRX_T(" Sphere start angle in U is %lf\n"), ang1); acutPrintf(ACRX_T(" Sphere end angle in U is %lf\n"), ang2); acutPrintf(ACRX_T(" Sphere start angle in V is %lf\n"), ang3); acutPrintf(ACRX_T(" Sphere end angle in V is %lf\n"), ang4); acutPrintf(ACRX_T(" Sphere north pole is (")); acutPrintf (ACRX_T("%lf , "), north.x); acutPrintf (ACRX_T("%lf , "), north.y); acutPrintf (ACRX_T("%lf "), north.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Sphere south pole is (")); acutPrintf (ACRX_T("%lf , "), south.x); acutPrintf (ACRX_T("%lf , "), south.y); acutPrintf (ACRX_T("%lf "), south.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } case(kTorus): { acutPrintf(ACRX_T("\nSurface Type: Torus\n")); AcGeTorus* torusGeometry = (AcGeTorus*)nativeGeometry; AcGePoint3d centre = torusGeometry->center(); double ang1, ang2, ang3, ang4; torusGeometry->getAnglesInU(ang1, ang2); torusGeometry->getAnglesInV(ang3, ang4); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Torus centre is (")); acutPrintf (ACRX_T("%lf , "), centre.x); acutPrintf (ACRX_T("%lf , "), centre.y); acutPrintf (ACRX_T("%lf "), centre.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Torus major radius is %lf\n"), torusGeometry->majorRadius()); acutPrintf(ACRX_T(" Torus minor radius is %lf\n"), torusGeometry->minorRadius()); acutPrintf(ACRX_T(" Torus start angle in U is %lf\n"), ang1); acutPrintf(ACRX_T(" Torus end angle in U is %lf\n"), ang2); acutPrintf(ACRX_T(" Torus start angle in V is %lf\n"), ang3); acutPrintf(ACRX_T(" Torus end angle in V is %lf\n"), ang4); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } case(kCylinder): { acutPrintf(ACRX_T("\nSurface Type: Circular Cylinder\n")); AcGeCylinder* cylinderGeometry = (AcGeCylinder*)nativeGeometry; AcGePoint3d origin = cylinderGeometry->origin(); double ang1, ang2; cylinderGeometry->getAngles(ang1, ang2); AcGeInterval ht; cylinderGeometry->getHeight(ht); double height = ht.upperBound() - ht.lowerBound(); AcGeVector3d refAxis = cylinderGeometry->refAxis(); AcGeVector3d symAxis = cylinderGeometry->axisOfSymmetry(); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Circular Cylinder origin is (")); acutPrintf (ACRX_T("%lf , "), origin.x); acutPrintf (ACRX_T("%lf , "), origin.y); acutPrintf (ACRX_T("%lf "), origin.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Circular Cylinder radius is %lf\n"), cylinderGeometry->radius()); acutPrintf(ACRX_T(" Circular Cylinder start angle is %lf\n"), ang1); acutPrintf(ACRX_T(" Circular Cylinder end angle is %lf\n"), ang2); if (cylinderGeometry->isClosedInU()) acutPrintf(ACRX_T(" Circular Cylinder height is %lf\n"), height); else acutPrintf(ACRX_T(" Circular Cylinder is not closed in U\n")); acutPrintf(ACRX_T(" Circular Cylinder reference axis is (")); acutPrintf (ACRX_T("%lf , "), refAxis.x); acutPrintf (ACRX_T("%lf , "), refAxis.y); acutPrintf (ACRX_T("%lf "), refAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Circular Cylinder axis of symmetry is (")); acutPrintf (ACRX_T("%lf , "), symAxis.x); acutPrintf (ACRX_T("%lf , "), symAxis.y); acutPrintf (ACRX_T("%lf "), symAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } case(kCone): { acutPrintf(ACRX_T("\nSurface Type: Circular Cone\n")); AcGeCone* coneGeometry = (AcGeCone*)nativeGeometry; AcGePoint3d centre = coneGeometry->baseCenter(); double ang1, ang2; coneGeometry->getAngles(ang1, ang2); AcGeVector3d axis1 = coneGeometry->axisOfSymmetry(); AcGeVector3d axis2 = coneGeometry->refAxis(); AcGePoint3d apex = coneGeometry->apex(); double cosAng, sinAng; coneGeometry->getHalfAngle(cosAng, sinAng); AcGeInterval ht; coneGeometry->getHeight(ht); double height = ht.upperBound() - ht.lowerBound(); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Circular Cone base centre is (")); acutPrintf (ACRX_T("%lf , "), centre.x); acutPrintf (ACRX_T("%lf , "), centre.y); acutPrintf (ACRX_T("%lf "), centre.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Circular Cone base radius is %lf\n"), coneGeometry->baseRadius()); acutPrintf(ACRX_T(" Circular Cone start angle is %lf\n"), ang1); acutPrintf(ACRX_T(" Circular Cone end angle is %lf\n"), ang2); acutPrintf(ACRX_T(" Circular Cone axis of symmetry is (")); acutPrintf (ACRX_T("%lf , "), axis1.x); acutPrintf (ACRX_T("%lf , "), axis1.y); acutPrintf (ACRX_T("%lf "), axis1.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Circular Cone reference axis is (")); acutPrintf (ACRX_T("%lf , "), axis2.x); acutPrintf (ACRX_T("%lf , "), axis2.y); acutPrintf (ACRX_T("%lf "), axis2.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Circular Cone apex is (")); acutPrintf (ACRX_T("%lf , "), apex.x); acutPrintf (ACRX_T("%lf , "), apex.y); acutPrintf (ACRX_T("%lf "), apex.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Circular Cone cosine of major half-angle is %lf\n"), cosAng); acutPrintf(ACRX_T(" Circular Cone sine of major half-angle is %lf\n"), sinAng); if (coneGeometry->isClosedInU()) acutPrintf(ACRX_T(" Circular Cone height is %lf\n"), height); else acutPrintf(ACRX_T(" Circular Cone is not closed in U\n")); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } case(kNurbSurface): { acutPrintf(ACRX_T("\nSurface Type: NURB Surface\n")); AcGeNurbSurface* nurbGeometry = (AcGeNurbSurface*)nativeGeometry; int nCtrlPtsU = nurbGeometry->numControlPointsInU(); int nCtrlPtsV = nurbGeometry->numControlPointsInV(); int nKnotsU = nurbGeometry->numKnotsInU(); int nKnotsV = nurbGeometry->numKnotsInV(); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" NURB Surface degree in U is %d\n"), nurbGeometry->degreeInU()); acutPrintf(ACRX_T(" NURB Surface degree in V is %d\n"), nurbGeometry->degreeInV()); acutPrintf(ACRX_T(" NURB Surface number of control points in U is %d\n"), nCtrlPtsU); acutPrintf(ACRX_T(" NURB Surface number of control points in V is %d\n"), nCtrlPtsV); acutPrintf(ACRX_T(" NURB Surface number of knots in U is %d\n"), nKnotsU); acutPrintf(ACRX_T(" NURB Surface number of knots in V is %d\n"), nKnotsV); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } // NOTE: This surface is not yet supported in AcGe, so we infer the definition // data by analysing evaluated data on the external bounded surface. case(kEllipCylinder): { acutPrintf(ACRX_T("\nSurface Type: Elliptic Cylinder\n")); AcGePoint3d p0 = surfaceGeometry->evalPoint(AcGePoint2d(0.0, 0.0)); AcGePoint3d p1 = surfaceGeometry->evalPoint(AcGePoint2d(0.0, kPi)); AcGePoint3d p2 = surfaceGeometry->evalPoint(AcGePoint2d(0.0, kHalfPi)); AcGePoint3d origin(((p0.x + p1.x) / 2.0), ((p0.y + p1.y) / 2.0), ((p0.z + p1.z) / 2.0)); AcGeVector3d majAxis = p0 - origin; AcGeVector3d minAxis = p2 - origin; AcGeVector3d symAxis = (majAxis.crossProduct(minAxis)).normalize(); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Elliptic Cylinder origin is (")); acutPrintf (ACRX_T("%lf , "), origin.x); acutPrintf (ACRX_T("%lf , "), origin.y); acutPrintf (ACRX_T("%lf "), origin.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cylinder major radius is %lf\n"), majAxis.length()); acutPrintf(ACRX_T(" Elliptic Cylinder minor radius is %lf\n"), minAxis.length()); acutPrintf(ACRX_T(" Elliptic Cylinder major axis is (")); acutPrintf (ACRX_T("%lf , "), majAxis.x); acutPrintf (ACRX_T("%lf , "), majAxis.y); acutPrintf (ACRX_T("%lf "), majAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cylinder minor axis is (")); acutPrintf (ACRX_T("%lf , "), minAxis.x); acutPrintf (ACRX_T("%lf , "), minAxis.y); acutPrintf (ACRX_T("%lf "), minAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cylinder axis of symmetry is (")); acutPrintf (ACRX_T("%lf , "), symAxis.x); acutPrintf (ACRX_T("%lf , "), symAxis.y); acutPrintf (ACRX_T("%lf "), symAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } // NOTE: This surface is not yet supported in AcGe, so we infer the definition // data by analysing evaluated data on the external bounded surface. case(kEllipCone): { acutPrintf(ACRX_T("\nSurface Type: Elliptic Cone\n")); AcGePoint3d p0 = surfaceGeometry->evalPoint(AcGePoint2d(0.0, 0.0)); AcGePoint3d p1 = surfaceGeometry->evalPoint(AcGePoint2d(0.0, kPi)); AcGePoint3d p2 = surfaceGeometry->evalPoint(AcGePoint2d(0.0, kHalfPi)); AcGePoint3d p3 = surfaceGeometry->evalPoint(AcGePoint2d(1.0, 0.0)); AcGePoint3d centre(((p0.x + p1.x) / 2.0), ((p0.y + p1.y) / 2.0), ((p0.z + p1.z) / 2.0)); AcGeVector3d majAxis = p0 - centre; AcGeVector3d minAxis = p2 - centre; AcGeVector3d symAxis = (majAxis.crossProduct(minAxis)).normalize(); double halfAng = kHalfPi - majAxis.angleTo(p3 - p0); acutPrintf(ACRX_T("\nSurface Definition Data Begin:\n")); acutPrintf(ACRX_T(" Elliptic Cone base centre is (")); acutPrintf (ACRX_T("%lf , "), centre.x); acutPrintf (ACRX_T("%lf , "), centre.y); acutPrintf (ACRX_T("%lf "), centre.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cone base major radius is %lf\n"), majAxis.length()); acutPrintf(ACRX_T(" Elliptic Cone base minor radius is %lf\n"), minAxis.length()); acutPrintf(ACRX_T(" Elliptic Cone major axis is (")); acutPrintf (ACRX_T("%lf , "), majAxis.x); acutPrintf (ACRX_T("%lf , "), majAxis.y); acutPrintf (ACRX_T("%lf "), majAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cone minor axis is (")); acutPrintf (ACRX_T("%lf , "), minAxis.x); acutPrintf (ACRX_T("%lf , "), minAxis.y); acutPrintf (ACRX_T("%lf "), minAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cone axis of symmetry is (")); acutPrintf (ACRX_T("%lf , "), symAxis.x); acutPrintf (ACRX_T("%lf , "), symAxis.y); acutPrintf (ACRX_T("%lf "), symAxis.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Elliptic Cone cosine of major half-angle is %lf\n"), cos(halfAng)); acutPrintf(ACRX_T(" Elliptic Cone sine of major half-angle is %lf\n"), sin(halfAng)); acutPrintf(ACRX_T("Surface Definition Data End\n")); break; } default: acutPrintf(ACRX_T("\nSurface Type: Unexpected Non Surface\n")); return (AcBrErrorStatus)Acad::eInvalidInput; } // end switch(entId) delete nativeGeometry; // Evaluate the surface - note that the u,v bounds will not consider any // holes in the surface. To compute a u,v zone of exclusion for evaluation, // check for additional (i.e., inner) loops and get the bounding boxes for // the loops, then convert those to parameter space boxes. There is no // particular guarantee that outer loop(s) are the first in the face-loop // list, however, and we currently have no way to query a loop to find out // which type it is. Still, the maximal u,v parameter range will be useful // for most surfaces and most evaluation purposes. AcGeInterval uParam; AcGeInterval vParam; ((AcGeExternalBoundedSurface*)surfaceGeometry)->getEnvelope(uParam, vParam); // Make sure the u,v values are legal and the envelope is bounded if ((uParam.isBounded()) && (vParam.isBounded())) { AcGePoint2d midRange; midRange.x = uParam.lowerBound() + (uParam.length() / 2.0); midRange.y = vParam.lowerBound() + (vParam.length() / 2.0); AcGePoint3d pointOnSurface = ((AcGeExternalBoundedSurface*)surfaceGeometry)->evalPoint(midRange); acutPrintf(ACRX_T("\nSurface Evaluation Begin:\n")); acutPrintf(ACRX_T(" Parameter space bounds are ((")); acutPrintf(ACRX_T("%lf, "), uParam.lowerBound()); acutPrintf(ACRX_T("%lf "), uParam.upperBound()); acutPrintf(ACRX_T("), (\n")); acutPrintf(ACRX_T("%lf, "), vParam.lowerBound()); acutPrintf(ACRX_T("%lf "), vParam.upperBound()); acutPrintf(ACRX_T("))\n")); acutPrintf(ACRX_T(" Parameter space mid-range is (")); acutPrintf(ACRX_T(" %lf, "), midRange.x); acutPrintf(ACRX_T("%lf "), midRange.y); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T(" Point on surface is (")); acutPrintf (ACRX_T("%lf , "), pointOnSurface.x); acutPrintf (ACRX_T("%lf , "), pointOnSurface.y); acutPrintf (ACRX_T("%lf "), pointOnSurface.z); acutPrintf(ACRX_T(")\n")); acutPrintf(ACRX_T("Surface Evaluation End\n")); } delete surfaceGeometry; Adesk::Boolean oriented; returnValue = faceEntity.getOrientToSurface(oriented); if (returnValue != AcBr::eOk) { acutPrintf(ACRX_T("\n Error in AcBrFace::getOrientToSurface:")); errorReport(returnValue); return returnValue; } oriented ? acutPrintf(ACRX_T("\nSurface Orientation is Positive\n")) : acutPrintf(ACRX_T("\nSurface Orientation is Negative\n")); return returnValue; }
void Additional_Class::Get_ArcMiddle( AcDbObjectId PolyLineId, AcGePoint3dArray &Middle_List,AcGePoint3dArray &CenterListInput, LINEINFO &ArcInfoRList, LINEINFO &ArcInfoAList ) { double PI=3.1415926535897932384626433832795; AcDbEntity *pEnt_Temp = NULL; Acad::ErrorStatus es = acdbOpenAcDbEntity(pEnt_Temp, PolyLineId, AcDb::kForRead); if (es != Acad::eOk) { acutPrintf(_T("\nOPEN ENTITY ERROR")); return; } if (!pEnt_Temp->isKindOf(AcDbPolyline::desc())) { acutPrintf(_T("\nENTITY NOT POLYLINE")); return; } AcDbPolyline *pPolyLine = AcDbPolyline::cast(pEnt_Temp); int num = pPolyLine->numVerts(); AcGePoint3d Start_temp_PT,End_temp_PT; AcGePoint3dArray Center_List; for (int index=0; index<num; index++) { if (pPolyLine->segType(index) == AcDbPolyline::kArc) { AcGeCircArc2d tempArc; pPolyLine->getArcSegAt(index,tempArc); AcGePoint2d CenterPoint; CenterPoint = tempArc.center(); AcGePoint3d CenterPoint3d; CenterPoint3d.set(CenterPoint.x, CenterPoint.y, 0); Center_List.append(CenterPoint3d); AcGePoint3d Start_temp_PT, End_temp_PT; Start_temp_PT.set(tempArc.startPoint().x,tempArc.startPoint().y,0); End_temp_PT.set(tempArc.endPoint().x,tempArc.endPoint().y,0); AcGeVector3d tempVec; tempVec = End_temp_PT - Start_temp_PT; double tempVec_Len = tempVec.length(); tempVec.normalize(); tempVec = tempVec*(tempVec_Len/2); AcGeVector3d CenterVec; CenterVec = Start_temp_PT - CenterPoint3d; CenterVec = CenterVec + tempVec; AcGeLine2d CenterLine2d; AcGePoint3d Middle_Pt_OnLine; Middle_Pt_OnLine = CenterPoint3d+CenterVec; AcGePoint2d middle2d; middle2d.set(Middle_Pt_OnLine.x, Middle_Pt_OnLine.y); CenterLine2d.set(CenterPoint, middle2d); int s; AcGePoint2d MiddlePT, pt2; tempArc.intersectWith(CenterLine2d, s, MiddlePT, pt2); AcGePoint3d MiddlePoint; MiddlePoint.set(MiddlePT.x,MiddlePT.y,0); Middle_List.append(MiddlePoint); double StartAngle = tempArc.startAng(); double EndAngle = tempArc.endAng(); double Angle = EndAngle-StartAngle; Angle = (180/PI)*Angle; double Radius = tempArc.radius(); CString tempStr_Angle,tempStr_Radius,sita,du,banjing; sita = "θ="; du = "°"; banjing = "R="; tempStr_Angle.Format(_T("%.1f"),Angle); tempStr_Angle = sita+tempStr_Angle+du; tempStr_Radius.Format(_T("%.1f"),Radius); tempStr_Radius = banjing + tempStr_Radius; ArcInfoRList.push_back(tempStr_Radius); ArcInfoAList.push_back(tempStr_Angle); } } CenterListInput = Center_List; }