Creating FamilyInstance. Problem with setting level parameter

Hello! I am trying to place a family instances above all doors in the project. The problems is that familes created via API does not have ‘Levels’ parameter - iam forced to set New host manualy. And i cant change builtinparameter FAMILY_LEVEL_PARAM because it is read-only(but it should be writeable). Is there any solution for this task? Thx for help…
created with API(elements binds to lowest level):


created manualy:

Python code:

# -*- coding: UTF-8 -*-
import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

curview = uidoc.ActiveGraphicalView
doors = FilteredElementCollector(doc,curview.Id).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
blocks = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_GenericModel).WhereElementIsElementType().ToElements()
for block in blocks:
	fam_name = block.get_Parameter(BuiltInParameter.ALL_MODEL_FAMILY_NAME).AsString()
	if fam_name == 'ARG_2D_ПеремичкаГазобетон':
		block_type=block
		break
TransactionManager.Instance.EnsureInTransaction(doc)
for i in doors:
	level = i.LevelId
	if block_type != None:
		p = i.Location.Point
		v2 = i.HandOrientation
		block_type.Activate()
		newdet=doc.Create.NewFamilyInstance(p, block_type, v2, doc.GetElement(level), Structure.StructuralType.NonStructural)
		offset = newdet.get_Parameter(BuiltInParameter.INSTANCE_FREE_HOST_OFFSET_PARAM)
		offset.Set(0)
		#newdet.get_Parameter(BuiltInParameter.FAMILY_LEVEL_PARAM).Set(level)   -  does not work!!
TransactionManager.Instance.TransactionTaskDone()

Hi Dmytro,

maybe, that value depends on other object, related to the family. Do you have some property that return other table to explore it?

Hi, franciscopossetto!
I can use any other families even with simple extrude body and result is the same.

Have you trying with other newFamilyInstance definition? the one that not specificate the level? Just to be sure that’s not a problem with the method. Maybe you can set the level on that way. Just an idea.

Same result with any other methode… Parameter is read-only
https://www.revitapidocs.com/2016/451ee414-cea0-e9bd-227b-c73bc93507dd.htm

Could you share the error?

Thx for trying to help, the error is:

IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
Traceback (most recent call last):
File “”, line 32, in
Exception: The parameter is read-only.

Is weird, should works.Could you share the family? I can try here and see in RevitLookup.

Ofcourse, it is simple generic model family
ARG_2D_ПеремичкаГазобетон.rfa (348 KB)

I tried with R2019 and the result is different:

I wonder if Schedule LEvel and Work Plane represents your two parameter “Host” and “Level”?

For those that land here:

I had a slightly different problem at first. The familyinstance I created programatically didn’t have a level parameter at all.
image
Where, in theory, it should have looked like this
image

Turns out I was using the wrong Create.NewFamilyInstance method. I was using NewFamilyInstance(XYZ, FamilySymbol, StructuralType), when I should have been using NewFamilyInstance(XYZ, FamilySymbol, Element, StructuralType) with the level for Element. Which you can see the person above did.

Now, onto the issue OP was having.
For one reason or another, when you create a familyinstance using NewFamilyInstance(XYZ, FamilySymbol, Element, StructuralType), it actually creates a second parameter also named Level that is not read only. This is the one you want to edit, instead of BuiltInParameter.FAMILY_LEVEL_PARAM.