• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            objectARX常用代碼2

            設(shè)置當(dāng)前的layer和textstyle
            // ?Function?name????:?SetCurTextStyle
            // ?Description????????:?設(shè)置當(dāng)前TextStyle
            // ?Return?type????????:?Acad::ErrorStatus?
            // ?Argument?????????:?const?char*?lpStyleName
            // ?Argument?????????:?AcDbDatabase*?pDb/*?=?NULL?*/
            Acad::ErrorStatus?SetCurTextStyle( const ? char * ?lpStyleName,?AcDbDatabase * ?pDb /* ?=?NULL? */ )
            {
            ????AcDbDatabase
            * ?pCurDb? = ?pDb;
            ????
            if ?(pCurDb? == ?NULL)
            ????????pCurDb?
            = ?acdbHostApplicationServices() -> workingDatabase();

            ????AcDbTextStyleTableRecordPointer?spRecord(lpStyleName,?pCurDb,?AcDb::kForRead);
            ????Acad::ErrorStatus?es?
            = ?spRecord.openStatus();
            ????
            if ?(es? == ?Acad::eOk)
            ????
            {
            ????????es?
            = ??pCurDb -> setTextstyle(spRecord -> objectId());
            ????}

            ????
            return ?es;
            }



            // ?Function?name????:?SetCurLayer
            // ?Description????????:?設(shè)置當(dāng)前層
            // ?Return?type????????:?Acad::ErrorStatus?
            // ?Argument?????????:?const?char*?lpLayerName
            // ?Argument?????????:?AcDbDatabase*?pDb/*?=?NULL?*/
            Acad::ErrorStatus?SetCurLayer( const ? char * ?lpLayerName,?AcDbDatabase * ?pDb /* ?=?NULL? */ )
            {
            ????AcDbDatabase
            * ?pCurDb? = ?pDb;
            ????
            if ?(pCurDb? == ?NULL)
            ????????pCurDb?
            = ?acdbHostApplicationServices() -> workingDatabase();

            ????AcDbLayerTableRecordPointer?spRecord(lpLayerName,?pCurDb,?AcDb::kForRead);
            ????Acad::ErrorStatus?es?
            = ?spRecord.openStatus();
            ????
            if ?(es? == ?Acad::eOk)
            ????
            {
            ????????es?
            = ??pCurDb -> setClayer(spRecord -> objectId());
            ????}

            ????
            return ?es;
            }



            //功能描述:選擇指定圖層上的所有實(shí)體!

            // ************************************************************************
            // 函數(shù)名稱:selectEntityInLayer
            // 函數(shù)類型:Acad::ErrorStatus?
            // 返回值:??正常:Acad::eOk
            // 功能描述:選擇指定圖層上的所有實(shí)體!
            // 函數(shù)作者:Darcy
            // 創(chuàng)建日期:200X-XX-XX
            // 參數(shù)列表:
            // 變量名:nLayerName?????變量類型:const?char*???????????變量說明:(輸入)圖層名
            // 變量名:nIDs???????????變量類型:AcDbObjectIdArray&????變量說明:(輸出)圖層中實(shí)體的對象標(biāo)識符集合
            // ************************************************************************
            Acad::ErrorStatus?selectEntityInLayer( const ? char * ?nLayerName,AcDbObjectIdArray & ?nIDs)
            {
            ????Acad::ErrorStatus?es?
            = ?Acad::eOk;

            ????ads_name?ents;
            ????
            struct ?resbuf? * rb;
            ????rb
            = acutNewRb(AcDb::kDxfLayerName);
            ????rb
            -> restype = 8 ;
            ????rb
            -> resval.rstring = ( char * )nLayerName;
            ????rb
            -> rbnext = NULL;
            ????acedSSGet(
            " X " ,NULL,NULL,rb,ents);
            ????
            long ?entNums = 0 ;
            ????acedSSLength(ents,
            & entNums);
            ????
            if ?(entNums? == ? 0 )
            ????????es?
            = ?Acad::eInvalidInput;
            ????
            else
            ????
            {
            ????????
            for ?( long ?a? = ? 0 ;?a? < ?entNums?;?a? ++ )
            ????????
            {
            ????????????AcDbObjectId??objId;
            ????????????ads_name??????ent;
            ????????????acedSSName(ents,a,ent);
            ????????????acdbGetObjectId(objId,?ent);
            ????????????nIDs.append(objId);
            ????????}

            ????}

            ????acedSSFree(ents);
            ????acutRelRb(rb);

            ????
            return ?es;
            }
            另一種實(shí)現(xiàn)
            //************************************************************************
            //函數(shù)名稱:selectEntityInLayer
            //函數(shù)類型:Acad::ErrorStatus?
            //返回值:
            //功能描述:選擇指定層上的實(shí)體,得到其對象屬性標(biāo)識符!
            //函數(shù)作者:Darcy
            //創(chuàng)建日期:200X-XX-XX
            //參數(shù)列表:
            //變量名:nLayerName??????變量類型:CString???????????????變量說明:
            //變量名:nIDs????????????變量類型:AcDbObjectIdArray&????變量說明:
            //變量名:nModelSpace?????變量類型:bool??????????????????變量說明:
            //************************************************************************
            Acad::ErrorStatus????selectEntityInLayer(
            ?????????????????????????????????????????CString?nLayerName,
            ?????????????????????????????????????????AcDbObjectIdArray
            &?nIDs,
            ?????????????????????????????????????????
            bool?nModelSpace
            ?????????????????????????????????????????)
            {
            ????Acad::ErrorStatus?es
            =Acad::eOk;?

            ????AcDbBlockTable
            *????????pBlockTable=NULL;
            ????AcDbBlockTableRecord
            *??pSpaceRecord=NULL;
            ????
            if?(acdbHostApplicationServices()->workingDatabase()==NULL)
            ????????
            return?Acad::eNoDatabase;
            ????
            if?((es?=?acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,?AcDb::kForRead))==Acad::eOk)
            ????
            {
            ????????
            char?entryName[13];
            ????????
            if?(nModelSpace)
            ????????????strcpy(entryName,ACDB_MODEL_SPACE);
            ????????
            else
            ????????????strcpy(entryName,ACDB_PAPER_SPACE);
            ????????
            //Get?the?Model?or?Paper?Space?record?and?open?it?for?read:??
            ????????if?((es?=?pBlockTable->getAt((const?char*)entryName,?pSpaceRecord,?AcDb::kForRead))==Acad::eOk)
            ????????
            {
            ????????????????AcDbBlockTableRecordIterator
            *?pIter;
            ????????????????
            if?(pSpaceRecord->newIterator(pIter)==Acad::eOk)
            ????????????????
            {
            ????????????????????
            for?(pIter->start();!pIter->done();pIter->step())
            ????????????????????
            {
            ????????????????????????
            char?*name=NULL;
            ????????????????????????AcDbEntity
            *?pEntity;
            ????????????????????????
            if?(pIter->getEntity(pEntity,AcDb::kForRead)==Acad::eOk)
            ????????????????????????
            {
            ????????????????????????????name
            =pEntity->layer();
            ????????????????????????????
            if?(nLayerName.CompareNoCase(name)==0)
            ????????????????????????????????nIDs.append(pEntity
            ->objectId());

            ????????????????????????????pEntity
            ->close();
            ????????????????????????????acutDelString(name);?
            ????????????????????????}

            ????????????????????}

            ????????????????????delete?pIter;
            ????????????????}
            ????????????
            ????????????????pSpaceRecord
            ->close();
            ????????}
            ???
            ????????pBlockTable
            ->close();
            ????}


            ????
            return?es;
            }



            生成新組
            //生成新組(sGroupName)
            //追加數(shù)組中所有實(shí)體到該組中
            //組名字?,???Id數(shù)組
            int?createGroup(CString?sGroupName,
            ???????????????????????????????????
            const?AcDbObjectIdArray?*idArr)
            {
            ????AcDbGroup???????
            *pGroup?=?new?AcDbGroup((LPSTR)(LPCTSTR)sGroupName);
            ????AcDbObjectId?????groupObjectId;
            ????AcDbDictionary??
            *pGroupDict?=?NULL;

            ????acdbHostApplicationServices()
            ->workingDatabase()
            ????????
            ->getGroupDictionary(pGroupDict,?AcDb::kForWrite);
            ????pGroupDict
            ->setAt(sGroupName,?pGroup,?groupObjectId);
            ????pGroupDict
            ->close();
            ??????pGroup
            ->close();
            ????acdbOpenObject(pGroup,?groupObjectId,?AcDb::kForWrite);
            ????
            for?(int?i?=?0;?i?<?idArr->length();?i++)
            ????
            {
            ????????groupObjectId?
            =?idArr->at(i);
            ????????pGroup
            ->append(groupObjectId);???
            ????}

            ????pGroup
            ->close();
            ????
            return?TRUE;
            }

            另一個(gè)
            Acad::ErrorStatus?CDrawFunction::createGroup(CString?groupname,AcDbObjectIdArray?IdArray)
            {
            Acad::ErrorStatus?es
            =Acad::eOk;
            AcDbDictionary?
            *pGroupDict=NULL;
            AcDbGroup?
            *pGroup=NULL;
            if((es=acdbHostApplicationServices()->workingDatabase()->getGroupDictionary(pGroupDict,AcDb::kForWrite))!=Acad::eOk)
            {
            return?es;
            }

            AcDbObjectId?groupId;
            es
            =pGroupDict->getAt(groupname,groupId);
            if(es==Acad::eInvalidKey)
            {
            acutPrintf(
            "\n輸入的詞典名無效!");
            pGroupDict
            ->close();
            return?es;
            }

            else?if(es==Acad::eKeyNotFound)
            {
            pGroup
            =new?AcDbGroup("GroupDiscription");
            if((es=pGroupDict->setAt(groupname,pGroup,groupId))!=Acad::eOk)
            {
            pGroup
            ->close();pGroupDict->close();return?es;
            }

            }

            else?if(es==Acad::eOk?)
            {
            if((es=acdbOpenObject(pGroup,groupId,AcDb::kForWrite))!=Acad::eOk)
            {
            pGroupDict
            ->close();return?es;
            }

            }

            for(int?i=0;i?pGroup->append(IdArray[i]);
            pGroup
            ->setSelectable(FALSE);
            pGroupDict
            ->close();
            pGroup
            ->close();
            return?es;
            }

            旋轉(zhuǎn)整個(gè)group
            void?CMyDatabase::rotationGroup(CString?strGroupName?,CReiPoint?ptRotation,double?rotationAngle)?
            {
            ????AcGePoint3d?pt;
            ????AcDbDictionary?
            *pGroupDict;
            ????acdbCurDwg()
            ->getGroupDictionary(pGroupDict,AcDb::kForWrite);
            ????AcDbObjectId?groupId;
            ????AcDbGroup?
            *pGroup;
            ????pt.x
            =ptRotation.x;
            ????pt.y
            =ptRotation.y;
            ????pt.z
            =ptRotation.z;
            ????
            if(pGroupDict->getAt(strGroupName,groupId)==Acad::eOk)
            ???????acdbOpenObject(pGroup,groupId,AcDb::kForWrite);
            ????
            else
            ????
            {
            ????????pGroupDict
            ->close();
            ????????
            return;
            ????}

            ????pGroupDict
            ->close();
            ????AcDbGroupIterator
            *?pIter=pGroup->newIterator();
            ????AcDbEntity
            *?pEnt;
            ????AcDbObjectId?objId;
            ????????pIter
            =pGroup->newIterator();
            ????
            for(;!pIter->done();pIter->next())
            ????
            {
            ????????objId
            =pIter->objectId();
            ????????acdbOpenAcDbEntity(pEnt,objId,AcDb::kForWrite);
            ????????rotationEntity(pEnt,pt,rotationAngle);
            ????????pEnt
            ->close();
            ????}

            ????delete?pIter;
            ????pGroup
            ->close();
            }


            新建一個(gè)圖層
            //==========================================================
            功能:新建一個(gè)圖層
            參數(shù):LayerName?
            --?圖層名,LayerColor?--?顏色名
            返回:圖層ID
            //==========================================================
            AcDbObjectId?CreateNewLayer(CString?LayerName,?AcCmColor?LayerColor)
            {
            ????
            //?獲得當(dāng)前圖形數(shù)據(jù)庫的符號表
            ????AcDbLayerTable?*pLayerTable;
            ????acdbHostApplicationServices()
            ->workingDatabase()->getSymbolTable(pLayerTable,
            ????????AcDb::kForWrite);
            ????
            //?生成新的圖層表記錄
            ????AcDbLayerTableRecord?*pLayerTableRecord?=?new?AcDbLayerTableRecord;
            ????pLayerTableRecord
            ->setName(LayerName);????????//?設(shè)置圖層名
            ????pLayerTableRecord->setColor(LayerColor);????//?設(shè)置圖層顏色
            ????AcDbObjectId?layerId;
            ????pLayerTable
            ->add(layerId,pLayerTableRecord);
            ????
            //?關(guān)閉圖層表和圖層表記錄
            ????pLayerTable->close();
            ????pLayerTableRecord
            ->close();
            ????
            return?layerId;
            }


            //==========================================================
            功能:在指定圖層上新建一條直線
            參數(shù):見注釋
            返回:直線ID
            //==========================================================
            AcDbObjectId?CreateLine(?double?x1,double?y1,double?z1,??//?起點(diǎn)坐標(biāo)
            ?????????????????????double?x2,double?y2,double?z2,??//?終點(diǎn)坐標(biāo)
            ?????????????????????AcDbObjectId?layer)???????????????????//?直線所在圖層
            {
            ????AcGePoint3d?StartPt(x1,y1,z1);????
            //?起點(diǎn)
            ????AcGePoint3d?EndPt(x2,y2,z2);????//?終點(diǎn)
            ????AcDbLine?*pLine?=?new?AcDbLine(StartPt,EndPt);
            ????
            //?獲得當(dāng)前圖形數(shù)據(jù)庫的符號表
            ????AcDbBlockTable?*pBlockTable;
            ????acdbHostApplicationServices()
            ->workingDatabase()->getSymbolTable(pBlockTable,
            ????????AcDb::kForRead);
            ????
            //?獲得符號表中的模型空間塊表記錄指針,用于添加對象
            ????AcDbBlockTableRecord?*pBlockTableRecord;
            ????pBlockTable
            ->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
            ????pBlockTable
            ->close();
            ????
            //?將直線添加到模型空間塊表記錄中
            ????AcDbObjectId?lineId;
            ????pLine
            ->setLayer(layer,Adesk::kTrue);????//?設(shè)置直線所在圖層
            ????pBlockTableRecord->appendAcDbEntity(lineId,pLine);
            ????
            //?關(guān)閉塊表記錄指針和直線指針
            ????pBlockTableRecord->close();
            ????pLine
            ->close();
            ????
            //?返回直線ID號
            ????return?lineId;
            }


            不太常用的啊
            已知一段弧的起點(diǎn)和終點(diǎn)以及其凸度,求其圓心?

            int?getCenter(ads_point?startPoint,ads_point?endPoint,double?bulge,ads_point&?center)
            {
            if?(bulge==0.0)
            {
            ads_point_set(startPoint,center);
            return?0;
            }

            ads_point?startPt,endPt;
            if?(bulge<0.0)
            {
            ads_point_set(endPoint,startPt);
            ads_point_set(startPoint,endPt);
            bulge
            =bulge*(-1.0);
            }

            else
            {
            ads_point_set(startPoint,startPt);
            ads_point_set(endPoint,endPt);
            }

            double?distStartToEnd,distX,distY,radius;
            distStartToEnd
            =ads_distance(startPt,endPt);
            distX
            =distStartToEnd/2.0;
            distY
            =bulge*distX;
            radius
            =((distX*distX)+(distY*distY))/(2.0*distY);

            double?tmpAng;
            ads_point?tmpPt;

            tmpAng
            =ads_angle(startPt,endPt);
            ads_polar(startPt,tmpAng,distX,tmpPt);
            ads_polar(tmpPt,(tmpAng
            +(_PI/2.0)),(radius-distY),center);
            return?1;

            }
            ;?


            create hatch的

            AcDbObjectId?CreateHatch(
            AcDbObjectId?dbOId,
            char?cLayer[],?
            char?cPattern[]?=?"SOLID",?
            int?nColor?=?256,?
            double?dAngle?=?0.0,?
            double?dScale?=?1.0,?
            AcDbDatabase?
            *?pDbDatab?=?acdbHostApplicationServices()->workingDatabase())
            {
            AcCmColor?CmC;
            AcDbObjectId?DbOId;
            AcDbObjectIdArray?DbOIdA(
            0,?2);
            AcDbBlockTable?
            *?pDbBT;
            AcDbBlockTableRecord?
            *?pDbBTR;
            AcGeVector3d?normal(
            0.0,?0.0,?1.0);

            DbOIdA.append(dbOId);

            AcDbHatch
            *?pDbHat?=?new?AcDbHatch();

            pDbHat
            ->setDatabaseDefaults();

            pDbHat
            ->setAssociative(Adesk::kTrue);?//?BUG:?doesn't?do?squat!?have?to?set?the?reactor?yourself?to?get?associativity!

            pDbHat
            ->appendLoop(AcDbHatch::kExternal,?DbOIdA);

            pDbHat
            ->setPatternScale(dScale);

            pDbHat
            ->setPatternAngle(dAngle);

            pDbHat
            ->setPattern(AcDbHatch::kPreDefined,?cPattern);

            pDbHat
            ->setNormal(normal);

            pDbHat
            ->evaluateHatch();?//?crucial?call?or?nothing?gets?displayed!

            pDbDatab
            ->getSymbolTable(pDbBT,?AcDb::kForRead);

            pDbBT
            ->getAt(ACDB_MODEL_SPACE,?pDbBTR,?AcDb::kForWrite);

            pDbBTR
            ->appendAcDbEntity(DbOId,?pDbHat);

            pDbHat
            ->setLayer(cLayer);

            CmC.setColorIndex(nColor);

            ((AcDbEntity?
            *)pDbHat)->setColor(CmC);

            pDbBT
            ->close();

            pDbBTR
            ->close();

            pDbHat
            ->close();

            return?DbOId;

            }


            前陣?yán)_我的問題解決了,現(xiàn)在共享給大家:
            //************************************************************************
            //函數(shù)名稱:getPointAtDistInGeCurve
            //函數(shù)類型:Acad::ErrorStatus?
            //返回值:
            //功能描述:返回曲線上距起點(diǎn)某距離值處的點(diǎn)。
            //函數(shù)作者:Darcy
            //創(chuàng)建日期:2003-XX-XX
            //參數(shù)列表:
            //變量名:pGeCurve?變量類型:const?AcGeCurve3d?*?變量說明:
            //變量名:dist?變量類型:double?變量說明:
            //變量名:point?變量類型:AcGePoint3d&?變量說明:
            //備?注:
            //************************************************************************
            Acad::ErrorStatus?getPointAtDistInGeCurve(const?AcGeCurve3d?*?pGeCurve,double?dist,AcGePoint3d&?point)
            {
            Acad::ErrorStatus?es?
            =?Acad::eOk;

            if?(?pGeCurve?!=?NULL?)
            {
            AcGePoint3d?spt;
            double?pa=0.,datumParam=0.;
            //距離從起點(diǎn)起算!
            Adesk::Boolean?posParamDir=Adesk::kTrue;

            pGeCurve
            ->hasStartPoint(spt);?

            datumParam?
            =?pGeCurve->paramOf(spt);;

            pa?
            =?pGeCurve->paramAtLength(
            datumParam,
            dist,
            posParamDir
            );

            point
            =pGeCurve->evalPoint(pa);
            }

            else
            es?
            =?Acad::eInvalidInput;

            return?es;
            }
            ?

            判斷點(diǎn)是否在圓弧上
            /*****************************************************/
            BOOL
            IsAtArc(CAD_POINT?firstPt,CAD_POINT?secondPt,
            double?radius,double?direct,int?More,CAD_POINT?thePt)
            /*?判斷某點(diǎn)是否在圓弧上
            firstPt?圓弧起點(diǎn)
            secondPt?圓弧終點(diǎn)?
            radius?半徑
            direct?偏向(?>=0__左偏?<0__右偏?)
            More?(More<0__小圓弧,More>0__大圓弧)
            thePt?判斷點(diǎn)
            返回:TRUE__在圓弧上?FALSE__不在圓弧上
            */

            {
            CAD_POINT?centerPt,sectionPt;
            CAD_POINT?startPt,endPt;
            double?startAngle,endAngle,chordAngle,vertAngle;
            double?intLine,chordLine;
            /*?centerPt?圓弧圓心
            sectionPt?弦線中心點(diǎn)
            startAngle?圓弧起點(diǎn)切線角度(弧度)
            endAngle?圓弧終點(diǎn)切線角度(弧度)
            chordAngle?弦線角度(弧度)
            vertAngle?與弦線垂直的垂線角度(弧度)
            intLine?弦線中心至圓心距離
            chordLine?弦線長度
            */
            ?
            sectionPt.x?
            =?(firstPt.x?+?secondPt.x)/2;
            sectionPt.y?
            =?(firstPt.y?+?secondPt.y)/2;

            chordLine?
            =?sqrt(?pow(?(secondPt.x-firstPt.x),2?)?+?pow(?(secondPt.y-firstPt.y),2?)?);
            intLine?
            =?sqrt((radius*radius-chordLine*chordLine/4)?);

            chordAngle?
            =?ads_angle(asDblArray(firstPt),asDblArray(secondPt));?//弦線的角度

            if(direct>=0)//左偏
            {
            startPt
            =firstPt;
            endPt
            =secondPt;
            vertAngle
            =chordAngle+Pai/2;
            }

            else?if(direct<0)//右偏
            {
            startPt
            =secondPt;
            endPt
            =firstPt;
            vertAngle
            =chordAngle-Pai/2;
            }


            if(More<=0)//小圓弧
            {
            centerPt.x
            =sectionPt.x+intLine*cos(vertAngle);
            centerPt.y
            =sectionPt.y+intLine*sin(vertAngle);
            }

            else//大圓弧
            {
            centerPt.x
            =sectionPt.x-intLine*cos(vertAngle);
            centerPt.y
            =sectionPt.y-intLine*sin(vertAngle);
            }


            if(fabs(centerPt.distanceTo(thePt)-radius)>1.0E-8)
            return?FALSE;
            startAngle?
            =?ads_angle(asDblArray(centerPt),asDblArray(startPt));?
            endAngle?
            =?ads_angle(asDblArray(centerPt),asDblArray(endPt));?

            AcDbArc?
            *pArc=new?AcDbArc(centerPt,radius,startAngle,endAngle);
            AcDbLine?
            *pLine=new?AcDbLine(centerPt,thePt);
            AcGePoint3dArray?Points;
            pLine
            ->intersectWith(pArc,AcDb::kOnBothOperands,Points);
            if(Points.isEmpty())?return?FALSE;

            return?TRUE;
            }


            相object加xdata
            void?affixXdata(char?*appName,?char?*xData,?AcDbObject?*pObj)
            {
            ????
            //向AcDbObject添加擴(kuò)展數(shù)據(jù)Xdata
            ????struct?resbuf?*pRb,?*pTemp;

            ????acdbRegApp(appName);
            ????pRb?
            =?acutNewRb(AcDb::kDxfRegAppName);
            ????pTemp?
            =?pRb;
            ????pTemp
            ->resval.rstring?=?new?char[strlen(appName)+1];
            ????strcpy(pTemp
            ->resval.rstring,?appName);

            ????pTemp
            ->rbnext?=?acutNewRb(AcDb::kDxfXdAsciiString);
            ????pTemp?
            =?pTemp->rbnext;
            ????pTemp
            ->resval.rstring?=?new?char[strlen(xData)+1];
            ????strcpy(pTemp
            ->resval.rstring,?xData);

            ????pObj
            ->setXData(pRb);
            ????acutRelRb(pRb);
            }


            //添加擴(kuò)展數(shù)據(jù)
            //實(shí)體添加擴(kuò)展數(shù)據(jù)(字符串)
            bool?AddXData(CString?appName,?AcDbObjectId?entId,CString?data)
            {
            //open?entity?for?read
            AcDbEntity*pEnt;
            Acad::ErrorStatus?es
            =acdbOpenAcDbEntity(pEnt,entId,AcDb::kForRead);
            if(es!=Acad::eOk)
            {
            ads_printf(
            "error?in?open?entity\n");
            return?false;
            }

            //get?XData?buffer
            struct?resbuf*pRb,*pTemp;
            pRb
            =pEnt->xData(appName);
            if(pRb!=NULL)//have?XData
            {
            //pTemp移到表尾
            pTemp=pRb;
            for(pTemp=pRb;pTemp->rbnext!=NULL;pTemp=pTemp->rbnext){;}
            }

            else//NOT?have?XData
            {
            //create?new?xData
            ads_regapp(appName);
            pRb
            =ads_newrb(AcDb::kDxfRegAppName);
            pRb
            ->resval.rstring=(char*)malloc(appName.GetLength()+1);
            strcpy(pRb
            ->resval.rstring,appName);
            pTemp
            =pRb;
            }

            //fill?xData?string
            pTemp->rbnext=ads_newrb(AcDb::kDxfXdAsciiString);
            pTemp
            =pTemp->rbnext;
            pTemp
            ->resval.rstring=(char*)malloc(data.GetLength()+1);
            strcpy(pTemp
            ->resval.rstring,data);
            //add?xData
            es=pEnt->upgradeOpen();
            if(es!=Acad::eOk)
            {
            ads_printf(
            "\nError?occur?in?updateOpen.");
            pEnt
            ->close();
            ads_relrb(pRb);
            return?false;
            }

            es
            =pEnt->setXData(pRb);
            if(es!=Acad::eOk)
            {
            ads_printf(
            "\nError?occur?in?setXData.");
            pEnt
            ->close();
            ads_relrb(pRb);
            return?false;
            }

            //
            pEnt->close();
            ads_relrb(pRb);
            return?true;
            }

            posted on 2006-06-26 16:35 夢在天涯 閱讀(3860) 評論(0)  編輯 收藏 引用 所屬分類: ARX/DBX

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804607
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久综合一区二区无码| 欧美日韩精品久久久免费观看| 人妻精品久久久久中文字幕| 国产精品久久久久影院嫩草 | 麻豆亚洲AV永久无码精品久久| 亚洲?V乱码久久精品蜜桃| 久久精品一区二区三区中文字幕| 国产精品久久毛片完整版| 久久久青草青青亚洲国产免观| 精品国产乱码久久久久久1区2区| 久久久久人妻一区二区三区vr| 久久精品中文騷妇女内射| 国产欧美久久一区二区| 日本久久久久久中文字幕| 亚洲嫩草影院久久精品| 久久久中文字幕日本| 一级女性全黄久久生活片免费| 日本WV一本一道久久香蕉| 久久夜色精品国产欧美乱| 精品久久香蕉国产线看观看亚洲| 久久99精品久久久久久| 久久久久综合国产欧美一区二区| 国内精品久久久久影院亚洲| 久久亚洲精品国产精品| 久久99精品久久久久久不卡 | 久久精品国产一区二区三区日韩| 国产精品内射久久久久欢欢| 开心久久婷婷综合中文字幕| 亚洲国产精品无码久久久秋霞2| AV无码久久久久不卡蜜桃| 久久九九免费高清视频| 日韩AV无码久久一区二区| 九九久久精品国产| 久久国产色av免费看| 丁香五月综合久久激情| 久久人与动人物a级毛片| 亚洲国产二区三区久久| 欧美日韩精品久久免费| 久久精品中文字幕第23页| 国内精品人妻无码久久久影院 | 日韩十八禁一区二区久久|