C#


Change DimensionStyle settings

void dimStyleSettingsTEST()
{
	System.Collections.Generic.IEnumerator<Bentley.DgnPlatformNET.DimensionStyle> dimStyles = Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnFile().GetDimensionStyles().GetEnumerator();
	while (dimStyles.MoveNext())
	{
		Bentley.DgnPlatformNET.DimensionStyle dimStyle = dimStyles.Current;
		dimStyle.SetIntegerProp((int) DimStyleProp_General_Alignment.True, DimStyleProp.General_Alignment_INTEGER);   // modify alignment to true
		int iAlign;
		dimStyle.GetIntegerProp(out iAlign, DimStyleProp.General_Alignment_INTEGER);
		Console.WriteLine(iAlign);
		//dimStyle.Replace(dimStyle.Name, Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnFile());  // explicit replace
		dimStyle.Replace(null,null);   // write changes to file
	}
}

Create dimension element with true Alignment


using BDNET = Bentley.DgnPlatformNET;

//...

class CreateDimCallback : DimensionCreateData
{
	private BDNET.DimensionStyle m_dimStyle;
	private BDNET.DgnTextStyle m_textStyle;
	private BDNET.Symbology m_symbology;
	private BDNET.LevelId m_levelId;
	private BDNET.DirectionFormatter m_directionFormatter;

	public CreateDimCallback(BDNET.DimensionStyle dimStyle, BDNET.DgnTextStyle textStyle, BDNET.Symbology symb, BDNET.LevelId levelId, BDNET.DirectionFormatter formatter)
	{
		m_dimStyle = dimStyle;
		m_textStyle = textStyle;
		m_symbology = symb;
		m_levelId = levelId;
		m_directionFormatter = formatter;
	}
	public override BDNET.DimensionStyle GetDimensionStyle()
	{
		return m_dimStyle;
	}
	public override BDNET.DgnTextStyle GetTextStyle()
	{
		return m_textStyle;
	}
	public override BDNET.Symbology GetSymbology()
	{
		return m_symbology;
	}
	public override BDNET.LevelId GetLevelId()
	{
		return m_levelId;
	}
	public override BDNET.DirectionFormatter GetDirectionFormatter()
	{
		return m_directionFormatter;
	}
	public override int GetViewNumber()
	{
		return 0;
	}
	public override DMatrix3d GetDimensionRotation()
	{
		return DMatrix3d.Identity;
	}
	public override DMatrix3d GetViewRotation()
	{
		return DMatrix3d.Identity;
	}
}


void createDimensionTest()
{
	BDNET.DgnFile activeDgnfile = Session.Instance.GetActiveDgnFile();
	BDNET.DgnModel activeModel = Session.Instance.GetActiveDgnModel();
	BDNET.DimensionStyle activeDimStyle = BDNET.DimensionStyle.GetSettings(activeDgnfile);
	LevelCache lvCache = activeModel.GetLevelCache();
	LevelId lvId = lvCache.GetLevelByName('Default').LevelId;

	// the following setting Alignment = true is not required 
	//activeDimStyle.SetIntegerProp((int)DimStyleProp_General_Alignment.True, DimStyleProp.General_Alignment_INTEGER);   // modify alignment to true

	activeDimStyle.SetLevelProp(lvId, DimStyleProp.Placement_LevelLevel);
	activeDimStyle.Replace(null, null);
	Symbology symb = new Symbology();

	// arbritary symbology for testing
	symb.Color = 4;  
	symb.Weight = 2;
	symb.Style = 0;

	BDNET.DirectionFormatter dirFormatter = new BDNET.DirectionFormatter(activeModel);
	CreateDimCallback dimCallBack = new CreateDimCallback(activeDimStyle, BDNET.DgnTextStyle.GetSettings(activeDgnfile), symb, lvId, dirFormatter);
	DimensionType dimType = DimensionType.SizeArrow;
	DimensionElement dimElement = new DimensionElement(activeModel, dimCallBack, dimType);
	DPoint3d dimPoint1 = new DPoint3d(0, 0, 0);
	DPoint3d dimPoint2 = new DPoint3d(5000000, 2000000, 0);
	
	// Calculate Alignment of Dimension:
	DVector3d dVec = new DVector3d(dimPoint1, dimPoint2);
	Angle angle = dVec.AngleXY;
	DMatrix3d dmat = DMatrix3d.XYRotation(angle);
	DTransform3d dtrans = new DTransform3d(dmat);
	TransformInfo transform = new TransformInfo(dtrans);
	dimElement.ApplyTransform(transform);

	dimElement.InsertPoint(dimPoint1, null, activeDimStyle, 0);
	dimElement.InsertPoint(dimPoint2, null, activeDimStyle, 1);
	dimElement.SetHeight(500000);
	dimElement.AddToModel();
}

Scan all dimension elements and get the dimension values

        void scanDimensionElements()
        {
            BIM.Application oAPP;
            oAPP = Utilities.ComApp;
            BIM.ModelReference comModel = oAPP.ActiveModelReference;

            Bentley.DgnPlatformNET.DgnModel activeModel = Session.Instance.GetActiveDgnModel();
            ModelElementsCollection elementsCollection =   activeModel.GetGraphicElements();
            ModelElementsEnumerator elementEnumerator = (ModelElementsEnumerator)(elementsCollection.GetEnumerator());

            Element currentElement = null;
            while (elementEnumerator.MoveNext())
            {
                currentElement = elementEnumerator.Current;
                if ("Dimension" ==currentElement.TypeName)
                {
                    ElementId eleId   = currentElement.ElementId;
                DimensionElement dimElement = (DimensionElement)currentElement;
                TextEdit textEdit = dimElement.AsTextEdit();
                TextPartIdCollection textParts = textEdit.GetTextPartIds(new TextQueryOptions());
                int textCount = textParts.Count;
                for (int i = 0; i < textCount; i++)
                {
                    Bentley.DgnPlatformNET.TextBlock textBlock = textEdit.GetTextPart(textParts[i]);
                    string dimText = textBlock.ToString();
                    if ("*" == dimText)  // the dimension text value is not overwritten
                    {
                        BIM.DimensionElement comDimElement = comModel.GetElementByID64(eleId).AsDimensionElement();  //use the COM element to get AcualValue from dimension element
                        double dSegmentLength = comDimElement.ActualValue[i+1];
                        MessageCenter.Instance.ShowInfoMessage("Dimension ElementId: " + dimElement.ElementId.ToString(), dSegmentLength.ToString(), false);
                    }
                    else  
                    {
                        MessageCenter.Instance.ShowInfoMessage("Dimension ElementId: " + dimElement.ElementId.ToString(), dimText, false);
                    }
                }
                }
            }
        }