c++ ObjectARX 二次开发

[转载]动态块代码修改2

10 05月
作者:admin|分类:ObjectARX
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);
			}
		}


浏览3993 评论0
返回
目录
返回
首页
[转载]objectARX动态块修改示例源码 [转载]动态块的真实名称EffectiveName

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。