Wire Type Material

Hi Everyone

I have a node python script , I want to add a new wire material, I know that I need to retrieved From Electrical Setting instead from the Revit project here is my script.

import clr
import sys
sys.path.append('C:\Program Files (x86)\IronPython 2.7\Lib')
import System
from System import Array
from System.Collections.Generic import *
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager 
from RevitServices.Transactions import TransactionManager 

clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")

import Autodesk 
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
from Autodesk.Revit.DB.Electrical import *
from Autodesk.Revit.UI import *


doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication 
app = uiapp.Application 
uidoc = uiapp.ActiveUIDocument

output = []
#######OK NOW YOU CAN CODE########

# The inputs to this node will be stored as a list in the IN variables.



Collector1 = FilteredElementCollector(doc)
Filter1 = Collector1.OfClass(ElectricalSetting)
ElectricalSetting = Filter1.ToElements()

Collector = FilteredElementCollector(doc)
Filter = Collector.OfClass(WireMaterialType)
Wiretype = Filter.FirstElement()
Names = "NEC-310-A3"
Error  = None

TransactionManager.Instance.EnsureInTransaction(doc)

try:
	AddWMT = ElectricalSetting.AddWireMaterialType(Names.AsString(), Wiretype)
	output.append(AddWMT.ToDSType(True))
	                                                                                                           
	
except:
	
	TaskDialog.Show("Error Material Type", Error)

TransactionManager.Instance.TransactionTaskDone()

#output.append(ElectricalSetting)


# Place your code below this line

# Assign your output to the OUT variable.
OUT = output

my problem is when I run the node say empty list as the output

Capture3

import clr
import sys
import System

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
from Autodesk.Revit.DB.Electrical import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

Output = []

Elec = ElectricalSetting.GetElectricalSettings(doc)

Error = None

WireMat = WireMaterialType()

Names = "NEC-210-3A"

TransactionManager.Instance.EnsureInTransaction(doc)

try:
	NewMaterial = Elec.AddWireMaterialType(Names, WireMaT)
	Output.append(NewMaterial.ToDSType(True).Name)
except:
	                                                                    
	TaskDialog.Show("Error Material Type", Error)

TransactionManager.Instance.TransactionTaskDone()

OUT = Output

I modified my code now have this error

image

can someone please tell me what I am doing wrong thank you.

Hello @jguevara5PPA8
you need to use a baseWireMaterialType to Create a new one

image

import clr
import sys
import System

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
from Autodesk.Revit.DB.Electrical import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

Output = []

Elec = ElectricalSetting.GetElectricalSettings(doc)
WireMaT = next((x for x in Elec.WireMaterialTypes if x.ToDSType(False).Name == IN[0]), None)
TransactionManager.Instance.EnsureInTransaction(doc)
if WireMaT is not None:
	Names = "NEC-210-3A"
	try:
		NewMaterial = Elec.AddWireMaterialType(Names, WireMaT)
		Output.append(NewMaterial.ToDSType(True).Name)
	except:
		Output.append("WireMaterialType '{}' already exist".format(Names))
TransactionManager.Instance.TransactionTaskDone()

OUT = Output

Hi @c.poupin thank you for your help. I really appreciate

1 Like