有没有人能够使用getTransformedCopy()并让嵌套副本工作?....
例如,以下函数有效,但是...崩溃自动CAD....我必须使用什么才能使其正常工作?
注意:从头开始绘制[因为 AutoCAD 会崩溃]中测试代码。...画一些 lwpolylines 和线条,圆圈 - 将它们转换为一个块,然后调用命令 CNEST...,它将工作一段时间
- static void LESQsomefunctions_CNEST(void)
- {
- const char * str;
- str = "\nSelect nested entity: ";
- ads_name entres;
- ads_point ptres;
- int pickflag = 0;
- ads_matrix xformres;
- resbuf *containers, *rb, *prevrb;
- AcDbObjectId objId, objId1;
- if (acedNEntSelP(str, entres, ptres, pickflag, xformres, &containers) == RTNORM) {
- rb = containers;
- while (rb != NULL) {
- prevrb = rb;
- rb = containers->rbnext;
- }
- if (acdbGetObjectId(objId1, prevrb->resval.rlname) != Acad::eOk) return;
-
- acutRelRb(rb);
- acutRelRb(containers);
- acutRelRb(prevrb);
-
- if (acdbGetObjectId(objId, entres) != Acad::eOk) return;
-
- AcDbObjectPointer pEntity(objId, AcDb::kForRead);
- AcDbObjectPointer pInsert(objId1,AcDb::kForRead);
-
- if (pEntity.openStatus() == Acad::eOk && pInsert.openStatus() == Acad::eOk) {
- const char *pCname = pEntity->isA()->name();
- acutPrintf("\nNest object is: %s", pCname);
- const char *pCname1 = pInsert->isA()->name();
- acutPrintf("\nTop object is: %s", pCname1);
- AcDbBlockReference *pBlock = AcDbBlockReference::cast(pInsert.object());
- AcGeMatrix3d mat = pBlock->blockTransform();
- AcGeMatrix3d xform;
- AcDbEntity *pEnt = NULL;
- if (pEntity->getTransformedCopy(xform, pEnt) == Acad::eOk) {
- acutPrintf("\nNest OK. . .");
- AcDbObjectId curSpaceId=CURDB()->currentSpaceId();
- AcDbBlockTableRecordPointer pBlockTableRecord(curSpaceId, AcDb::kForWrite);
-
- if (pBlockTableRecord.openStatus() == Acad::eOk) {
- pBlockTableRecord->appendAcDbEntity(pEnt);
- pEnt->transformBy(mat);
- pEnt->close();
- }//end of if openStatus
- }//end of getTransformedCopy
- }//end of if openStatus
- }else {
- acutRelRb(rb);
- acutRelRb(containers);
- acutRelRb(prevrb);
- }
- }//end of command CNEST
另一个
沼泽者怎么样,你们中的任何一个,已经尝试过任何替代方法来克隆对象在ObjectARX中?
谢谢! |