After writing the last post, I was wondering if I could use DuckDB to query AutoCAD data, I.e. Layers
from pyrx import Ap, Db, Ed, Ge
from collections import defaultdict
import duckdb
def duckdb_relation(raw_data : dict) -> duckdb.DuckDBPyRelation:
df_data = duckdb.values(raw_data)
return df_data.select("unnest(columns(*))").select("unnest(columns(*))")
@Ap.Command()
def doit():
db = Db.curDb()
lt = db.layerTable()
raw_data = defaultdict(list)
for name, id in lt:
ltr = Db.LayerTableRecord(id)
clr = ltr.entityColor().makeTrueColor()
raw_data["Name"].append(name)
raw_data["On"].append(ltr.isHidden() == False)
raw_data["Locked"].append(ltr.isLocked())
raw_data["Frozen"].append(ltr.isFrozen())
raw_data["Color"].append(clr.toHTMLColor())
res_rel = duckdb_relation(raw_data)
filtered_rel = res_rel.filter("Color == '#FF0000'").select("Name")
names_list = [row[0] for row in filtered_rel.fetchall()]
print(f"\nFiltered Red Layers: {names_list}")
#result Filtered Red Layers: ['ANO2', 'A-PFIX', 'NEW_DOORS', 'NEW_STAIRWELL',
#'NEW_FIRE_EXTINGUISHER', 'A-FURN-P-FILE', 'WKSURF', 'A-FURN-P-PHWL-70', 'A-FURN',
#'A-FURN-P-FILE-T', 'A-FURN-P-PNLS', 'ZAXIS', 'DESK-VIEW', 'DESK-TYPE', 'DESK-OTHER',
# DESK-FINISH', 'DESK-PROD_NO', 'DESK-DRWCFG', 'DESK', 'A-FURN-P-PNLS-53']
No comments:
Post a Comment