Saturday, June 27, 2026

Using DuckDB for expressions.

 

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

Using DuckDB for expressions.

  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...