2020-08-01
11:26 AM
- last edited on
2021-09-15
09:55 AM
by
Noemi Balogh
2020-08-01 02:28 PM
from archicad import ACConnection
conn = ACConnection.connect()
assert conn
acc = conn.commands
act = conn.types
acu = conn.utilities
# get all zones, assign to `elements`
elements = acc.GetElementsByType('Zone')
# prop now holds the GUID of the requested property
prop = acu.GetBuiltInPropertyId('Zone_ZoneName')
# returns a list of all the property values of the elements in question
propval_list = acc.GetPropertyValuesOfElements(elements, [prop])
# replace all occurrences of the first string with the second one
# (this is just a very basic example, of course you could do
# much more sophisticated versions)
zonename_to_replace = "Wohnen"
zonename_new = "Main Room"
for i, elem in enumerate(elements):
# propstr holds the actual string of the current zone name
propstr = propval_list.propertyValues[0].propertyValue.value
# check if we got a match
if propstr == zonename_to_replace:
# if so, construct a new prop value
new_val = act.ElementPropertyValue(
elem.elementId, prop, act.NormalStringPropertyValue(zonename_new))
# set the zone name
acc.SetPropertyValuesOfElements([new_val])
2020-08-01 02:55 PM
2022-03-22 11:45 AM
Hi,
first of all thanks for sharing knowledge. Really useful for beginner like me.
I tried to run your Zone renaming code but I'm getting error:
Traceback (most recent call last):
File "C:\Users\user\Downloads\zone rename.py", line 28, in <module>
propstr = propval_list.propertyValues[0].propertyValue.value
AttributeError: 'list' object has no attribute 'propertyValues'
What am i dioing wrong?
Using Archicad 24, 6004 and Python 3.9.1. and
Best regards,
Tom
2022-10-24 06:10 PM
Hello runxel,
I am looking for a script, how can I replace zone number actually through a custom property, could you maybe help?