[转载]动态块代码修改2
AcDbDatabase *pCurDb = acdbCurDwg(); AcDbObjectId idCurSpace = pCurDb->currentSpaceId(); ACHAR blockName[512] = _T(""); if (acedGetString(TRUE, _T("\nEnter block name: "),blockName) != RTNORM) return; AcGePoint3d pIns; if (acedGetPoint(NULL,_T("\nEnter position: "),asDblArray(pIns)) != RTNORM) return; AcGeMatrix3d matUCS; acedGetCurrentUCS(matUCS); pIns.transformBy(matUCS); AcDbObjectId idBTR; { AcDbBlockTableRecordPointer pBTR(blockName, pCurDb, AcDb::kForRead); if (pBTR.openStatus() != Acad::eOk) { acutPrintf(_T("\nBlock <%s> not found!"), blockName); return; } idBTR = pBTR->objectId(); } AcDbObjectPointer<AcDbBlockReference> pBref; pBref.create(); pBref->setBlockTableRecord(idBTR); pBref->setPosition(pIns); AcDbObjectId idBref; { AcDbBlockTableRecordPointer pBTRCurSpace(idCurSpace, AcDb::kForWrite); if (pBTRCurSpace.openStatus() != Acad::eOk) return; pBTRCurSpace->appendAcDbEntity(idBref,pBref); } // NOTE: Skip adding attributes to block reference AcDbDynBlockReference pDynRef(pBref); if (!pDynRef.isDynamicBlock()) { acutPrintf(_T("\nBlock <%s> is not dynamic!"), blockName); return; } AcDbDynBlockReferencePropertyArray propArr; pDynRef.getBlockProperties(propArr); // Array of variable names AcStringArray varNames; varNames.append(_T("d1")); varNames.append(_T("d2")); varNames.append(_T("d3")); ACHAR buf[512]; for (int i = 0; i < propArr.length(); i++) { AcDbDynBlockReferenceProperty prop = propArr[i]; AcDbEvalVariant pValVar = prop.value(); int iVar = 0; if (varNames.find(prop.propertyName(),iVar)) { _stprintf(buf,_T("\nNew value of %s <%g>: "), prop.propertyName().kACharPtr(), pValVar.resval.rreal); acedInitGet(RSG_NOZERO | RSG_NONEG, NULL); // We know all our variables are double. double newVal = pValVar.resval.rreal; int rc = acedGetReal(buf, &newVal); if (rc == RTCAN) return; pValVar.resval.rreal = newVal; prop.setValue(pValVar); } }
目录 返回
首页