public void AdjustBeamTypeProperties(FamilySymbol beamSymbol) { string actualTypeName = beamSymbol.Name; string targetSynthaxe = actualTypeName.Before("-"); string targetBeamSign = BeamType.GetBeamSign(targetSynthaxe); string targetMatSign = actualTypeName.Between("-", "-"); string targetBeamMat = RvtMaterial.GetMatName(targetMatSign); string dimensionString = actualTypeName.After("-"); double targetWidth = Convert.ToDouble(dimensionString.Before("x")); double targetHeight = Convert.ToDouble(dimensionString.After("x")); double beamHeight, beamWidth; string beamSign, beamMat; GetBeamSymbolProperties(beamSymbol, out beamSign, out beamMat, out beamHeight, out beamWidth); if (!beamSign.Equals(targetBeamSign)) { Transaction t = new Transaction(_doc); t.Start("Change beam type property"); SetStringValueTo(beamSymbol, Default.PARA_NAME_BEAM_TYPE, targetBeamSign); t.Commit(); } if (!beamMat.Equals(targetBeamMat)) { Material targetMaterial = GetMaterialByName(_doc, targetBeamMat); Transaction t = new Transaction(_doc); t.Start("Change beam material property"); SetElementIdValueTo(beamSymbol, Default.PARA_NAME_STR_MATERIAL, targetMaterial.Id); t.Commit(); } if (beamHeight != targetHeight) { Transaction t = new Transaction(_doc); t.Start("Change beam height property"); SetDoubleValueTo(beamSymbol, Default.PARA_NAME_DIM_HEIGHT, UnitUtils.Convert(targetHeight, DisplayUnitType.DUT_CENTIMETERS, DisplayUnitType.DUT_DECIMAL_FEET)); t.Commit(); } if (beamWidth != targetWidth) { Transaction t = new Transaction(_doc); t.Start("Change beam width property"); SetDoubleValueTo(beamSymbol, Default.PARA_NAME_DIM_WIDTH, UnitUtils.Convert(targetWidth, DisplayUnitType.DUT_CENTIMETERS, DisplayUnitType.DUT_DECIMAL_FEET)); t.Commit(); } }
public FamilySymbol GetBeamFamilyTypeOrCreateNew(string beamSign, string beamMat, double beamHeight, double beamWidth) { string synthaxe = BeamType.GetSyntaxe(beamSign); string matSign = RvtMaterial.GetMatSyntaxe(beamMat); string targetBeamTypeName = $"{synthaxe}-{matSign}-{beamWidth}x{beamHeight}"; // find the family type for beam creation FamilySymbol beamSymbol = GetFamilySymbolByName(_doc, BuiltInCategory.OST_StructuralFraming, targetBeamTypeName); // if family type exists, adjust its properties if (beamSymbol != null) { AdjustBeamTypeProperties(beamSymbol); } // if family type doesn't exist in the project, create a new one else { if (null != _family) { System.Diagnostics.Debug.Print("Family name={0}", _family.Name); FamilySymbol s = null; foreach (ElementId id in _family.GetFamilySymbolIds()) { s = _doc.GetElement(id) as FamilySymbol; break; } System.Diagnostics.Debug.Assert(null != s, "expected at least one symbol" + " to be defined in family"); Transaction t = new Transaction(_doc); t.Start("Create new family type"); beamSymbol = s.Duplicate("InitialName") as FamilySymbol; SetDoubleValueTo( beamSymbol, Default.PARA_NAME_DIM_HEIGHT, UnitUtils.Convert(beamHeight, DisplayUnitType.DUT_CENTIMETERS, DisplayUnitType.DUT_DECIMAL_FEET)); SetDoubleValueTo( beamSymbol, Default.PARA_NAME_DIM_WIDTH, UnitUtils.Convert(beamWidth, DisplayUnitType.DUT_CENTIMETERS, DisplayUnitType.DUT_DECIMAL_FEET)); SetStringValueTo(beamSymbol, Default.PARA_NAME_BEAM_TYPE, beamSign); Material targetMaterial = GetMaterialByName(_doc, beamMat); SetElementIdValueTo(beamSymbol, Default.PARA_NAME_STR_MATERIAL, targetMaterial.Id); beamSymbol.Name = targetBeamTypeName; t.Commit(); BeamTypesList.Add(beamSymbol); } } return(beamSymbol); }
public void AdjustBeamTypeName(FamilySymbol beamSymbol) { double beamHeight, beamWidth; string beamSign, beamMat; GetBeamSymbolProperties(beamSymbol, out beamSign, out beamMat, out beamHeight, out beamWidth); string synthaxe = BeamType.GetSyntaxe(beamSign); string matSign = RvtMaterial.GetMatSyntaxe(beamMat); string targetBeamTypeName = $"{synthaxe}-{matSign}-{beamWidth}x{beamHeight}"; if (!beamSymbol.Name.Equals(targetBeamTypeName)) { Transaction t = new Transaction(_doc); t.Start("Change beam type name"); beamSymbol.Name = targetBeamTypeName; t.Commit(); } }