Так они же сгруппированы в верхнем отчете (если Отчёт ==1), и сортировка по “Возрастанию”. В колонке “Е” считаем количество одинаковых (сгруппированных) строк
;тестовая команда для демонстрации
(defun c:calc_array ( / a nadp)
(setq a (car (entsel)))
(while (not (setq nadp (array_params a)))
(print "Неподходящий объект")
(setq a nil)
(setq a (car (entsel)))
)
nadp
)
;Возвращает список '(строк столбцов уровней) , если массив или nil
;Параметр a - имя элемента в формате entget
(defun array_params ( a / da b db i j k)
(setq da (if (= (type a) 'ENAME) (entget a)))
(setq b (cdr (cadr (member (cons 102 "{ACAD_REACTORS") da))))
(setq db (if b (entget b)))
(setq b (cdr (assoc 330 db)))
(setq db (if b (entget b)))
(setq i (cdr (cadddr (member (cons 1 "Rows") db))))
(setq j (cdr (cadddr (member (cons 1 "Items") db))))
(setq k (cdr (cadddr (member (cons 1 "Levels") db))))
(if (and i j k) (list i j k))
)
С помощью лиспа оказалось довольно заковыристо.
Параметры массива доступны через реактор.
Теоретически к массиву может быть подцеплен еще какой-нибудь реактор, и такого случая (несколько реакторов) я не исследовал. Одна надежда, что вряд ли в другого типа реакторах могут быть одновременно параметры Rows, Items и Levels.
Здесь:
1 - запрос на указание массива
2 - количество строк
3 - количество столбцов
Конечно, эти параметры правильнее сформировать заранее.
Ну и отключить ЭХО команд.
ЗЫ. Например, так
;тестовая команда для изменения параметров массива
(defun c:edit_array ( / a nadp i j)
(while (setq a (car (entsel)))
(if (setq nadp (array_params a))
(progn
(setq i (getint (strcat
"Введите количество строк <"
(itoa (car nadp))
"> : ")))
(if (not i) (setq i (car nadp)))
(setq j (getint (strcat
"Введите количество столбцов <"
(itoa (cadr nadp))
"> : ")))
(if (not j) (setq j (cadr nadp)))
(setvar "CMDECHO" 0)
(command "_ARRAYEDIT" a "_rows" i "" "" "_Columns" j "" "")
(setvar "CMDECHO" 1)
)
(print "Неподходящий объект")))
(prin1)
)
;Возвращает список '(строк столбцов уровней) , если массив или nil
;Параметр a - имя элемента в формате entget
(defun array_params ( a / da b db i j k)
(setq da (if (= (type a) 'ENAME) (entget a)))
(setq b (cdr (cadr (member (cons 102 "{ACAD_REACTORS") da))))
(setq db (if b (entget b)))
(setq b (cdr (assoc 330 db)))
(setq db (if b (entget b)))
(setq i (cdr (cadddr (member (cons 1 "Rows") db))))
(setq j (cdr (cadddr (member (cons 1 "Items") db))))
(setq k (cdr (cadddr (member (cons 1 "Levels") db))))
(if (and i j k) (list i j k))
)
ЗЫ2. По команде "ARRAYRECT” схема примерно такая же. Необходимо позапускать эту команду в командной строке, запомнить запрашиваемые параметры, а затем в своем скрипте в функции (command “скормить” заранее сформированные уже собственные параметры.
Создать массив получилось с таким синтаксисом:
(command “_ARRAYRECT” ent “” “” rows cols “” rowSpacing colSpacing “_Base” insertPoint “”)
Спасибо за помощь!