找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
12
返回列表 发新帖
打印 上一主题 下一主题

求助, 如何在CAA里实现 标注的 AnnotationLink的 Delete Position Link

[复制链接]
11
发表于 2005-11-19 13:42:59 | 只看该作者
原帖由 zcsq 于 2005-11-17 16:41 发表
又看了你的其他贴,发现上面那个函数不符合你的需求,不好意思:(
请问,你现在做的ANNOTATION是指在三维上做标注吗?若是,要看帮助中的哪以部分。我现在也要做,可还没一点头绪。多谢指教:)


可以看
/CAADoc/Doc/online/CAATpiBase/CAATpiHome.htm

caa里对这部分的资料不多
最基本的md2之类的license只能用少数几个标注功能
12
发表于 2005-11-19 13:56:27 | 只看该作者
原帖由 saeba 于 2005-11-18 17:18 发表
不知道你目的是要实现什么,遗憾的是现在真的没有公开的API来做这个。

但是你不妨试试下面的source,
           CATIDrwAnnotation * piAnnot = ...;
                                        CATIDrwDimDimension * piDimElem = NULL;

     ...


太感谢了,下周试试看
我试过TPS的看起来象的几个API,都没成功

用header直接呼叫ds的命令是个好主意,可这种做法ds不提供正式支持,升个版本万一不能用了也不能向DS提意见。以后的维护太麻烦
13
发表于 2005-11-21 15:13:45 | 只看该作者
试了一下,有几个问题

1,query不到CATIDrwDimDimension
2. ipiAnnot -> GetAssociativePosition (piAssocPos);直接去kick GetAssociativePosition(CATIDrwAssociativePosition_var & opos)
    不要说help,连CATIDrwAssociativePosition的.h文件我都找不到,这应该是个不公开的IF吧?

下面是我试过的做法(4种)
                        // delete position link
                        do {
                                break;
                CATITPS * piTPS = NULL;
                                rc = piText -> QueryInterface(IID_CATITPS,
                                                                                (void **) &piTPS);
                                if ( ( SUCCEEDED(rc) ) && !!piTPS ) {
                                        // make a blank list
                                        CATITTRSList* pTTRSList = NULL;
                                        rc = ::CATCreateCATITTRSList( NULL, &pTTRSList);
                                        if ( SUCCEEDED(rc) && !!pTTRSList ) {
                                                piTPS->SetTTRS( pTTRSList);
                                        }
                                        if ( !!pTTRSList ) {
                                                pTTRSList -> Release();
                                                pTTRSList = NULL;
                                        }
                                }
                                if ( !!piTPS ) {
                                        piTPS -> Release();
                                        piTPS = NULL;
                                }
                        } while (false);
                        do {
                                break;
                CATITPS * piTPS = NULL;
                                rc = piText -> QueryInterface(IID_CATITPS,
                                                                                (void **) &piTPS);
                                if ( ( FAILED(rc) ) || !piTPS ) {
                                        break;
                                }
               
                                // get exist list
                                CATITTRSList* pTTRSList = NULL;
                                rc = piTPS->GetTTRS( &pTTRSList);
                                if ( FAILED(rc) || !pTTRSList ) {
                                        break;
                                }
                                unsigned int iCntTol = 0;
                                rc = pTTRSList->Count(&iCntTol);
                                if ( FAILED(rc) ) {
                                        break;
                                }
                                for ( unsigned int iCnt = iCntTol; iCnt > 0; iCnt-- ) {
                                        CATITTRS* pTempTTRS = NULL;
                                        rc = pTTRSList->Item( iCnt-1, &pTempTTRS);
                    rc = pTTRSList->Remove( pTempTTRS);
                                }
                                if ( !!piTPS ) {
                                        piTPS -> Release();
                                        piTPS = NULL;
                                }
                        } while (false);
                        do {
                                break;
                CATITPS * piTPS = NULL;
                                rc = piText -> QueryInterface(IID_CATITPS,
                                                                                (void **) &piTPS);
                                if ( ( FAILED(rc) ) || !piTPS ) {
                                        break;
                                }
               
                                // get exist list
                                CATITTRSList* pTTRSList = NULL;
                                rc = piTPS->GetTTRS( &pTTRSList);
                                if ( FAILED(rc) || !pTTRSList ) {
                                        break;
                                }
                                unsigned int iCntTol = 0;
                                rc = pTTRSList->Count(&iCntTol);
                                if ( FAILED(rc) ) {
                                        break;
                                }
                                for ( unsigned int iCnt = iCntTol; iCnt > 0; iCnt-- ) {
                                        CATITTRS* pTempTTRS = NULL;
                                        rc = pTTRSList->Item( iCnt-1, &pTempTTRS);
                                        if ( !pTempTTRS ) {
                                                continue;
                                        }
                                        CATLISTV(CATBaseUnknown_var)  oListe;
                                        if ( FAILED( pTempTTRS->GetComponents( oListe))) {
                                                continue;
                                        }
                                        for ( int iCntCom = 1; iCntCom <= oListe.Size(); iCntCom++ ) {
                                                pTempTTRS->RemoveComponent( oListe[iCntCom] );
                                        }
                                        if ( !!pTempTTRS ) {
                                                pTempTTRS -> Release();
                                                pTempTTRS = NULL;
                                        }
                                }
                                if ( !!piTPS ) {
                                        piTPS -> Release();
                                        piTPS = NULL;
                                }
                        } while (false);
                       
                        do {
                CATIDrwAnnotation * piAnnot = NULL;
                rc = piText -> QueryInterface (IID_CATIDrwAnnotation,
                                       (void**) & piAnnot);
                                if ( FAILED(rc) || !piAnnot) {
                                        break;
                                }
                CATIDrwDimDimension * piDimElem = NULL;
                rc = piText -> QueryInterface (IID_CATIDrwDimDimension,
                                               (void**) &piDimElem);
                                if ( FAILED(rc) || !piDimElem) {
                                        break;
                                }
                CATBaseUnknown        *piAssocPos = NULL;
                                CATAssProjectingMode mode = Ass_Contour;
                piAnnot -> GetAssociativePosition (piAssocPos, mode);
                                if ( !piAssocPos ) {
                                        break;
                                }
                CATISpecObject* piSpecAssocPos = NULL;
                rc = piAssocPos -> QueryInterface (IID_CATISpecObject,
                                                                                                        (void **) &piSpecAssocPos);
                                if( FAILED(rc) || !piSpecAssocPos ) {
                                        break;
                                }
                CATISpecObject* piSpecFather = piSpecAssocPos -> GetFather();
                                if ( !!piSpecFather ) {
                    piSpecFather -> Remove(piAssocPos);
                    piSpecFather -> Release();
                    piSpecFather = NULL;
                }
                piSpecAssocPos -> Release();
                piSpecAssocPos = NULL;
                piDimElem -> Release();
                piDimElem = NULL;
                piAnnot -> Release();
                piAnnot = NULL;
           } while (false);

这个查到的header,里面有几个helpl之外的nodoc的method
00001 #ifndef CATIDrwAnnotation_H
00002 #define CATIDrwAnnotation_H
00003 // COPYRIGHT DASSAULT SYSTEMES 1999
00004
00009 #include "CATBaseUnknown.h"
00010 #include "CATDrwDimDefine.h"
00011 #include "CATDrwAssDefs.h" // INCLUDE_AUTORISE
00012 #include "booleanDef.h" // INCLUDE_AUTORISE
00013
00014 class CATIDrwAssociativePosition_var;
00015 class CATIDrwAssociativeOrientation_var;
00016
00017 #include "DraftingItfCPP.h"
00018 #ifndef LOCAL_DEFINITION_FOR_IID
00019 extern ExportedByDraftingItfCPP IID IID_CATIDrwAnnotation ;
00020 #else
00021 extern "C" const IID IID_CATIDrwAnnotation ;
00022 #endif
00023
00027 class ExportedByDraftingItfCPP CATIDrwAnnotation : public CATBaseUnknown
00028 {
00029   CATDeclareInterface;
00030   
00031 public:
00032   
00036   virtual void InitPosition(double   iXPos , double   iYPos , double iAngle) = 0;
00037   
00041   virtual void GetPosition (double & oXPos , double & oYPos ) = 0;
00045   virtual void SetPosition (double   iXPos , double   iYPos ) = 0;
00051   virtual void Move(double ideltaX, double ideltaY) = 0;
00052   
00056   virtual double GetOrientation() = 0;
00060   virtual void   SetOrientation(double iAngle) = 0;
00064   virtual void   Rotate(double iDeltaAngle) = 0;
00065   
00069   virtual HRESULT GetAssociativePosition(CATIDrwAssociativePosition_var & opos) =0;
00073   virtual HRESULT SetAssociativePosition(CATIDrwAssociativePosition_var & ipos) =0;
00074
00075
00076
00090   virtual HRESULT GetAssociativeOrientation(CATBaseUnknown * &oRef,CATAssProjectingMode &oProjMode) = 0;
00091
00107     virtual HRESULT SetAssociativeOrientation(CATBaseUnknown * iRef,CATAssProjectingMode iProjMode=Ass_Contour) = 0;
00108
00109
00123   virtual HRESULT GetAssociativePosition(CATBaseUnknown  * &oRef,CATAssProjectingMode &oProjMode) = 0;
00124
00150   virtual HRESULT SetAssociativePosition(CATBaseUnknown * iRef,
00151     double iDelta=0.0, boolean iComputeDelta=TRUE,
00152     CATAssPositioningBehavior iPosBehavior=Ass_Relative,
00153     CATAssProjectingMode iProjMode=Ass_Contour) = 0;
00154   
00158   virtual HRESULT GetAssociativeOrientation(CATIDrwAssociativeOrientation_var & oori) =0;
00162   virtual HRESULT SetAssociativeOrientation(CATIDrwAssociativeOrientation_var & iori) =0;  
00163 };
00164 CATDeclareHandler(CATIDrwAnnotation, CATBaseUnknown);
00165 #endif
14
发表于 2005-11-21 15:15:09 | 只看该作者
这里贴东西怎么tab老不齐

我的WS prereq了一些无法公开的内部FW,所以没法直接贴WS出来。见谅

[ 本帖最后由 acoka 于 2005-11-21 16:18 编辑 ]
15
发表于 2005-11-21 16:41:17 | 只看该作者
1,query不到CATIDrwDimDimension
2. ipiAnnot -> GetAssociativePosition (piAssocPos);
直接去kick GetAssociativePosition(CATIDrwAssociativePosition_var & opos)    不要说help,连CATIDrwAssociativePosition的.h文件我都找不到,这应该是个不公开的IF吧?

-------------------------------------------------------
query不到CATIDrwDimDimension是正常的,所以才有下面的source.
GetAssociativePosition(CATIDrwAssociativePosition_var & opos),
CATIDrwAssociativePosition确实不是公开的,
是我的疏忽,应该用这个:
HRESULT GetAssociativeOrientation(CATBaseUnknown * &oRef,CATAssProjectingMode &oProjMode)
就是因为CATIDrwAssociativePosition不公开,我才只好直接用CATBaseUnknown

也就是你的最后一个做法,能用吗?

总之,在API公开之前,只能用些权宜之计
16
发表于 2005-11-21 17:02:11 | 只看该作者
CATITPSText * piText = NULL;
rc = pIFactAdv -> CreateTextOnGeometry (pSO, &Plane, &annoText , &piText);
if ( FAILED( rc) || !piText ) {
break;
}
。。。
do {
    CATIDrwAnnotation * piAnnot = NULL;
    rc = piText -> QueryInterface (IID_CATIDrwAnnotation,  (void**) & piAnnot);
   if ( FAILED(rc) || !piAnnot) {
      break;
   }
   CATBaseUnknown        *piAssocPos = NULL;
   CATAssProjectingMode mode = Ass_Contour;
   piAnnot -> GetAssociativePosition (piAssocPos, mode);
   if ( !piAssocPos ) {

!!!卡在这里,取不到, mode指定错误?我的版本是R16GA
     break;
   }
   CATISpecObject* piSpecAssocPos = NULL;
    rc = piAssocPos -> QueryInterface (IID_CATISpecObject, (void **) &piSpecAssocPos);
   if( FAILED(rc) || !piSpecAssocPos ) {
      break;
   }
    CATISpecObject* piSpecFather = piSpecAssocPos -> GetFather();
   if ( !!piSpecFather ) {
      piSpecFather -> Remove(piAssocPos);
      piSpecFather -> Release();
      piSpecFather = NULL;
    }
    piSpecAssocPos -> Release();
    piSpecAssocPos = NULL;
     piAnnot -> Release();
    piAnnot = NULL;
} while (false);

[ 本帖最后由 acoka 于 2005-11-21 17:07 编辑 ]
17
发表于 2011-10-7 09:44:50 | 只看该作者
请问用CAA做尺寸标注用哪个函数?
18
发表于 2013-11-22 19:40:10 | 只看该作者
acoka 发表于 2005-11-19 13:42

可以看
/CAADoc/Doc/online/CAATpiBase/CAATpiHome.htm

你好,可以和你加扣扣交流一下吗?1143987363~CAA三维标注,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-3 15:07 , Processed in 0.030586 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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