# Create Floor with Openings - Python, Dynamo

**URL:** <https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266>\
**Category:** Revit\
**Tags:** revit, python, dynamo\
**Created:** [April 13, 2020, 10:30pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266 "2020-04-13T22:30:52Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![niojuri22](https://avatars.discourse-cdn.com/v4/letter/n/5f8ce5/32.png) [@niojuri22](https://forum.dynamobim.com/u/niojuri22)\
**Post date:** [April 13, 2020, 10:30pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/1 "2020-04-13T22:30:52Z")

</div>

Hello guys!  
I’m trying to set a sript to create a Floor with Openings in Phyton + Dynamo.  
But, When I run my script I get this Revit Error (No code error).  
I would like to know what’s happening here  
If you can help me, I’ll appreciate you

 ![Error](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/e/b/ebcfd135f32ef3906dade8fec753dcc80116f608.png)

This is my code:

```
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) 
from Revit import 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 * 
from Autodesk.Revit.UI import *   

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

Curves = IN[0]
FloorType= UnwrapElement(IN[1])
Level = UnwrapElement(IN[2])
Is_Structural=IN[3]
OpeningCurves=IN[4]

RVT_Opening = CurveArray()

for i in OpeningCurves:

	RVT_Opening.Append(i.ToRevitType())

#Convertir RVT curves a CurveArray
RVT_Curves = CurveArray()

for i in Curves:
	
	RVT_Curves.Append(i.ToRevitType())

TransactionManager.Instance.EnsureInTransaction(doc)

#Creación del Piso
Floor = doc.Create.NewFloor(RVT_Curves,FloorType,Level,Is_Structural)

Opening = doc.Create.NewOpening(Floor,RVT_Opening,True)

TransactionManager.Instance.TransactionTaskDone()	
	
OUT = Floor
```

---

<div class="post-metadata">

**Author:** ![Joelmick](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/joelmick/32/93148_2.png) [@Joelmick](https://forum.dynamobim.com/u/Joelmick)\
**Post date:** [April 15, 2020, 4:09pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/3 "2020-04-15T16:09:51Z")

</div>

Okay never mind my other answer.

The solution is simple. You have to regenerate the current Document after making the floor and before making the opening. This way the document registers the new Floor.

```
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) 
from Revit import 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 * 
from Autodesk.Revit.UI import *   

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

Curves = IN[0]
FloorType= UnwrapElement(IN[1])
Level = UnwrapElement(IN[2])
Is_Structural=IN[3]
OpeningCurves=IN[4]

RVT_Opening = CurveArray()

for i in OpeningCurves:

	RVT_Opening.Append(i.ToRevitType())

#Convertir RVT curves a CurveArray
RVT_Curves = CurveArray()

for i in Curves:
	
	RVT_Curves.Append(i.ToRevitType())

TransactionManager.Instance.EnsureInTransaction(doc)

#Creación del Piso
Floor = doc.Create.NewFloor(RVT_Curves,FloorType,Level,Is_Structural)

#Regenerate the Document to make sure the Document Registers the Floor
doc.Regenerate()

#Creación del Piso
Opening = doc.Create.NewOpening(Floor,RVT_Opening,True)

TransactionManager.Instance.TransactionTaskDone()	

	
OUT = Floor

```

I added one line:  
`doc.Regenerate()`

---

<div class="post-metadata">

**Author:** ![niojuri22](https://avatars.discourse-cdn.com/v4/letter/n/5f8ce5/32.png) [@niojuri22](https://forum.dynamobim.com/u/niojuri22)\
**Post date:** [April 15, 2020, 7:29pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/4 "2020-04-15T19:29:57Z")

</div>

Thank you!!!  
It works!!!

---

<div class="post-metadata">

**Author:** ![kevin3](https://avatars.discourse-cdn.com/v4/letter/k/8c91f0/32.png) [@kevin3](https://forum.dynamobim.com/u/kevin3)\
**Post date:** [April 20, 2023, 7:50am UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/5 "2023-04-20T07:50:57Z")

</div>

Hello, I am a beginner in dynamo, I want to make a circular opening on a circular floor. What inputs did you put at “IN0” and “opening curves” ? because I entered a circle that represents my floor and a smaller circle that represents my opening. This does not work.

Thanks

---

<div class="post-metadata">

**Author:** ![c.poupin](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/c.poupin/32/89152_2.png) [@c.poupin](https://forum.dynamobim.com/u/c.poupin)\
**Post date:** [April 20, 2023, 7:56am UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/6 "2023-04-20T07:56:26Z")

</div>

Hi @kevin3

for each loop (outer and inner) try with 2 joined arcs instead of 1 circle

---

<div class="post-metadata">

**Author:** ![kevin3](https://avatars.discourse-cdn.com/v4/letter/k/8c91f0/32.png) [@kevin3](https://forum.dynamobim.com/u/kevin3)\
**Post date:** [April 21, 2023, 1:00pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/7 "2023-04-21T13:00:59Z")

</div>

Hello  
Thank you for your help, unfortunately it still doesn’t work. It shows me an error without this line “for i in OpeningCurves:” @c.poupin

Sincerely

---

<div class="post-metadata">

**Author:** ![c.poupin](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/c.poupin/32/89152_2.png) [@c.poupin](https://forum.dynamobim.com/u/c.poupin)\
**Post date:** [April 21, 2023, 8:31pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/8 "2023-04-21T20:31:34Z")

</div>

@kevin3

here is an example with arcs

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/a/baae22e9f8440fc95ee56e3877aec6eb0ede0043.png)

update code for Revit 2022+

```auto

import clr
import sys
import System
clr.AddReference("System.Numerics")
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

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

#import net library
from System import Array
from System.Collections.Generic import List, IList, Dictionary

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

#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
app = uiapp.Application
sdkNumber = int(app.VersionNumber)

curves = IN[0]
floorType= UnwrapElement(IN[1])
level = UnwrapElement(IN[2])
is_Structural=IN[3]
openingCurves=IN[4]

TransactionManager.Instance.EnsureInTransaction(doc)

#
if sdkNumber > 2021:
	outer_Curves = List[DB.Curve]([i.ToRevitType() for i in curves])
	inner_Curves = List[DB.Curve]([i.ToRevitType() for i in openingCurves])
	#
	outer_curveloop = CurveLoop.Create(outer_Curves)
	inner_curveloop = CurveLoop.Create(inner_Curves)
	floor = Floor.Create(doc, List[CurveLoop]([outer_curveloop, inner_curveloop]), floorType.Id, level.Id)
else:
	rvt_Curves = CurveArray()
	for i in curves:
		rvt_Curves.Append(i.ToRevitType())
	floor = doc.Create.NewFloor(rvt_Curves, floorType, level, is_Structural)
	#Regenerate the Document to make sure the Document Registers the Floor
	doc.Regenerate()
	#
	rvt_Opening = CurveArray()
	for i in openingCurves:
		rvt_Opening.Append(i.ToRevitType())
	#
	opening = doc.Create.NewOpening(floor, rvt_Opening, True)

TransactionManager.Instance.TransactionTaskDone()	

OUT = floor

```

---

<div class="post-metadata">

**Author:** ![christian.stan](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/christian.stan/32/166296_2.png) [@christian.stan](https://forum.dynamobim.com/u/christian.stan)\
**Post date:** [April 22, 2023, 9:26am UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/9 "2023-04-22T09:26:57Z")

</div>

Hello, you added this [namespace](https://learn.microsoft.com/en-us/dotnet/api/system.numerics?view=dotnet-uwp-10.0) ( `clr.AddReference("System.Numerics")` ), but you don’t use it here in the rest of the code (that’s right)  
this is an improved boiler plate code

As a curiosity  
Thank you

Cordially  
christian.stan

---

<div class="post-metadata">

**Author:** ![c.poupin](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/c.poupin/32/89152_2.png) [@c.poupin](https://forum.dynamobim.com/u/c.poupin)\
**Post date:** [April 22, 2023, 10:47pm UTC](https://forum.dynamobim.com/t/create-floor-with-openings-python-dynamo/49266/10 "2023-04-22T22:47:37Z")

</div>

Hi,

just because I was testing Ironpython3

_and The Python `int` type in IronPython 3 is implemented as `System.Numerics.BigInteger` (and not as `System.Int32` as it was in IronPython 2)_

so a collection with a cast of `int` become list of BigInteger

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/1/b/1ba7500012d0dc6890d7533f244b3b03d6a88cec.png)

comparison with Ironpython2 and CPython3/PythonNet

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/0/5/05aeb5207dbe28c4580e1824e1a0c648bb034c47.png)

more explanation here

> <https://github.com/IronLanguages/ironpython3/blob/master/Documentation/upgrading-from-ipy2.md#int-type>
