AcDbField

AcDbField

Anonymous
Not applicable
1,015 Views
1 Reply
Message 1 of 2

AcDbField

Anonymous
Not applicable

 

 

Could someone give a small example how a block field can be created using ARX?

 

I tried it like this:


AcDbFieldArray fldArray;
AcDbField *pField_1 = new AcDbField();
AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();

pField_1->setEvaluationOption(AcDbField::kAutomatic);
pField_1->setFieldCode(sObjIdTag);
pField_1->evaluate(AcDbField::kAutomatic, pDb);

fldArray.append(pField_1);

String sText("\\AcObjProp Object(%<\\_FldIdx 0>%).InsertionPoint");

AcDbField *resultField = AcDbField();
resultField->setFieldCode(sText, AcDbField::FieldCodeFlag(AcDbField::kTextField | AcDbField::kPreserveFields), &fldArray);

but when I do

 

resultField->getFieldCode(AcDbField::kTextField)

it returns

"\\AcObjProp Object().InsertionPoint"

Can someone please explain what am I doing wrong?

0 Likes
1,016 Views
1 Reply
Reply (1)
Message 2 of 2

Balaji_Ram
Alumni
Alumni

Hello Mihajlovic,

 

Here is a sample code that creates a MText which displays the insertion point of a block reference.

The Field code used in this sample code has been obtained using the "Field" dialog in AutoCAD. Using the Field dialog is an easy way to verify the field code for a particular task.

 

<code>

AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();

AcDbField *pField = new AcDbField();
pField->setEvaluationOption(AcDbField::kAutomatic);

pField->setFieldCode
	(
	ACRX_T("%<\\AcObjProp Object(%<\\_ObjId 8796087819200>%).InsertionPoint \\f \"%lu6\">%") ,
	AcDbField::FieldCodeFlag(AcDbField::kObjectReference | AcDbField::kPreserveFields)
	);

AcDbMText* pMText = new AcDbMText();
pMText->setDatabaseDefaults();
AcDbObjectId fieldId = AcDbObjectId::kNull;
pMText->setField(ACRX_T("TEXT"), pField, fieldId);
pField->evaluate(AcDbField::kAutomatic, pDb);

AcGePoint3d InsertionPt;
int retval = acedGetPoint (
								NULL, 
								L"\nMText Insertion Point : ", 
								asDblArray(InsertionPt)
						  );

pMText->setLocation(InsertionPt);

 </code>

In the above code snippet, the object Id of the block reference whose insertion point is to be displayed in the MText is hard coded. You may want to change it before trying to run the code.

 

 



Balaji
Developer Technical Services
Autodesk Developer Network

0 Likes