'Autodesk.Revit.DB.Element' to 'Autodesk.Revit.DB.Wall' error

atis.sed
Advocate

'Autodesk.Revit.DB.Element' to 'Autodesk.Revit.DB.Wall' error

atis.sed
Advocate
Advocate

Hi,

just starting to learn revit API and I get these two error when trying to execute simple sample Macro:

https://knowledge.autodesk.com/support/revit/learn-explore/caas/CloudHelp/cloudhelp/2014/ENU/Revit/f...

 

 

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

 

 

0 Likes
Reply
Accepted solutions (1)
1,140 Views
1 Reply
Reply (1)

Organon
Advisor
Advisor
Accepted solution

@atis.sed 

 

Hi,

 

Try this:

UserWall = uidoc.Document.GetElement(wallreference) as Wall;

 

You're passing the  uidoc argument instead doc in your  GetWallLayerMaterial method.

 

Regards,


Arquitectura | Análisis CAD & BIM | Diseño Paramétrico | Programación
BIM-METADATA | LinkedIn | YouTube