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); } } } } } |