找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2008|回复: 1

[分享] CreateDbObj

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-12 08:27:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include "stdafx.h"
#include "StdArx.h"

#include "CreateDbObj.h"

#include "GeUtilities.h"

Acad::ErrorStatus
createSpline(const AcGeNurbCurve3d& crv, AcDbSpline*& spl)
{
        AcGe::EntityId type;
        if (crv.isDegenerate(type)) {
                return Acad::eDegenerateGeometry;
        }

        int degree;
        Adesk::Boolean rational,periodic,closed;
        AcGeKnotVector knots;
        AcGePoint3dArray controlPoints;
        AcGeDoubleArray weights;
        int i;
       
        crv.getDefinitionData(degree,rational,periodic,knots,controlPoints,weights);
        closed = crv.isClosed();
       
        AcGeDoubleArray splknots;
        for(i=0;i<knots.length();i++)
                splknots.append(knots[i]);
        spl = new AcDbSpline(degree,rational,closed,periodic,controlPoints,splknots,weights);

        if (spl->isNull()) {
                return Acad::eNotNewlyCreated;
        } else {
                return Acad::eOk;
        }
}

Acad::ErrorStatus
createSpline(const AcGeNurbCurve2d& crv, AcDbSpline*& spl, double z)
{
        AcGe::EntityId type;
        if (crv.isDegenerate(type)) {
                return Acad::eDegenerateGeometry;
        }

        int degree;
        Adesk::Boolean rational,periodic,closed;
        AcGeKnotVector knots;
        AcGePoint2dArray controlPoints2d;
        AcGePoint3dArray controlPoints;
        AcGeDoubleArray weights;
        int i;
       
        crv.getDefinitionData(degree,rational,periodic,knots,controlPoints2d,weights);
        closed = crv.isClosed();
        points2dTo3d(controlPoints2d,controlPoints,z);
       
        AcGeDoubleArray splknots;
        for (i=0; i<knots.length(); i++)
                splknots.append(knots[i]);
        spl = new AcDbSpline(degree,rational,closed,periodic,controlPoints,splknots,weights);

        if (spl->isNull()) {
                return Acad::eNotNewlyCreated;
        } else {
                return Acad::eOk;
        }
}


Acad::ErrorStatus
createSpline(const AcGePoint3dArray& crv, AcDbSpline*& spl)
{
        spl = new AcDbSpline(crv);

        if (spl->isNull()) {
                return Acad::eNotNewlyCreated;
        } else {
                return Acad::eOk;
        }
}

Acad::ErrorStatus
createSpline(const AcGePoint2dArray& crv, AcDbSpline*& spl, double z)
{
        AcGePoint3dArray crv3d;
        points2dTo3d(crv,crv3d);
       
        spl = new AcDbSpline(crv3d);
       
        if (spl->isNull()) {
                return Acad::eNotNewlyCreated;
        } else {
                return Acad::eOk;
        }
}

Acad::ErrorStatus
createRegion(const ChGeLoop2d& loop,AcDbRegion*& pRg, int genType, double z)
{
        AcDbVoidPtrArray pLoop,pRgs;
        AcDbSpline *pSpl;
        AcDb3dPolyline *poly;
        AcDbLine *pLine;
        AcGePoint3dArray pnts;
       
        int i,len,j,jlen;
        len = loop.length();
        pLoop.setLogicalLength(0);
        for (i=0; i<len; i++) {
                if (loop[i].length()>1) {
                        points2dTo3d(loop[i],pnts,z);
                        if (genType==1) {
                                pSpl = new AcDbSpline(pnts);
                                pLoop.append(pSpl);
                        } else if (genType==2) {
                                poly = new AcDb3dPolyline(AcDb::k3dSimplePoly,pnts);
                                pLoop.append(poly);
                        } else if (genType==3) {
                                jlen = loop[i].length();
                                for (j=1; j<jlen; j++) {
                                        pLine = new AcDbLine(pnts[j-1],pnts[j]);
                                        pLoop.append(pLine);
                                }
                        }
                }
        }
        pRg->createFromCurves(pLoop,pRgs);
        len = pLoop.length();
        if (genType==1) {
                for (i=0; i<len; i++) {
                        delete (AcDbSpline*)(pLoop[i]);
                }
        } else if (genType==2) {
                for (i=0; i<len; i++) {
                        delete (AcDb3dPolyline*)(pLoop[i]);
                }
        } else if (genType==3) {
                for (i=0; i<len; i++) {
                        delete (AcDbLine*)(pLoop[i]);
                }
        }
        len = pRgs.length();
        if (len != 1) {
                for (i=0; i<len; i++) {
                        delete (AcDbRegion*)(pRgs[i]);
                }
                return Acad::eInvalidInput;
        }
        pRg = (AcDbRegion*)(pRgs[0]);
       
        return Acad::eOk;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-7-12 08:27:51 | 显示全部楼层
#ifndef CREATE_DBOBJ_H
#define CREATE_DBOBJ_H

//////////////////////////////////////////////////////////////////////////
//
// 与创建Db对象的函数
//
// Note:
//                1. 所有创建的Db对象都没有加入数据库中, 创建成功后有必要释放
//                对象内存空间。
//
//////////////////////////////////////////////////////////////////////////

#include "TypeDef.h"

#ifdef _DBXEXP_
#define DLLIMPEXP __declspec(dllexport)
#else
#define DLLIMPEXP
#endif

/*
*        Purpose:
*                create a spline entity.
*        Argument:
*                crv                [in], AcGeNurbCurve3d entity.
*                spl                [out], returned spline pointer.
*        Return:
*                Acad::eOk, 成功.
*                Acad::eNotNewlyCreated, 给出的参数不能创建相应的实体
*                Acad::eDegenerateGeometry, 曲线为退化实体
*/
extern DLLIMPEXP Acad::ErrorStatus
createSpline(const AcGeNurbCurve3d& crv, AcDbSpline*& spl);


/*
*        Purpose:
*                create a spline entity.
*        Argument:
*                crv                [in], AcGeNurbCurve2d entity.
*                spl                [out], returned spline pointer.
*                z                [in], z-axis coordinate, default=0.0f.
*        Return:
*                Acad::eOk, 成功.
*                Acad::eNotNewlyCreated, 给出的参数不能创建相应的实体
*                Acad::eDegenerateGeometry, 曲线为退化实体
*/
extern DLLIMPEXP Acad::ErrorStatus
createSpline(const AcGeNurbCurve2d& crv, AcDbSpline*& spl, double z=0);


/*
*        Purpose:
*                create a spline entity.
*        Argument:
*                crv                [in], 3d points.
*                spl                [out], returned spline pointer.
*        Return:
*                Acad::eOk, 成功.
*                Acad::eNotNewlyCreated, 给出的参数不能创建相应的实体
*                Acad::eDegenerateGeometry, 曲线为退化实体
*/
extern DLLIMPEXP Acad::ErrorStatus
createSpline(const AcGePoint3dArray& crv, AcDbSpline*& spl);



/*
*        Purpose:
*                create a spline entity.
*        Argument:
*                crv                [in], 2d points.
*                spl                [out], returned spline pointer.
*                z                [in], z-axis coordinate, default=0.0f.
*        Return:
*                Acad::eOk, 成功.
*                Acad::eNotNewlyCreated, 给出的参数不能创建相应的实体
*                Acad::eDegenerateGeometry, 曲线为退化实体
*/
extern DLLIMPEXP Acad::ErrorStatus
createSpline(const AcGePoint2dArray& crv, AcDbSpline*& spl, double z=0);



/*
*        Purpose:
*                从Loop2d创建Region对象.
*        Argument:
*                loop2d        [in], loop2d.
*                pRg                [out], 创建的region对象指针.
*                genType [in], 1使用spline创建Loop, 2使用polyline创建loop, 3使用line
*                z                [in], z-axis coordinate, default=0.0f.
*        Return:
*                Acad::eOk, 成功.
*                Acad::eNotNewlyCreated, 给出的参数不能创建相应的实体
*/
extern DLLIMPEXP Acad::ErrorStatus
createRegion(const ChGeLoop2d& loop,AcDbRegion*& pRg, int genType=1, double z=0);

#endif // CREATE_DBOBJ_H
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-10 05:42 , Processed in 0.171732 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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