PickObjects Winform

Hi all,

Can someone tell me how to define a revit selection inside a winform?
It’s the action in Button2click

image

import clr #.NET Laden
import sys #sys is de fundamentele Python bibliotheek
#de standaard IronPython-bibliotheken
#sys.path.append('C:\Program Files (x86)\IronPython 2.7\Lib') #Imports the
#standaard IronPython-bibliotheken, die alles dekken, van servers en
#encryptie tot reguliere expressies.
import System #The System namespace in de hoofdmap .NET
from System import Array #.NET class voor het verwerken van array-informatie
import System.Collections.Generic as MGen #Module kan nu benaderd worden met MGen.xxxx
#from System.Collections.Generic import * #Hiermee kunt u generieke afhandelen. Revit's API
#soms wil hard-getypte 'generieke' lijsten, genaamd ILists. Als je niet nodig hebt
#deze kunt u deze regel verwijderen.
clr.AddReference('ProtoGeometry')  #Een Dynamo-bibliotheek voor zijn proxygeometrie
#classes. Je hebt dit alleen nodig als je interactie hebt met geometrie.
import Autodesk.DesignScript.Geometry as AGeo #Module kan worden opgeroepen a=met AGeo.xxxx
#from Autodesk.DesignScript.Geometry import * #Laadt alles in Dynamo's
#geometriebibliotheek
clr.AddReference("RevitNodes") #Dynamo's nodes voor Revit
import Revit #Laad in de Revit-namespaces in RevitNodes
clr.ImportExtensions(Revit.Elements) #Meer laden van Dynamo's Revit-bibliotheken
clr.ImportExtensions(Revit.GeometryConversion) #Meer laden van Dynamo's
#Revit-bibliotheken. Je hebt dit alleen nodig als je interactie hebt met geometrie.
clr.AddReference("RevitServices") #Dynamo's classes voor het omgaan met Revit-documenten
import RevitServices 
from RevitServices.Persistence import DocumentManager #Een interne Dynamo class
#dat het document bijhoudt waaraan Dynamo momenteel is gekoppeld
from RevitServices.Transactions import TransactionManager #Een Dynamo class voor
#transacties openen en sluiten om de database van het Revit-document te wijzigen

clr.AddReference("RevitAPI") #Verwijzing naar Revit's API DLL's toevoegen
clr.AddReference("RevitAPIUI") #Verwijzing naar Revit's APIUI DLL's toevoegen

import Autodesk #Loads the Autodesk namespace
import Autodesk.Revit.DB as RDB #Loading Revit's API UI classes module kan nu worden aangeroepen met RDB.xxxx
#from Autodesk.Revit.DB import * #Loading Revit's API UI classes
import Autodesk.Revit.UI as RUI # Loading Revit's API UI classes als RUI.xxxx
#from Autodesk.Revit.UI import * #Loading Revit's API UI classes
import Autodesk.Revit.UI.Selection as RSel #Revit Select

def GetName(ele):
	elename = None
 	try:
 		elename = ele.Name
 	except:
 		elename = RDB.Element.Name.__get__(ele)
 	return elename 

doc = DocumentManager.Instance.CurrentDBDocument #Dit is het actieve Revit document
uiapp = DocumentManager.Instance.CurrentUIApplication #Een handle instellen voor het actieve Revit UI-document
app = uiapp.Application  #Een handle instellen op de momenteel geopende instantie van de Revit-toepassing
uidoc = uiapp.ActiveUIDocument #Een handle instellen op de momenteel geopende instantie van de Revit UI-toepassing

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

import System.Drawing
import System.Windows.Forms

from System.Drawing import *
from System.Windows.Forms import *

project_info_collector = RDB.FilteredElementCollector(doc).OfCategory(RDB.BuiltInCategory.OST_ProjectInformation).ToElements()
projectinfo = []

for i in project_info_collector:
	#projectnaam
	project_naam = i.LookupParameter("Project Name").AsString()
	projectinfo.Add(project_naam)
	#projectnummer
	project_nummmer = i.LookupParameter("Project Number").AsString()
	projectinfo.Add(project_nummmer)
	#tekenaar
	tekenaar = i.LookupParameter("VDS_INI_MOD").AsString()
	projectinfo.Add(tekenaar)
	
titleblock_col = RDB.FilteredElementCollector(doc).OfCategory(RDB.BuiltInCategory.OST_TitleBlocks).ToElements()
titleblocknaam = []
for i in titleblock_col:
	namen = GetName(i)
	if namen == "VDS_Projektinformatie" or namen.Contains("schedules") or namen.Contains("Portret"):
		pass
	else:
		titleblocknaam.Add(namen)
		

class MySelectionFilter(RSel.ISelectionFilter):
	def __init__(self):
		pass
	def AllowElement(self, element):
		if element.Category.Name == "Pipes" or element.Category.Name == "Pipe Fittings":
			return True
		else:
			return False
	def AllowReference(self, element):
		return False





class Gebruikersinvoer(Form):
	def __init__(self):
		self.out = []
		self.InitializeComponent()
	
	def InitializeComponent(self):	
		self._combov_verd = System.Windows.Forms.ComboBox()
		self._button1 = System.Windows.Forms.Button()
		self._button2 = System.Windows.Forms.Button()
		self._label2 = System.Windows.Forms.Label()
		self._label3 = System.Windows.Forms.Label()
		self._label4 = System.Windows.Forms.Label()
		self._text_projectnr = System.Windows.Forms.TextBox()
		self._text_projectnaam = System.Windows.Forms.TextBox()
		self._label1 = System.Windows.Forms.Label()
		self._text_blok = System.Windows.Forms.TextBox()
		self._label5 = System.Windows.Forms.Label()
		self._text_tek = System.Windows.Forms.TextBox()
		self._combo_formaat = System.Windows.Forms.ComboBox()
		self._label6 = System.Windows.Forms.Label()
		self.SuspendLayout()
		# 
		# combov_verd
		# 
		self._combov_verd.FormattingEnabled = True
		self._combov_verd.Items.AddRange(System.Array[System.Object](
			["00 fundering",
			"01 verdieping",
			"02 verdieping",
			"03 verdieping",
			"04 verdieping",
			"05 verdieping",
			"06 verdieping",
			"07 verdieping",
			"08 verdieping",
			"09 verdieping",
			"10 verdieping",
			"11 verdieping",
			"12 verdieping",
			"13 verdieping",
			"14 verdieping",
			"15 verdieping",
			"16 verdieping",
			"17 verdieping",
			"18 verdieping",
			"19 verdieping",
			"20 verdieping"]))
		self._combov_verd.Location = System.Drawing.Point(400, 127)
		self._combov_verd.Name = "combov_verd"
		self._combov_verd.Text = "Verdieping"
		self._combov_verd.Size = System.Drawing.Size(250, 21)
		self._combov_verd.TabIndex = 0
		self._combov_verd.SelectedIndexChanged += self.ComboBox1SelectedIndexChanged
		# 
		# button1
		# 
		self._button1.Location = System.Drawing.Point(400, 215)
		self._button1.Name = "button1"
		self._button1.Size = System.Drawing.Size(250, 27)
		self._button1.TabIndex = 2
		self._button1.Text = "Voltooien"
		self._button1.UseVisualStyleBackColor = True
		self._button1.Click += self.Button1Click
		# 
		# button2
		# 
		
		self._button2.Location = System.Drawing.Point(27, 215)
		self._button2.Name = "button2"
		self._button2.Size = System.Drawing.Size(250, 27)
		self._button2.TabIndex = 1
		self._button2.Text = "Selecteer elementen"
		self._button2.UseVisualStyleBackColor = True
		self._button2.Click += self.Button2Click
		# 
		# label2
		# 
		self._label2.Location = System.Drawing.Point(27, 25)
		self._label2.Name = "label2"
		self._label2.Size = System.Drawing.Size(111, 23)
		self._label2.TabIndex = 1
		self._label2.Text = "Projectnummer"
		# 
		# label3
		# 
		self._label3.Location = System.Drawing.Point(27, 48)
		self._label3.Name = "label3"
		self._label3.Size = System.Drawing.Size(111, 23)
		self._label3.TabIndex = 1
		self._label3.Text = "Projectnaam"
		# 
		# label4
		# 
		self._label4.Location = System.Drawing.Point(27, 125)
		self._label4.Name = "label4"
		self._label4.Size = System.Drawing.Size(111, 23)
		self._label4.TabIndex = 1
		self._label4.Text = "Selecteer verdieping"
		# 
		# text_projectnr
		# 
		self._text_projectnr.Location = System.Drawing.Point(400, 28)
		self._text_projectnr.Name = "text_projectnr"
		self._text_projectnr.Text = project_nummmer
		self._text_projectnr.Size = System.Drawing.Size(250, 20)
		self._text_projectnr.TabIndex = 3
		# 
		# text_projectnaam
		# 
		self._text_projectnaam.Location = System.Drawing.Point(400, 51)
		self._text_projectnaam.Name = "text_projectnaam"
		self._text_projectnaam.Text = project_naam
		self._text_projectnaam.Size = System.Drawing.Size(250, 20)
		self._text_projectnaam.TabIndex = 3
		# 
		# label1
		# 
		self._label1.Location = System.Drawing.Point(27, 74)
		self._label1.Name = "label1"
		self._label1.Size = System.Drawing.Size(111, 23)
		self._label1.TabIndex = 1
		self._label1.Text = "Bloknummer"
		self._label1.Click += self.Label1Click
		
		# 
		# text_blok
		# 
		self._text_blok.Location = System.Drawing.Point(400, 77)
		self._text_blok.Name = "text_blok"
		self._text_blok.Text = "Blok"
		self._text_blok.Size = System.Drawing.Size(250, 20)
		self._text_blok.TabIndex = 3
		# 
		# label5
		# 
		self._label5.Location = System.Drawing.Point(27, 100)
		self._label5.Name = "label5"
		self._label5.Size = System.Drawing.Size(111, 23)
		self._label5.TabIndex = 1
		self._label5.Text = "Tekenaar"
		self._label5.Click += self.Label1Click
		# 
		# text_tek
		# 
		self._text_tek.Location = System.Drawing.Point(400, 103)
		self._text_tek.Name = "text_tek"
		self._text_tek.Text = tekenaar
		self._text_tek.Size = System.Drawing.Size(250, 20)
		self._text_tek.TabIndex = 3
		
		# 
		# combo_formaat
		# 
		self._combo_formaat.FormattingEnabled = True
		self._combo_formaat.Items.AddRange(System.Array[System.Object](titleblocknaam))
		self._combo_formaat.Location = System.Drawing.Point(400, 152)
		self._combo_formaat.Name = "combo_formaat"
		self._combo_formaat.Text = titleblocknaam[2]
		self._combo_formaat.Size = System.Drawing.Size(250, 21)
		self._combo_formaat.TabIndex = 0
		self._combo_formaat.SelectedIndexChanged += self.ComboBox1SelectedIndexChanged
		# 
		# label6
		# 
		self._label6.Location = System.Drawing.Point(27, 150)
		self._label6.Name = "label6"
		self._label6.Size = System.Drawing.Size(121, 23)
		self._label6.TabIndex = 1
		self._label6.Text = "Selecteer formaat"
		self._label6.Click += self.Label6Click
		# 
		# MainForm
		# 
		self.AutoSize = True
		self.ClientSize = System.Drawing.Size(600, 253)
		self.Controls.Add(self._text_projectnr)
		self.Controls.Add(self._text_projectnaam)
		self.Controls.Add(self._text_blok)
		self.Controls.Add(self._text_tek)
		self.Controls.Add(self._combov_verd)
		self.Controls.Add(self._combo_formaat)
		self.Controls.Add(self._button1)
		self.Controls.Add(self._button2)
		self.Controls.Add(self._label2)
		self.Controls.Add(self._label3)	
		self.Controls.Add(self._label1)		
		self.Controls.Add(self._label5)
		self.Controls.Add(self._label4)
		self.Controls.Add(self._label6)
		self.MaximizeBox = False
		self.MinimizeBox = False
		self.Name = "MainForm"
		self.ShowIcon = False
		self.Text = "Gebruikersinvoer"
		self.ResumeLayout(False)
		self.PerformLayout()
		
		
	def Button1Click(self, sender, e):
		self.out.append(self._text_projectnr.Text)
		self.out.append(self._text_projectnaam.Text)
		self.out.append(self._text_blok.Text)
		self.out.append(self._text_tek.Text)
		self.out.append(self._combov_verd.SelectedItem)
		self.out.append(self._combo_formaat.SelectedItem)
		self.Close()  
		
	def Button2Click(self, sender, e):
		if sender.Click:
			self.uidoc.Selection.PickObjects(RSel.ObjectType.Element, selection_filter)
		
		
	def ComboBox1SelectedIndexChanged(self, sender, e):
		pass

	def Label1Click(self, sender, e):
		pass

	def Label6Click(self, sender, e):
		pass


form = Gebruikersinvoer()
Application.Run(form)


OUT = form.out

Hello
try this


#
#
# SOME CODE
#
#

class MySelectionFilter(RSel.ISelectionFilter):
	def __init__(self):
		pass
	def AllowElement(self, element):
		if element.Category.Name == "Pipes" or element.Category.Name == "Pipe Fittings":
			return True
		else:
			return False
	def AllowReference(self, element):
		return False

class Gebruikersinvoer(Form):
	def __init__(self):
		self.out = []
		self.selectElems = []
		self.InitializeComponent()
	#
	#
	# REST OF CODE
	#
	#
	def Button2Click(self, sender, e):
		if sender.Click:
			refs = uidoc.Selection.PickObjects(RSel.ObjectType.Element, MySelectionFilter())
			self.selectElems = [doc.GetElement(ref) for ref in refs]
	#
	#
	# REST OF CODE
	#
	#

Yeah that’s it! :slight_smile: Thank you very much! :slight_smile:

Python is really cool to do, I like it :sunglasses:

2 Likes