- UID
- 10108
- 积分
- 5956
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-9-17
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
#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;
} |
|