public bool CreateElevationByWall() { bool result = false; try { ElevationMarker marker = null; XYZ markerLocation = null; Dictionary <int, ElevationViewProperties> elevationViews = new Dictionary <int, ElevationViewProperties>(); ApplyTemplateSettings(); using (Transaction trans = new Transaction(m_doc, "Elevation Creator")) { trans.Start(); try { BoundingBoxXYZ bbBox = m_room.get_BoundingBox(null); markerLocation = new XYZ(pickPoint.X, pickPoint.Y, bbBox.Min.Z); if (m_room.Document.IsLinked) { var documents = from doc in linkedDocuments.Values where doc.DocumentTitle == m_room.Document.Title select doc; if (documents.Count() > 0) { LinkedInstanceProperties lip = documents.First(); roomLink = lip; markerLocation = lip.TransformValue.OfPoint(markerLocation); } } marker = ElevationMarker.CreateElevationMarker(m_doc, m_viewFamilyTypeId, markerLocation, toolSettings.CustomScale); trans.Commit(); if (null != marker) { string prefix = toolSettings.PrefixText; string intermediateText = GetRoomParameterValue(m_room, toolSettings.IntermediateText); int elevationIndex = GetElevationMarkIndex(); string suffix = GetRoomParameterValue(m_room, toolSettings.SuffixText); int viewCount = marker.MaximumViewCount < suffix.Length ? marker.MaximumViewCount : suffix.Length; double rotationalAngle = 0; Dictionary <int, string> indexLabels = GetMarkerLabel(markerLocation, out rotationalAngle); bool firstView = true; foreach (int index in indexLabels.Keys) { if (index < marker.MaximumViewCount) { trans.Start(); ViewSection viewElevation = marker.CreateElevation(m_doc, m_viewPlan.Id, index); viewElevation.Name = GetViewName(prefix, intermediateText, elevationIndex, indexLabels[index], suffix); if (toolSettings.ViewTemplateId != -1) { viewElevation.ViewTemplateId = new ElementId(toolSettings.ViewTemplateId); } Parameter param = viewElevation.LookupParameter("Title on Sheet"); if (null != param) { param.Set(m_room.Name); } trans.Commit(); if (firstView && null != viewElevation) { trans.Start(); try { bool rotated = RotateMarker(marker, markerLocation, rotationalAngle); firstView = false; trans.Commit(); } catch (Exception ex) { trans.RollBack(); MessageBox.Show("Failed to rotate the elevation marker.\n" + ex.Message, "Elevation Creator : RotateMarker", MessageBoxButton.OK, MessageBoxImage.Warning); } } ElevationViewProperties viewProperties = new ElevationViewProperties(viewElevation); viewProperties.WallId = m_wall.Id.IntegerValue; if (!elevationViews.ContainsKey(viewProperties.ViewId)) { elevationViews.Add(viewProperties.ViewId, viewProperties); } } } if (elevationViews.Count > 0 && !roomProperties.ElevationViews.ContainsKey(marker.Id.IntegerValue)) { roomProperties.ElevationViews.Add(marker.Id.IntegerValue, elevationViews); } } } catch (Exception ex) { trans.RollBack(); MessageBox.Show("Failed to create an elevation view.\n" + ex.Message, "Create Elevation View", MessageBoxButton.OK, MessageBoxImage.Warning); return(false); } } if (null != marker && null != markerLocation) { if (ModifyCropBox(roomProperties, marker.Id.IntegerValue)) { if (ElevationCreatorDataStorageUtil.StoreRoomElevationProperties(m_doc, roomProperties)) { //update extensible storage result = true; } } } } catch (Exception ex) { MessageBox.Show("Failed to create an elevation view.\nRoom Name: " + m_room.Name + "\nWall Name: " + m_wall.Name + "\n" + ex.Message, "", MessageBoxButton.OK, MessageBoxImage.Warning); } return(result); }
public bool CreateElevationByList() { bool result = false; try { ElevationMarker marker = null; XYZ markerLocation = null; ApplyTemplateSettings(); using (Transaction trans = new Transaction(m_doc, "Create Elevation Marker")) { trans.Start(); try { BoundingBoxXYZ bbBox = m_room.get_BoundingBox(null); markerLocation = new XYZ((bbBox.Max.X + bbBox.Min.X) / 2, (bbBox.Max.Y + bbBox.Min.Y) / 2, bbBox.Min.Z); //LocationPoint locationPoint = m_room.Location as LocationPoint; //markerLocation = locationPoint.Point; if (m_room.Document.IsLinked) { var documents = from doc in linkedDocuments.Values where doc.DocumentTitle == m_room.Document.Title select doc; if (documents.Any()) { LinkedInstanceProperties lip = documents.First(); roomLink = lip; markerLocation = lip.TransformValue.OfPoint(markerLocation); } } marker = ElevationMarker.CreateElevationMarker(m_doc, m_viewFamilyTypeId, markerLocation, toolSettings.CustomScale); trans.Commit(); } catch (Exception ex) { trans.RollBack(); LogMessageBuilder.AddLogMessage(roomProperties.RoomNumber + " - " + roomProperties.RoomName + " : failed to create an elevation marker."); LogMessageBuilder.AddLogMessage(ex.Message); //MessageBox.Show("Failed to create an elevation marker.\n" + ex.Message, "Elevation Creator: Create Elevation Marker", MessageBoxButton.OK, MessageBoxImage.Warning); } } if (null != marker) { using (Transaction trans = new Transaction(m_doc, "Create Elevation Views")) { trans.Start(); try { string prefix = toolSettings.PrefixText; string intermediateText = GetRoomParameterValue(m_room, toolSettings.IntermediateText); int elevationIndex = GetElevationMarkIndex(); string suffix = GetRoomParameterValue(m_room, toolSettings.SuffixText); int viewCount = marker.MaximumViewCount < 4 ? marker.MaximumViewCount : 4; Dictionary <int, Dictionary <int, ElevationViewProperties> > elevationDictionary = new Dictionary <int, Dictionary <int, ElevationViewProperties> >(); Dictionary <int, ElevationViewProperties> elevationViews = new Dictionary <int, ElevationViewProperties>(); for (int i = 0; i < viewCount; i++) { string indexText = ""; if (i == 0 && toolSettings.DIsSelected) { indexText = "D"; } else if (i == 1 && toolSettings.AIsSelected) { indexText = "A"; } else if (i == 2 && toolSettings.BIsSelected) { indexText = "B"; } else if (i == 3 && toolSettings.CIsSelected) { indexText = "C"; } else { continue; } ViewSection viewElevation = marker.CreateElevation(m_doc, m_viewPlan.Id, i); viewElevation.Name = GetViewName(prefix, intermediateText, elevationIndex, indexText, suffix); if (toolSettings.ViewTemplateId != -1) { viewElevation.ViewTemplateId = new ElementId(toolSettings.ViewTemplateId); } Parameter param = viewElevation.LookupParameter("Title on Sheet"); if (null != param) { param.Set(m_room.Name); } ElevationViewProperties viewProperties = new ElevationViewProperties(viewElevation); if (!elevationViews.ContainsKey(viewProperties.ViewId)) { elevationViews.Add(viewProperties.ViewId, viewProperties); } } if (elevationViews.Count > 0 && !roomProperties.ElevationViews.ContainsKey(marker.Id.IntegerValue)) { roomProperties.KeyMarkId = marker.Id.IntegerValue; roomProperties.ElevationViews.Add(marker.Id.IntegerValue, elevationViews); } trans.Commit(); } catch (Exception ex) { trans.RollBack(); LogMessageBuilder.AddLogMessage(roomProperties.RoomNumber + " - " + roomProperties.RoomName + " : failed to create elevation views."); LogMessageBuilder.AddLogMessage(ex.Message); //MessageBox.Show("Failed to create elevation views.\n" + ex.Message, "Elevation Creator: Create Elevation Views", MessageBoxButton.OK, MessageBoxImage.Warning); } } } if (null != marker && null != markerLocation) { if (ModifyCropBox(roomProperties, marker.Id.IntegerValue)) { if (ElevationCreatorDataStorageUtil.StoreRoomElevationProperties(m_doc, roomProperties)) { //update extensible storage result = true; } } } result = true; } catch (Exception ex) { LogMessageBuilder.AddLogMessage(roomProperties.RoomNumber + " - " + roomProperties.RoomName + " : failed to create elevations by room lists.\n" + ex.Message); //MessageBox.Show("Failed to create elevation by room lists.\n"+ex.Message, "Elevation Creator: CreateElevationByList", MessageBoxButton.OK, MessageBoxImage.Warning); } return(result); }