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

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

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

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