- UID
- 69086
- 积分
- 178
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-8-1
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2003-8-7 19:48:17
|
显示全部楼层
修改后的代码:但是appendLoop返回的是O,还是不能添加,哪里出错呢?
void AsdkMYH()
{
// TODO: Implement the command
AcDbHatch* pHatch = new AcDbHatch();
// Set hatch plane
//
AcGeVector3d normal(0.0, 0.0, 1.0);
pHatch->setNormal(normal);
pHatch->setElevation(0.0);
// Set hatch pattern to ANSI31 predefined type
//
pHatch->setPattern(AcDbHatch::kPreDefined, "ANSI31");
pHatch->setHatchStyle(AcDbHatch::kNormal);
pHatch->setPatternScale(0.5);
pHatch->setPatternAngle(0.0);
// Set Associativity
//
pHatch->setAssociative(Adesk::kFalse);
// Construct database AcDbLines
//
AcGePoint3d vertexPts[4];
AcDbObjectId lineId, hatchId;
AcDbObjectIdArray dbObjIds=NULL;
AcDbLine *line=NULL;
vertexPts[0].set(2.0, 2.0, 0.0);
vertexPts[1].set(8.0, 2.0, 0.0);
vertexPts[2].set(8.0, 8.0, 0.0);
vertexPts[3].set(2.0, 8.0, 0.0);
for (int i = 0; i < 4; i++) {
line = new AcDbLine();
line->setStartPoint(vertexPts);
line->setEndPoint(vertexPts[(i == 3) ? 0 : i+1]);
//line->postToDb(line, lineId);
Acad::ErrorStatus es=postToDb(line, lineId);
if (es==Acad::eOk)
{
acutPrintf("postToDb is ok");
}
dbObjIds.append(lineId);
line->close();
}
int Idlen=dbObjIds.length();
acutPrintf("\ndbObjIds length:%d",Idlen);
// Append an external rectangular loop to hatch boundary
//
Acad::ErrorStatus es=pHatch->appendLoop(AcDbHatch::kExternal, dbObjIds);
if(es=Acad::eOk)
{
acutPrintf("\nappendLoop is ok");
}
else
{
acutPrintf("\nappendLoop is ERROR,Error No:%d",es);
pHatch->close();
return;
}
if (pHatch->evaluateHatch()!=Acad::eOk)
{
acutPrintf("\nevaluateHatch() is ERROR");
}
postToDb(pHatch);
pHatch->close();
}
Acad::ErrorStatus postToDb(AcDbEntity* ent,AcDbObjectId entId)
{
AcDbEntity* pLine;
if(ent==NULL)
{
acutPrintf("\nent is not created");
return Acad::eOutOfMemory;
}
else
pLine=ent;
AcDbBlockTable *pBlockTable=NULL;
Acad::ErrorStatus es=acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
if(es!=Acad::eOk)
{
delete pLine;
return es;
}
AcDbBlockTableRecord *pBlockTableRecord;
es=pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
if(es!=Acad::eOk)
{
Acad::ErrorStatus es2= pBlockTable->close();
if (es2!=Acad::eOk)
{
acrx_abort("\napplication close X block table failed,error No:%d",acadErrorStatusText(es2));
}
delete pLine;
return es;
}
es=pBlockTable->close();
if (es!=Acad::eOk)
{
acrx_abort("\napplication close X block table failed,error No:%d",acadErrorStatusText(es));
}
AcDbObjectId lineId;
es=pBlockTableRecord->appendAcDbEntity(lineId, pLine);
if(es!=Acad::eOk)
{
Acad::ErrorStatus es2=pBlockTableRecord->close();
if(es2!=Acad::eOk)
{
acrx_abort("\n应用程序关闭模型空间块表错误,error No:%d",acadErrorStatusText(es2));
}
delete pLine;
return es;
}
es=pBlockTableRecord->close();
if(es!=Acad::eOk)
{
acrx_abort("\n应用程序关闭模型空间块表纪录错误,error No:%d",acadErrorStatusText(es));
}
es=pLine->close();
if(es!=Acad::eOk)
{
acrx_abort("\n应用程序关闭实体错误,error No:%d",acadErrorStatusText(es));
}
entId=lineId;
return es;
}
//添加剖面线实体
Acad::ErrorStatus postToDb(AcDbHatch* pHatch)
{
AcDbHatch* pH;
if(pHatch==NULL)
{
acutPrintf("\nent is not created");
return Acad::eOutOfMemory;
}
else
pH=pHatch;
AcDbBlockTable *pBlockTable=NULL;
Acad::ErrorStatus es=acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
if(es!=Acad::eOk)
{
delete pH;
return es;
}
AcDbBlockTableRecord *pBlockTableRecord;
es=pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
if(es!=Acad::eOk)
{
Acad::ErrorStatus es2= pBlockTable->close();
if (es2!=Acad::eOk)
{
acrx_abort("\napplication close X block table failed,error No:%d",acadErrorStatusText(es2));
}
delete pH;
return es;
}
es=pBlockTable->close();
if (es!=Acad::eOk)
{
acrx_abort("\napplication close X block table failed,error No:%d",acadErrorStatusText(es));
}
AcDbObjectId HatchId;
es=pBlockTableRecord->appendAcDbEntity(HatchId, pH);
if(es!=Acad::eOk)
{
Acad::ErrorStatus es2=pBlockTableRecord->close();
if(es2!=Acad::eOk)
{
acrx_abort("\n应用程序关闭模型空间块表错误,error No:%d",acadErrorStatusText(es2));
}
delete pH;
return es;
}
es=pBlockTableRecord->close();
if(es!=Acad::eOk)
{
acrx_abort("\n应用程序关闭模型空间块表纪录错误,error No:%d",acadErrorStatusText(es));
}
es=pH->close();
if(es!=Acad::eOk)
{
acrx_abort("\n应用程序关闭实体错误,error No:%d",acadErrorStatusText(es));
}
return es;
} |
|