- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi,
just starting to learn revit API and I get these two error when trying to execute simple sample Macro:
Cannot implicitly convert type 'Autodesk.Revit.DB.Element' to 'Autodesk.Revit.DB.Wall'. An explicit conversion exists (are you missing a cast?) (CS0266)
Argument 1: cannot convert from 'Autodesk.Revit.UI.UIDocument' to 'Autodesk.Revit.DB.Document' (CS1503)
public void GetWallLayerMaterial(Autodesk.Revit.DB.Document document, Wall wall)
{
// get WallType of wall
WallType aWallType = wall.WallType;
// Only Basic Wall has compoundStructure
if (WallKind.Basic == aWallType.Kind)
{
// Get CompoundStructure
CompoundStructure comStruct = aWallType.GetCompoundStructure();
Categories allCategories = document.Settings.Categories;
// Get the category OST_Walls default Material;
// use if that layer's default Material is <By Category>
Category wallCategory = allCategories.get_Item(BuiltInCategory.OST_Walls);
Autodesk.Revit.DB.Material wallMaterial = wallCategory.Material;
foreach (CompoundStructureLayer structLayer in comStruct.GetLayers())
{
Autodesk.Revit.DB.Material layerMaterial = document.GetElement(structLayer.MaterialId) as Material;
// If CompoundStructureLayer's Material is specified, use default
// Material of its Category
if (null == layerMaterial)
{
switch (structLayer.Function)
{
case MaterialFunctionAssignment.Finish1:
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsFinish1).Material;
break;
case MaterialFunctionAssignment.Finish2:
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsFinish2).Material;
break;
case MaterialFunctionAssignment.Membrane:
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsMembrane).Material;
break;
case MaterialFunctionAssignment.Structure:
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsStructure).Material;
break;
case MaterialFunctionAssignment.Substrate:
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsSubstrate).Material;
break;
case MaterialFunctionAssignment.Insulation:
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsInsulation).Material;
break;
default:
// It is impossible to reach here
break;
}
if (null == layerMaterial)
{
// CompoundStructureLayer's default Material is its SubCategory
layerMaterial = wallMaterial;
}
}
TaskDialog.Show("Revit","Layer Material: " + layerMaterial);
}
}
}
public void TestMacro()
{
UIDocument uidoc = Application.ActiveUIDocument;
Document doc = Application.ActiveUIDocument.Document;
Wall UserWall = null;
Reference wallreference = null;
wallreference = uidoc.Selection.PickObject(ObjectType.Element);
UserWall = uidoc.Document.GetElement(wallreference);
GetWallLayerMaterial(uidoc, UserWall);
}
}
}
Solved! Go to Solution.