/// <summary> /// Some families eg columns, need offsets to be set in a specific way. This tries to cover that. /// </summary> /// <param name="speckleElement"></param> /// <param name="familyInstance"></param> private void SetOffsets(DB.FamilyInstance familyInstance, RevitColumn speckleRevitColumn) { var topOffsetParam = familyInstance.get_Parameter(BuiltInParameter.FAMILY_TOP_LEVEL_OFFSET_PARAM); var baseOffsetParam = familyInstance.get_Parameter(BuiltInParameter.FAMILY_BASE_LEVEL_OFFSET_PARAM); var baseLevelParam = familyInstance.get_Parameter(BuiltInParameter.FAMILY_BASE_LEVEL_PARAM); var topLevelParam = familyInstance.get_Parameter(BuiltInParameter.FAMILY_TOP_LEVEL_PARAM); if (topLevelParam == null || baseLevelParam == null || baseOffsetParam == null || topOffsetParam == null) { return; } var baseOffset = ScaleToNative(speckleRevitColumn.baseOffset, speckleRevitColumn.units); var topOffset = ScaleToNative(speckleRevitColumn.topOffset, speckleRevitColumn.units); //these have been set previously //DB.Level level = Doc.GetElement(baseLevelParam.AsElementId()) as DB.Level; //DB.Level topLevel = Doc.GetElement(topLevelParam.AsElementId()) as DB.Level; //checking if BASE offset needs to be set before or after TOP offset // if ((topLevel != null && level.Elevation + baseOffset == topLevel.Elevation) || // (topLevel!=null && topLevel.Elevation == level.Elevation && baseOffset > 0)) //edge case // { baseOffsetParam.Set(baseOffset); topOffsetParam.Set(topOffset); // } // else // { // topOffsetParam.Set(topOffset); // baseOffsetParam.Set(baseOffset); // } }
public List <ApplicationPlaceholderObject> AnalyticalStickToNative(Element1D speckleStick) { List <ApplicationPlaceholderObject> placeholderObjects = new List <ApplicationPlaceholderObject> { }; XYZ offset1 = VectorToNative(speckleStick.end1Offset); XYZ offset2 = VectorToNative(speckleStick.end2Offset); List <ApplicationPlaceholderObject> placeholders = new List <ApplicationPlaceholderObject> { }; switch (speckleStick.type) { case ElementType1D.Beam: RevitBeam revitBeam = new RevitBeam(); //This only works for CSIC sections now for sure. Need to test on other sections revitBeam.type = speckleStick.property.name.Replace('X', 'x'); revitBeam.baseLine = speckleStick.baseLine; //Beam beam = new Beam(speckleStick.baseLine); placeholders = BeamToNative(revitBeam); DB.FamilyInstance nativeRevitBeam = (DB.FamilyInstance)placeholders[0].NativeObject; AnalyticalModelStick analyticalModel = (AnalyticalModelStick)nativeRevitBeam.GetAnalyticalModel(); analyticalModel.SetReleases(true, Convert.ToBoolean(speckleStick.end1Releases.stiffnessX), Convert.ToBoolean(speckleStick.end1Releases.stiffnessY), Convert.ToBoolean(speckleStick.end1Releases.stiffnessZ), Convert.ToBoolean(speckleStick.end1Releases.stiffnessXX), Convert.ToBoolean(speckleStick.end1Releases.stiffnessYY), Convert.ToBoolean(speckleStick.end1Releases.stiffnessZZ)); analyticalModel.SetReleases(false, Convert.ToBoolean(speckleStick.end2Releases.stiffnessX), Convert.ToBoolean(speckleStick.end2Releases.stiffnessY), Convert.ToBoolean(speckleStick.end2Releases.stiffnessZ), Convert.ToBoolean(speckleStick.end2Releases.stiffnessXX), Convert.ToBoolean(speckleStick.end2Releases.stiffnessYY), Convert.ToBoolean(speckleStick.end2Releases.stiffnessZZ)); analyticalModel.SetOffset(AnalyticalElementSelector.StartOrBase, offset1); analyticalModel.SetOffset(AnalyticalElementSelector.EndOrTop, offset2); //analyticalModel. return(placeholders); case ElementType1D.Brace: RevitBrace revitBrace = new RevitBrace(); revitBrace.type = speckleStick.property.name.Replace('X', 'x'); revitBrace.baseLine = speckleStick.baseLine; //Brace brace = new Brace(speckleStick.baseLine); placeholders = BraceToNative(revitBrace); DB.FamilyInstance nativeRevitBrace = (DB.FamilyInstance)placeholders[0].NativeObject; analyticalModel = (AnalyticalModelStick)nativeRevitBrace.GetAnalyticalModel(); analyticalModel.SetReleases(true, Convert.ToBoolean(speckleStick.end1Releases.stiffnessX), Convert.ToBoolean(speckleStick.end1Releases.stiffnessY), Convert.ToBoolean(speckleStick.end1Releases.stiffnessZ), Convert.ToBoolean(speckleStick.end1Releases.stiffnessXX), Convert.ToBoolean(speckleStick.end1Releases.stiffnessYY), Convert.ToBoolean(speckleStick.end1Releases.stiffnessZZ)); analyticalModel.SetReleases(false, Convert.ToBoolean(speckleStick.end2Releases.stiffnessX), Convert.ToBoolean(speckleStick.end2Releases.stiffnessY), Convert.ToBoolean(speckleStick.end2Releases.stiffnessZ), Convert.ToBoolean(speckleStick.end2Releases.stiffnessXX), Convert.ToBoolean(speckleStick.end2Releases.stiffnessYY), Convert.ToBoolean(speckleStick.end2Releases.stiffnessZZ)); analyticalModel.SetOffset(AnalyticalElementSelector.StartOrBase, offset1); analyticalModel.SetOffset(AnalyticalElementSelector.EndOrTop, offset2); return(placeholders); case ElementType1D.Column: RevitColumn revitColumn = new RevitColumn(); revitColumn.type = speckleStick.property.name.Replace('X', 'x'); revitColumn.baseLine = speckleStick.baseLine; placeholders = ColumnToNative(revitColumn); DB.FamilyInstance nativeRevitColumn = (DB.FamilyInstance)placeholders[0].NativeObject; AnalyticalModelColumn analyticalModelCol = (AnalyticalModelColumn)nativeRevitColumn.GetAnalyticalModel(); analyticalModelCol.SetReleases(true, Convert.ToBoolean(speckleStick.end1Releases.stiffnessX), Convert.ToBoolean(speckleStick.end1Releases.stiffnessY), Convert.ToBoolean(speckleStick.end1Releases.stiffnessZ), Convert.ToBoolean(speckleStick.end1Releases.stiffnessXX), Convert.ToBoolean(speckleStick.end1Releases.stiffnessYY), Convert.ToBoolean(speckleStick.end1Releases.stiffnessZZ)); analyticalModelCol.SetReleases(false, Convert.ToBoolean(speckleStick.end2Releases.stiffnessX), Convert.ToBoolean(speckleStick.end2Releases.stiffnessY), Convert.ToBoolean(speckleStick.end2Releases.stiffnessZ), Convert.ToBoolean(speckleStick.end2Releases.stiffnessXX), Convert.ToBoolean(speckleStick.end2Releases.stiffnessYY), Convert.ToBoolean(speckleStick.end2Releases.stiffnessZZ)); analyticalModelCol.SetOffset(AnalyticalElementSelector.StartOrBase, offset1); analyticalModelCol.SetOffset(AnalyticalElementSelector.EndOrTop, offset2); return(placeholders); //Column column = new Column(speckleStick.baseLine); return(ColumnToNative(revitColumn)); } return(placeholderObjects); }
public Base ColumnToSpeckle(DB.FamilyInstance revitColumn) { var symbol = Doc.GetElement(revitColumn.GetTypeId()) as FamilySymbol; var speckleColumn = new RevitColumn(); speckleColumn.family = symbol.FamilyName; speckleColumn.type = Doc.GetElement(revitColumn.GetTypeId()).Name; speckleColumn.level = ConvertAndCacheLevel(revitColumn, BuiltInParameter.FAMILY_BASE_LEVEL_PARAM); speckleColumn.topLevel = ConvertAndCacheLevel(revitColumn, BuiltInParameter.FAMILY_TOP_LEVEL_PARAM); speckleColumn.baseOffset = GetParamValue <double>(revitColumn, BuiltInParameter.FAMILY_BASE_LEVEL_OFFSET_PARAM); speckleColumn.topOffset = GetParamValue <double>(revitColumn, BuiltInParameter.FAMILY_TOP_LEVEL_OFFSET_PARAM); speckleColumn.facingFlipped = revitColumn.FacingFlipped; speckleColumn.handFlipped = revitColumn.HandFlipped; speckleColumn.isSlanted = revitColumn.IsSlantedColumn; //speckleColumn.structural = revitColumn.StructuralType == StructuralType.Column; //geometry var baseGeometry = LocationToSpeckle(revitColumn); var baseLine = baseGeometry as ICurve; //make line from point and height if (baseLine == null && baseGeometry is Point basePoint) { var elevation = ConvertAndCacheLevel(revitColumn, BuiltInParameter.FAMILY_TOP_LEVEL_PARAM).elevation; baseLine = new Line(basePoint, new Point(basePoint.x, basePoint.y, elevation + speckleColumn.topOffset, ModelUnits), ModelUnits); } if (baseLine == null) { return(RevitElementToSpeckle(revitColumn)); } speckleColumn.baseLine = baseLine; //all speckle columns should be line based GetAllRevitParamsAndIds(speckleColumn, revitColumn, new List <string> { "FAMILY_BASE_LEVEL_PARAM", "FAMILY_TOP_LEVEL_PARAM", "FAMILY_BASE_LEVEL_OFFSET_PARAM", "FAMILY_TOP_LEVEL_OFFSET_PARAM", "SCHEDULE_BASE_LEVEL_OFFSET_PARAM", "SCHEDULE_TOP_LEVEL_OFFSET_PARAM" }); if (revitColumn.Location is LocationPoint) { speckleColumn.rotation = ((LocationPoint)revitColumn.Location).Rotation; } speckleColumn.displayMesh = GetElementMesh(revitColumn); return(speckleColumn); }
public RevitColumn ColumnToSpeckle(DB.FamilyInstance revitColumn) { var speckleColumn = new RevitColumn(); speckleColumn.type = Doc.GetElement(revitColumn.GetTypeId()).Name; speckleColumn.level = ConvertAndCacheLevel(revitColumn, BuiltInParameter.FAMILY_BASE_LEVEL_PARAM); speckleColumn.topLevel = ConvertAndCacheLevel(revitColumn, BuiltInParameter.FAMILY_TOP_LEVEL_PARAM); speckleColumn.baseOffset = GetParamValue <double>(revitColumn, BuiltInParameter.FAMILY_BASE_LEVEL_OFFSET_PARAM); speckleColumn.topOffset = GetParamValue <double>(revitColumn, BuiltInParameter.FAMILY_TOP_LEVEL_OFFSET_PARAM); speckleColumn.facingFlipped = revitColumn.FacingFlipped; speckleColumn.handFlipped = revitColumn.HandFlipped; speckleColumn.isSlanted = revitColumn.IsSlantedColumn; speckleColumn.structural = revitColumn.StructuralType == StructuralType.Column; //geometry var baseGeometry = LocationToSpeckle(revitColumn); var baseLine = baseGeometry as ICurve; //make line from point and height if (baseLine == null && baseGeometry is Point basePoint) { var topLevelParam = revitColumn.get_Parameter(BuiltInParameter.FAMILY_TOP_LEVEL_PARAM); var elevation = (double)((RevitLevel)ParameterToSpeckle(topLevelParam).value).elevation; baseLine = new Line(basePoint, new Point(basePoint.x, basePoint.y, elevation + speckleColumn.topOffset, ModelUnits), ModelUnits); } if (baseLine == null) { throw new Speckle.Core.Logging.SpeckleException("Only line based Columns are currently supported."); } speckleColumn.baseLine = baseLine; //all speckle columns should be line based GetAllRevitParamsAndIds(speckleColumn, revitColumn, new List <string> { "FAMILY_BASE_LEVEL_PARAM", "FAMILY_TOP_LEVEL_PARAM", "FAMILY_BASE_LEVEL_OFFSET_PARAM", "FAMILY_TOP_LEVEL_OFFSET_PARAM" }); if (revitColumn.Location is LocationPoint) { speckleColumn.rotation = ((LocationPoint)revitColumn.Location).Rotation; } speckleColumn["@displayMesh"] = GetElementMesh(revitColumn); return(speckleColumn); }