Тема: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Как перевести в спецификацию КОЛИЧЕСТВО (в штуках) одинаковых блоков с чертежа автоматически (спецификация Atable) прогу на лиспе. Несказанно устал переносить вручную и отслеживать, если происходят изменения в чертеже. ОГРОМЕННОЕ СПАСИБО.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

ATable от Alexander Shchetinin создает безымянный блок, в котором содержимое не атрибуты, а ТЕКСТы.
1.Если Вы сами считываете с чертежа в ATable свои атрибуты, то необходимо составлять спецификацию в самом конце работы (или например автоматически в конце сеанса, вытирая предыдущую спецификацию).
2.Мы например считываем с чертежа атрибуты в ГОСТовскую спецификацию элементов чертежа, экспликация  или окна-двери и т.д. (для арх-стр. чертежей) или 9-ти позиционную спецификацию (для оборудования) в самом конце работы.
Отследить динамически изменение на чертеже? Это возможно, ИМХО, только когда весь чертеж "один объект". Я занимаюсь архитектурно-строительным проектированием и думаю что здесь это будет не скоро. В машиностроении? См.MechaniCS

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

так как это сделать в А Table в конце сеанса

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Написать самому или применить чужую программу, которая сама заполнит спецификацию. Тогда скорее всего это будет не ATable.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Если она у Вас есть то будте добры скинте поглядеть. Спасибо.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Поглядеть можно ГОСТовскую спецификацию элементов чертежа, экспликациИ помещений  или спец. окна-двери и др. (для арх-стр. чертежей) См.ДЕМО-версию ПАРКС http://www.arcada.com.ua/infot/po/arch/parks.html
А какие спецификации интересуют Вас?

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

электрику

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Электрические спецификации - это целый раздел проекта, посмотри Project Studio Електрика CS. Есть на эту программу демка у CS.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Добавляю. Если нужно просто считывать с чертежа количество светильников или выключателей, датчиков и т.д., то моё сообщение Alan (2004-02-13 10:45:55)  пункт 2 остается в силе.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

А как считать с чертежа количество светильников и т.д. в ГОСТовскую спецификацию элементов 9-ти позиционную

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Каждый светильник имеет атрибуты, в которых Вы можете занести (можно и не заносить) характеристики, необходимые для   ГОСТовской 9-ти позиционной спецификации. Откуда они беруться? От Вас! То ли из имеющейся базы с помощью какой-либо программы, то ли в процессе расстановки Вами в диалоге, то ли можно отдельной командой маркировки приборов. Считать количество светильников, ну это самое простое. Программа считывает приборы по маске командой ATTEXT и заполняет спецификацию, когда страничка заканчивается, начинает следующую и т.д.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Если возможно попорядку, как выглядеть в коммандах будет. Спасибо.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

У нас сделано так как я написал 16-02.
Нумерую то что написал там:
1. Каждый блок (например, светильник) имеет атрибуты для ГОСТовской 9-ти позиционной спецификации
2. Блоки находятся в своей директории
3. Блоки расставляются пользователем, вызывая их из пиктографического меню
4. Считаем количество блоков по маске командой ATTEXT в файл
5. Команда на ЛИСПе обрабатывает файл и заполняет спецификацию аж в 9 позиций или в другую, мы используем этот простой способ в нескольких вариантах.
6. Добавляю. Для более простого способа заполнения библиотеки блоков используется тоже команда на ЛИСПе
7. Добавляю. И всё это у нас применено почти по всем специальностям. Может быть чересчур просто, но у нас пользователи простые, не продвинутые.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

А попробуйте бомку использовать...

bom.lsp:
 ;Copyright 2000 EMT Software, Inc.
 ;
(defun C:BOMM (/ #SSET #ENT #LST #IPT #SPT #UL #DX #DY #LS #CS
                #CNT #NUM #DATA-M #TXT #TBOX-M #PT-LST #PTS1 #PTS2
                #TMP #TMP-M #TMP-S #TMP-C #X #XA #XX dcl_id #STAT @MAINDIALOG)
  (defun @MAINDIALOG  (/ @DIALOG)
    (defun @DIALOG  ()
      (if (not (new_dialog "blk_tbl" dcl_id)) (quit))
      (set_tile "lnsp" (rtos #LS))
      (set_tile "clsp" (rtos #CS))
      (action_tile "lnsp" "(setq #LS (atof $value))")
      (action_tile "clsp" "(setq #CS (atof $value))")
      (start_dialog))
    (setq dcl_id (load_dialog "bom"))
    (if dcl_id
      (@DIALOG)
      (alert "Unable to load Bom dialog.")))
  (setq #LS   (getvar "textsize")
        #CS   (getvar "textsize"))
  (setq #STAT (@MAINDIALOG))
  (if (> #STAT 0)
    (progn
      ; create a list of attributes - < << Tag . Value > < Tag . Value >> >
      (setq #SSET (ssget (list (cons 0 "INSERT")))
            #CNT  0)
      (if (not #SSET)
        (setq #NUM 0)
        (setq #NUM (sslength #SSET)))
      (while (/= #CNT #NUM)
        (setq #ENT (entnext (ssname #SSET #CNT))
              #TMP nil)
        (if #ENT
          (if (= (cdr (assoc 0 (setq #ENT (entget #ENT)))) "ATTRIB")
            (while (/= (cdr (assoc 0 #ENT)) "SEQEND")
              (if (= (cdr (assoc 0 #ENT)) "ATTRIB")
                (setq #TMP (append #TMP
                                   (list (cons (cdr (assoc 2 #ENT))
                                               (cdr (assoc 1 #ENT)))))))
              (setq #ENT (entget (entnext (cdr (assoc -1 #ENT))))))))
        (if #TMP
          (setq #LST (append #LST (list #TMP))))
        (setq #CNT (1+ #CNT)))
      (if #LST
        (progn
          ; count the blocks and add to the list
          (setq #TMP-S '()
                #TMP-C '())
          (foreach #X #LST
            (if (not (member #X #TMP-S))
              (progn
                (setq #CNT   0
                      #TMP   #LST
                      #TMP-M #TMP)
                (while #TMP-M
                  (if (member #X #TMP-M)
                    (setq #CNT (1+ #CNT)))
                  (setq #TMP-M (cdr (member #X #TMP-M))))
                (if (> #CNT 0)
                  (setq #TMP-S (append #TMP-S (list #X))
                        #TMP-C (append #TMP-C (list (append (list (cons "К-во" (itoa #CNT))) #X))))))))
          (setq #LST #TMP-C)
          ; sort list into columns
          (setq #DATA-M '())
          ; setup 1st element and column list
          (foreach #X (car #LST)
            (setq #DATA-M (append #DATA-M (list (list (car #X) (cdr #X))))))
          (setq #LST (cdr #LST))
          (foreach #X #LST
            ; add any new columns to #DATA-M
            (foreach #XA #X
              (if (not (assoc (car #XA) #DATA-M))
                (progn
                  (setq #TMP (list (car #XA))
                        #CNT (length (car #DATA-M)))
                  (repeat (- #CNT 1)
                    (setq #TMP (append #TMP (list ""))))
                  (setq #DATA-M (append #DATA-M (list #TMP))))))
            ; process through the list of columns started above
            (foreach #XX #DATA-M
              (if (assoc (car #XX) #X)
                (setq #DATA-M (subst (append (assoc (car #XX) #DATA-M)
                                             ; add just the value to list
                                             (list (cdr (assoc (car #XX) #X))))
                                     (assoc (car #XX) #DATA-M)
                                     #DATA-M))
                (setq #DATA-M (subst (append (assoc (car #XX) #DATA-M)
                                             ; add null place setting to list
                                             (list ""))
                                     (assoc (car #XX) #DATA-M)
                                     #DATA-M)))))
          ; find the longest string in each column.
          (setq #CNT '()  #TBOX-M '())
          (foreach #X #DATA-M
            ; max. number of chr in column.
            (setq #CNT (strlen (car #X)))
            (foreach #XX #X
              (setq #NUM (strlen #XX)
                    #CNT (max #CNT #NUM)))
            ; convert to <textbox> coordinates.
            (setq #TXT "")
            (repeat (+ #CNT 4)
              (setq #TXT (strcat #TXT "X")))
            (setq #TBOX-M (cadr (textbox (list (cons 1 #TXT)))))
            ; store it with the column lists.
            (setq #TMP-M  (car #DATA-M)
                  #DATA-M (cdr #DATA-M))
            (setq #TMP-M  (append (list #TBOX-M) #TMP-M)
                  #DATA-M (append #DATA-M (list #TMP-M))))
          ; create table.
          (setq #UL  (getpoint "\nPick Upper Left corner for the Table: ")
                #SPT (list (+ (car #UL) #CS) (- (cadr #UL) #LS) 0.0)
                #TMP-M '())
          ; each member in #DATA-M = < textbox point, list of strings... >
          (foreach #X #DATA-M
            (setq #TMP (car #X)
                  #X   (cdr #X)
                  #DX  (car #TMP)
                  #DY  (cadr #TMP)
                  #IPT (list (car #SPT) (- (cadr #SPT) #DY) 0.0)
                  #SPT (list (+ (car #SPT) (+ #DX #CS)) (cadr #SPT) 0.0)
                  #PT-LST '())
            (foreach #XX #X
              (entmake (list (cons 0 "TEXT") (cons 10 #IPT) (cons 40 #DY) (cons 1 #XX)))
              (setq #PT-LST (append #PT-LST (list #IPT))
                    #IPT (list (car #IPT) (- (cadr #IPT) (+ #DY (* #LS 2.0))) 0.0)))
            ; a list of lists of insert points for horz. lines later.
            (setq #TMP-M (append #TMP-M (list #PT-LST)))
            ; vert. line between columns.
            (entmake (list (cons 0 "LINE")
                           (cons 10 (list (- (car #SPT) #CS) (cadr #UL) 0.0))
                           (cons 11 (list (- (car #SPT) #CS) (+ (cadr #IPT) (+ #DY #LS)) 0.0)))))
          ; get the start points and end points for horz. lines.
          (setq #PTS1 (car #TMP-M)
                #PTS2 (last #TMP-M))
          (foreach #X #PTS1
            (if #PTS2
              (entmake (list (cons 0 "LINE")
                             (cons 10 (list (- (car #X) #CS) (- (cadr #X) #LS) 0.0))
                             (cons 11 (list (+ (caar #PTS2) #DX) (- (cadar #PTS2) #LS) 0.0)))))
            (setq #PTS2 (cdr #PTS2)))
          ; draw top and left lines.
          (setq #IPT (list (+ (car #IPT) (+ #DX #CS)) (cadr #IPT) 0.0))
          (entmake (list (cons 0 "LINE")
                         (cons 10 #UL)
                         (cons 11 (list (car #UL) (+ (cadr #IPT) (+ #DY #LS)) 0.0))))
          (entmake (list (cons 0 "LINE")
                         (cons 10 #UL)
                         (cons 11 (list (- (car #IPT) #CS) (cadr #UL) 0.0))))))))
  (if dcl_id (unload_dialog dcl_id))
  (princ))
;;; Uncomment for the language needed.
;(princ "\n\nBOM?р?ь?Н???Д?J?n")  ; For Japanese.
(princ "\n\nType BOM to start.") ; For English.
(princ)
bom.dcl :
blk_tbl : dialog {
   label = "Table Settings";
   : column {
      : edit_box {
         edit_width = 20;
         key = "lnsp";
         label = "Line Spacing:";
      }
      : edit_box {
         edit_width = 20;
         key = "clsp";
         label = "Column Spacing:";
      }
   }
   ok_cancel;
}

Мне нравится.
Ну когда аттачить можно  будет!...

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Красивое программирование!

Мне нравится.

Мне тоже. Решает проблему считывания значений атрибутов ВЫБРАННЫХ блоков в ТАБЛИЦУ (или диалоговое окно). Можно конечно добавить модуль сортировки по маске... Но в Автокаде команда ATTEXT делает это одним вызовом, начиная с версии уж не помню какой. Это (применение ATTEXT) конечно типичный инженерный способ. Но! Всего одна строка вызова и подготовленная заранее только для необходимых атрибутов строка шаблона, дают искомый для СПЕЦИФИКАЦИИ результат.

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Как запустить прогу? И в какой версии Акада вы? Не как запустить не могу. Спасибо!

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Александр! Поместите файлы bom.lsp и bom.dcl в рабочую директорию (там где находится файл Вашего чертежа, чтобы не морочить Вам голову с путями). Наберите в ком.строке (load "bom"), затем bomm, далее по тексту. Удачи!

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Не идет прога. Оба файла лежат в директории с рабочим файлом
Command: (load "bom")
nil
Command: bomm
Unknown command "BOMM".  Press F1 for help.
загружаю через АUTO lisp вот такое дело выдает
bom.LSP успешно загружен.
Command:
Команда:
Command: bomm
Unknown command "BOMM".  Press F1 for help.
где ошибаюсь не пойму. Вот эту всю прогу копирую со странички в редактор Visual Lisp сохраняю с расшир. .lsp и dcl загружаю и вот такая беда, как быть. Спасибо!

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Не идет прога. Оба файла лежат в директории с рабочим файлом

пути надо прописать в tools/options/file/support file....

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

то Александр
кажись в слове bom одно "m"

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Не идет. Вообще то в любом АСad е идет или дополнительно надо что нибудь. Загружаю, вот такой ответ получаю
Command: _appload bom.LSP успешно загружен.
Command:
Команда:
Command: bomm
Unknown command "BOMM".  Press F1 for help.
Command: bom
Unknown command "BOM".  Press F1 for help.
После прописки путей, что дальше подскажите пошагово. Спасибо!

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

У меня всё работало, поэтому пробую пошагово, что я сделал:
1. В файл bom.LSP скопировал от:
(defun C:BOMM (/ #SSET ..... включая последниии три строки
;;; Uncomment for the language needed.
;(princ "\n\nBOM?р?ь?Н???Д?J?n")  ; For Japanese.(princ "\n\nType BOM to start.") ; For English.(princ)
2. В файл bom.dcl  скопировал от:
blk_tbl : dialog {.... до   ok_cancel;}
3. Файлы bom.LSP и bom.dcl поместил   в директории с рабочим файлом чертежа.
4. Набрал (load "bom")
Получил сообщения:
BOM?&#240;?&#252;?&#205;???&#196;&#352;J&#381;n
Type BOM to start.
5. Набрал: BOMM
И пошло: выберите объекты..  и т.д.
Результаты анализа работы см  Alan (2004-02-18 11:27:16)

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Молодцы.
Обязательно попробую.
Давно сделал программу, которая считывает три атрибута из блока, сортирует и генерит таблицу на листе. Это делалось для вытаскивания данных из схем и создания перечня элементов.
Сейчас практически этим не пользуюсь.
Почему?
ОТСУТСТВУЕТ обратная связь. Таблицу создал, подправил аттрибут. Генери все поновой.
Чаще проще подправить в таблице (спецификации) сразу. А результат - аттрибуты не соответствуют таблице...

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Все загрузил по рекомендации.Type BOM to start!!! Задал команду BOMM! Задал кол-ко строк и солбцов! Выбрал объкты рамкой. Он выдал "Найдено столько-то" И чего дальше? Где эту спецификацию искать? Или её нужно создать сначала? Где и как?Посоветуйте пожалуйста!

Re: Как перевести в спецификацию количество одинаковых блоков с чертежа автоматом?

Такая же и у меня история,
>> И чего дальше? Где эту спецификацию искать? Или её нужно создать сначала? Где и как?