iCAx开思工具箱

标题: 求助, 如何在CAA里实现 标注的 AnnotationLink的 Delete Position Link [打印本页]

作者: acoka    时间: 2005-11-7 15:35
标题: 求助, 如何在CAA里实现 标注的 AnnotationLink的 Delete Position Link
如图
望指教
作者: acoka    时间: 2005-11-7 15:42
执行了下列程序
标注的图标变了,和按3DView空白处的时候一样
context菜单的delete position link 没有变灰, 投影也还是有红叉

                        // delete position link
                        CATITPS * piTPS = NULL;
                        rc = piText -> QueryInterface(IID_CATITPS,
                                      (void **) &piTPS);
                        if ( ( SUCCEEDED(rc) ) && !!piTPS ) {
                                // create 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;
                        }


作者: hick    时间: 2005-11-8 08:26
爱莫能助,关注下
作者: HNBoTree    时间: 2005-11-8 10:45
acoka兄,我做的不是你那一块的,帮不上什么忙。但是你Query Object Links 上是不是已经确实删除。
如果删除了,是不是要updata一下。CATIA里的model和view两部分,好像是model变了,view不一定变的。
作者: acoka    时间: 2005-11-8 11:57
我也是第一次做标注,以前连标注命令都没执行过
结果这次来了这么个活

问题就是那些东西del不了
不过既然catia可以,也不是什么很特殊的操作,应该有公开的API可以用
暂且算这个功能可以实现,写完设计书,到编程的时候再考虑好了


作者: zcsq    时间: 2005-11-17 16:24
不知道这个函数是否符合你的要求,我用它取消过工程图中的各视图之间的位置联系。
UnAlignedWithReferenceView()
作者: zcsq    时间: 2005-11-17 16:26
不知道这个函数是否符合你的要求,我用它取消过工程图中的各视图之间的位置联系。
UnAlignedWithReferenceView()
作者: zcsq    时间: 2005-11-17 16:41
又看了你的其他贴,发现上面那个函数不符合你的需求,不好意思:(
请问,你现在做的ANNOTATION是指在三维上做标注吗?若是,要看帮助中的哪以部分。我现在也要做,可还没一点头绪。多谢指教:)
作者: HNBoTree    时间: 2005-11-18 15:10
都在CATTPSInterfaces Framework里面。
作者: saeba    时间: 2005-11-18 17:18
不知道你目的是要实现什么,遗憾的是现在真的没有公开的API来做这个。

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

           {
             rc = piAnnot -> QueryInterface (IID_CATIDrwDimDimension,
                                               (void**) &piDimElem);
             if ( FAILED(rc) )
             {


               CATBaseUnknown        *piAssocPos = NULL;
               ipiAnnot -> GetAssociativePosition (piAssocPos);
               
                                                   if ( NULL!= piAssocPos  )
                                                   {
                                                 
                                                     CATISpecObject* piSpecAssocPos = NULL;
                                                     rc = piAssocPos -> QueryInterface (IID_CATISpecObject,
                                                                                        (void **) &piSpecAssocPos);
                                                     if( SUCCEEDED(rc) )
                                                     {
                                                       CATISpecObject* piSpecFather = piSpecAssocPos -> GetFather();
                                                       if ( piSpecFather )
                                                       {
                                                         piSpecFather -> Remove(piAssocPos);
                                                         piSpecFather -> Release();
                                                         piSpecFather = NULL;
                                                       }
                                                       piSpecAssocPos -> Release();
                                                       piSpecAssocPos = NULL;
                                                     }
                                                   }
               
               
             }
             else
             {
               piDimElem -> Release();
               piDimElem = NULL;
             }
             piAnnot -> Release();
             piAnnot = NULL;
           }

这个source不完美,但是请试一下,说不定能用,但也说不定什么时候就失效了

另外,这个command的hdr是CATTPSPosLinkDeleteHdr,
如果你能给它传一个CATString "Delete" 的参数,就可以直接利用(CATAfrStartCommand)
但我不知道怎么传参数。。。
作者: acoka    时间: 2005-11-19 13:42
原帖由  于 2005-11-17 16:41 发表
又看了你的其他贴,发现上面那个函数不符合你的需求,不好意思:(
请问,你现在做的ANNOTATION是指在三维上做标注吗?若是,要看帮助中的哪以部分。我现在也要做,可还没一点头绪。多谢指教:)


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

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

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

     ...


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

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

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
作者: acoka    时间: 2005-11-21 15:15
这里贴东西怎么tab老不齐

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


作者: saeba    时间: 2005-11-21 16:41
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公开之前,只能用些权宜之计
作者: acoka    时间: 2005-11-21 17:02
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);


作者: guodaner    时间: 2011-10-7 09:44
请问用CAA做尺寸标注用哪个函数?
作者: miaosheng2012    时间: 2013-11-22 19:40
acoka 发表于 2005-11-19 13:42

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

你好,可以和你加扣扣交流一下吗?1143987363~CAA三维标注,谢谢!




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3