Атрибуты прямоугольного массива Столбцы и Ряды для отчета

Так они же сгруппированы в верхнем отчете (если Отчёт ==1), и сортировка по “Возрастанию”. В колонке “Е” считаем количество одинаковых (сгруппированных) строк

Те, которые “НЕ УЧТЕНЫ” (Отчёт != 1) те не попадают просто в выборку и, соответственно, не считаются.

Если, допустим, блоки с одинаковым “Артикулом” все имеют “Отчёт != 1”, то и номер не присвоится.

Спасибо!!

1 лайк

Возможно Вас смущает текст “Не учтён”? Это не относится к Атрибутам блока, а передаётся из таблицы.

Так вы сами можете изменить значение параметра или в форме

Или в свойствах

3 лайка

А не подскажете, как добраться до параметров массива через лисп?

Вы бы сразу @EdwardSt тегнули :slight_smile:

1 лайк


Вроде так должно ему уведомление прийти.

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.

2 лайка

Круто!

А есть способ программно изменить количество рядов и столбцов?

(command “ARRAYEDIT”) с аргументами не срабатывает, ждёт ввода от пользователя.

И как вообще создать массив с заданными параметрами?

(command “ARRAYRECT”) тоже ждёт ввода данных.

Естественно, штатные команды требуют параметр, что и видно в командной строке

Для изменения параметров уже присутствующего массива можно использовать следующую конструкцию:


Здесь:
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 “скормить” заранее сформированные уже собственные параметры.

2 лайка

Создать массив получилось с таким синтаксисом:
(command “_ARRAYRECT” ent “” “” rows cols “” rowSpacing colSpacing “_Base” insertPoint “”)
Спасибо за помощь!

1 лайк