Linijų rūšiavimo pagal ilgį ir spalvą pavyzdys.
Pastaba: spalva 'bylayer' gražins klaidą, todėl visoms linijoms reikia priskirti spalvas ne pagal sluoksnį.
(defun c:test ( / a my-dbf)
(setq my-dbf (strcat (getvar "dwgprefix") "SQLiteLsp-test-" (getvar "program")"-" (rtos (atof (getvar "acadver")) 2 2) ".db"))
(if (findfile my-dbf)
(progn
(DSQL_OPEN my-dbf)
(DSQL_DML my-dbf "DELETE FROM Lines;")
(DSQL_CLOSE my-dbf)
(vl-file-delete my-dbf)
))
(DSQL_OPEN my-dbf)
(DSQL_QUERY my-dbf "PRAGMA foreign_keys = ON;")
(DSQL_QUERY my-dbf "PRAGMA foreign_keys;")
(DSQL_DML my-dbf "CREATE TABLE Lines (Id int, N int, Handle char(16), LineLength int, Color int, Layer char(255));")
(DSQL_CLOSE my-dbf)
(if (setq ss (ssget "_X"
'(
(0 . "LINE")
)
))
(progn
(setq n (sslength ss) which 0)
(DSQL_OPEN my-dbf)
(DSQL_DML my-dbf "BEGIN TRANSACTION;")
(DSQL_CMPSTMT my-dbf "INSERT INTO Lines VALUES (?, ?, ?, ?, ?, ?);")
(repeat n
(setq line (ssname ss which))
(DSQL_STMTBIND
which
0
(cdr (assoc 5 (entget line)))
(fix (distance (cdr (assoc 10 (entget line)))(cdr (assoc 11 (entget line)))))
(cdr (assoc 62 (entget line)))
(cdr (assoc 8 (entget line)))
)
(setq which (+ which 1))
)
(DSQL_DML my-dbf "COMMIT TRANSACTION;")
(DSQL_STMTFNL)
(DSQL_CLOSE my-dbf)
(setq which 0)
(DSQL_OPEN my-dbf)
(setq lst (DSQL_ASSOCQUERY my-dbf "SELECT DISTINCT Lines.LineLength, Lines.Color, Lines.Layer FROM Lines ORDER BY Lines.LineLength DESC, Lines.Color ASC;"))
(setq which_dif 1)
(foreach dif lst
(setq LineLength (cdr (assoc "LineLength" dif)) Color (cdr (assoc "Color" dif)) Layer (cdr (assoc "Layer" dif)))
(setq lst-id (cdr (DSQL_QUERY my-dbf (strcat "SELECT DISTINCT Lines.Id FROM Lines WHERE Lines.LineLength=" (itoa LineLength) " AND Lines.Color=" (itoa Color) " AND Lines.Layer=" Layer ";"))))
(foreach it lst-id
(DSQL_DML my-dbf (strcat "UPDATE Lines SET N=" (itoa which_dif) " WHERE Id=" (itoa (car it)) ";"))
)
(setq which_dif (1+ which_dif))
)
(DSQL_CLOSE my-dbf)
);p
);i
(princ)
)
(princ)