Как получить спецификацию (таблицу с характеристиками) выделенных объектов? - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как получить спецификацию (таблицу с характеристиками) выделенных объектов?

Как получить спецификацию (таблицу с характеристиками) выделенных объектов?

Ответ
Поиск в этой теме
Непрочитано 04.09.2014, 10:45
Как получить спецификацию (таблицу с характеристиками) выделенных объектов?
Taurustau
 
инженер-технолог
 
Регистрация: 18.03.2014
Сообщений: 76

Доброго времени суток.
Меня интересует как можно автоматически получить спецификацию выделенных на чертеже объектов. Хочется чтобы после выделения объектов AutoCAD вывел спецификацию или таблицу в которой будут указаны характеристики выделенных объектов, как минимум имя и количество для блоков и содержание для текстовых элементов. И что бы потом эту информацию можно было бы перенести в Exel.
Просмотров: 10463
 
Непрочитано 11.09.2014, 19:33
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Taurustau Посмотреть сообщение
В моем понимании, нужна команда, функция или программа которая будет сама проставлять номера подряд всем выделенным блокам (в виде выноски), при этом проставлять одинаковые номера одинаковым блокам. А при излечении данных информация о присвоенном номере (фактически сам номер) должна выводится в отдельный столбец.
это точно спецификация, а не таблица технологического оборудования?
Сергей812 вне форума  
 
Непрочитано 11.09.2014, 20:46
#22
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408


Цитата:
Сообщение от Taurustau Посмотреть сообщение
Нумерация оборудования в спецификации является частью этой самой спецификации.
Ни фига! Нумерация оборудования есть всего лишь исходные данные. А уж как эти данные будут обрабатываться и структурироваться - совсем иная песня.
Цитата:
Сообщение от Taurustau Посмотреть сообщение
В моем понимании, нужна команда, функция или программа
Эти вопросы либо в "Программирование", либо (учитывая следующие слова:
Цитата:
Сообщение от Taurustau Посмотреть сообщение
будет сама проставлять номера подряд всем выделенным блокам (в виде выноски), при этом проставлять одинаковые номера одинаковым блокам. А при излечении данных информация о присвоенном номере (фактически сам номер) должна выводится в отдельный столбец.
) - то это в "Поиск исполнителей". А я так подозреваю, что на самом деле вообще надо смотреть в сторону специализированного ПО.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.09.2014, 21:02
#23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Насколько понимаю, речь идет об спецификации технологического оборудования вида.
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.09.2014, 22:38
#24
Taurustau

инженер-технолог
 
Регистрация: 18.03.2014
Сообщений: 76


Спецификация может быть и такой, как по Вашей ссылке, можно получаемый документ назвать таблицей технологического оборудования. Суть от этого не меняется. В итоге должна быть таблица которая содержит информацию о блоках, включая номера присвоенные им какой-либо командой автоматически.
Taurustau вне форума  
 
Непрочитано 11.09.2014, 23:01
#25
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


1. Тип оборудования и номер блока не связаны жестким однозначным условием между собою?
2. Каждый тип оборудования представлен отдельным блоком?

Последний раз редактировалось Сергей812, 11.09.2014 в 23:10.
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.09.2014, 23:16
#26
Taurustau

инженер-технолог
 
Регистрация: 18.03.2014
Сообщений: 76


Сергей812, На оба вопроса ответ: "Да".

maratovich,
----- добавлено через ~11 мин. -----
Цитата:
Сообщение от maratovich Посмотреть сообщение
Вы сперва такой блок сделайте и приложите для примера (Ваш предыдущий пример не соответствует Вашим требованиям)
Может быть вот такой пример подойдёт ?
Ваш блок тоже подойдет.
Поясните пожалуйста почему пример не соответствует требованиям. В обоих примерах есть атрибуты для извлечения.

Последний раз редактировалось Taurustau, 11.09.2014 в 23:28.
Taurustau вне форума  
 
Непрочитано 12.09.2014, 00:02
#27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Выноски к блокам с атрибутами

Вариант в лоб:
1. Перерабатываете блоки в динамические (если они уже не динамические) с имитацией выноски-атрибута
2. В описаниях блоков при редактировании ставите скрытый атрибут со значением по умолчанию = типу оборудования
3. Используете команду Express Tools "attout" для выгрузки связок: хэндл блока и его атрибутов в текстовой файл
4. Текстовой файл экспортируете в эксель
5. Обрабатываете средствами того же VBA данные в экселе, присваивая одинаковую нумерацию блокам с одинаковым атрибутом - типом оборудования. Заодно попутно можно посчитать и создать список: тип оборудования и его кол-во.
6. Выгружаете измененные данные в текстовой файл (только не трогайте первый столбец с хэндлами при обработке!)
7. Используете команду Express Tools "attin" для загрузки текстового файла с измененными данными обратно в автокад.
8. На основе ранее полученного списка в экселе: тип оборудования и его кол-во - формируете спецификацию.

При таком подходе не понадобиться изучать программирование под автокад, а уж в экселе поиграться с ячейками - это вообще ерунда)

Последний раз редактировалось Сергей812, 12.09.2014 в 00:09.
Сергей812 вне форума  
 
Непрочитано 12.09.2014, 06:44
#28
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Excel... csv и ни каких гвоздей!
trir вне форума  
 
Автор темы   Непрочитано 12.09.2014, 10:03
#29
Taurustau

инженер-технолог
 
Регистрация: 18.03.2014
Сообщений: 76


Сергей812, Звучит ветеевато, много незнакомых слов, но спасибо за вариант, буду разбираться, пробовать.
Taurustau вне форума  
 
Непрочитано 12.09.2014, 10:22
#30
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Taurustau, зря #16 игнорировал, там твоя задача на 90% (кроме вывода в Excel) решена.
Повторяю:

Код:
[Выделить все]
 ;;;=================================================================
;;;
;;; LSTATT.LSP V4.01
;;;
;;; Dйcompte des blocs
;;;
;;; Copyright (C) Patrick_35
;;;
;;;=================================================================
 
(defun c:lstatt(/ choix i js ent fic fil lst n nb nm nombl InputBox liste_att rechercher_nom sel tbl trier txt)
 
  (defun nombl(bl)
    (if (vlax-property-available-p bl 'effectivename)
      (vla-get-effectivename bl)
      (vla-get-name bl)
    )
  )
 
  (defun choix(/ bl js lst nom sel)
    (princ "\nSйlectionnez le(s) bloc(s) а dйnombrer : ")
    (and (ssget (list (cons 0 "insert")))
      (progn
    (vlax-for bl (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
      (or (member (setq nom (nombl bl)) lst)
        (setq lst (cons nom lst))
      )
      (redraw (vlax-vla-object->ename bl) 4)
    )
    (foreach nom lst
      (if js
        (setq js (strcat js "," nom))
        (setq js nom)
      )
    )
    (vla-delete sel)
      )
    )
    js
  )
 
  (defun InputBox (Titre js / ch dcl fil res tmp txt)
    (setq tmp (vl-filename-mktemp "lstatt" nil ".dcl")
      fil (open tmp "w")
      fic "0"
    )
    (foreach txt '(    "lstatt : dialog {"
            "  key = \"titre\";"
            "  alignment = centered;"
            "  is_cancel = true;"
            "  allow_accept = true;"
            "  width = 30;"
            "  : boxed_column {"
            "    label = \"Veuillez donner un nom de bloc ou * pour tous\";"
            "    : row {"
            "      : edit_box {key = \"filtre\";width = 45;}"
            "      : button {key = \"choix\"; label = \">>\";}"
            "    }"
            "    spacer;"
            "  }"
            "  : boxed_column {"
            "    label = \"Nombre d'attributs а prendre en compte\"; "
            "    : edit_box {key= \"att\";}"
            "    spacer;"
            "  }"
            "  spacer;"
            "  : toggle {key = \"fic\"; label = \"Ecrire les rйsultats dans un fichier\";}"
            "  spacer;"
            "  ok_cancel;"
            "}"
         )
      (write-line txt fil)
    )
    (close fil)
    (setq dcl (load_dialog tmp))
    (while (not (member res '(0 1)))
      (new_dialog "lstatt" dcl "")
      (set_tile "titre" titre)
      (set_tile "filtre" js)
      (set_tile "att" nb)
      (set_tile "fic" fic)
      (action_tile "filtre" "(setq js $value)")
      (action_tile "choix"  "(done_dialog 2)")
      (action_tile "att"    "(setq nb $value)")
      (action_tile "fic"    "(setq fic $value)")
      (action_tile "accept" "(done_dialog 1)")
      (action_tile "cancel" "(done_dialog 0)")
      (setq res (start_dialog))
      (and (eq res 2)
       (setq ch (choix))
       (setq js ch)
      )
    )
    (unload_dialog dcl)
    (vl-file-delete tmp)
    (if (member res '(1 2))
      js
      ""
    )
  )
 
  (defun liste_att(att / n lst val)
    (if (< (atoi nb) (length att))
      (progn
    (setq n 0)
    (while (and (< n (atoi nb)) (setq val (nth n att)))
      (setq lst (cons (vla-get-textstring (nth n att)) lst)
        n (1+ n)
      )
    )
    (reverse lst)
      )
      (mapcar 'vla-get-textstring att)
    )
  )
 
  (defun rechercher_nom(val / att nom tbl)
    (setq nom (nombl val))
    (if (eq (vla-get-hasattributes val) :vlax-true)
      (if (member (setq att (vlax-invoke val 'getattributes)) '(nil))
    (list nom)
    (cons nom (liste_att att))
      )
      (list nom)
    )
  )
 
  (defun trier(a b / c n s)
    (setq c 0)
    (while (and (not s) (nth c a))
      (if (eq (nth c a) (nth c b))
    (setq c (1+ c))
    (setq s T)
      )
    )
    (or (nth c a) (setq c 0))
    (< (strcase (nth c a)) (strcase (nth c b)))
  )
 
  (vl-load-com)
  (or (setq nb (getenv "Patrick_35_nb_att"))
    (setq nb "1")
  )
  (if (not (eq (setq nm (InputBox "Dйcompte de blocs V4.01" "*")) ""))
    (progn
      (setq js (strcat "`**," nm))
      (if (ssget (list (cons 0 "INSERT") (cons 2 js)))
    (progn
      (setenv "Patrick_35_nb_att" nb)
      (vlax-map-collection    (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
                '(lambda (x)
                  (if (wcmatch (strcase (car (setq js (rechercher_nom x)))) (strcase nm))
                    (if (eq (vla-get-objectname x) "AcDbMInsertBlock")
                      (repeat (* (vla-get-columns x) (vla-get-rows x))
                    (setq tbl (cons js tbl))
                      )
                      (setq tbl (cons js tbl))
                    )
                  )
                )
      )
      (vla-delete sel)
      (while tbl    
        (setq n   (length tbl)
          js  (car tbl)
          tbl (vl-remove js tbl)
          lst (cons (cons (itoa (- n (length tbl))) js) lst)
        )
      )
      (if lst
        (progn
          (and (eq fic "1")
        (setq fil (open (setq txt (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".txt")) "w"))
          )
          (foreach n (vl-sort lst '(lambda (a b) (trier (cdr a) (cdr b))))
        (if (eq fic "1")
          (princ (strcat (car n) (chr 9) (cadr n)) fil)
          (princ (strcat "\n"
                 (substr "     " 1 (- 5 (strlen (car n))))
                 (car n)
                 " "
                 (cadr n)
             )
          )
        )
        (setq i 2)
        (while (setq val (nth i n))
          (if (eq fic "1")
            (princ (strcat (chr 9) val) fil)
            (princ (strcat "..." val))
          )
          (setq i (1+ i))
        )
        (and (eq fic "1")
          (write-line "" fil)
        )
          )
          (and (eq fic "1")
        (princ (strcat "\nFichier \"" txt "\" crйй."))
        (close fil)
          )
        )
        (princ "\nPas de bloc а dйnombrer.")
      )
    )
      )
    )
  )
  (princ)
)
 
(setq nom_lisp "LSTATT")
(if (/= app nil)
  (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp)
    (princ (strcat "..." nom_lisp " chargй."))
    (princ (strcat "\n" nom_lisp ".LSP Chargй.....Tapez " nom_lisp " pour l'йxecuter.")))
  (princ (strcat "\n" nom_lisp ".LSP Chargй......Tapez " nom_lisp " pour l'йxecuter.")))
(setq nom_lisp nil)
(princ)
Заодно хранцузский можно поучить.
Nike вне форума  
 
Непрочитано 12.09.2014, 10:25
#31
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Чтобы было в один клик - или влезаете в программирование под autocad, или в раздел исполнителей. Программно, например, можно одной командой вставлять блок оборудования из списка и сразу за ним выноску, и привязать блок по хэндлу к выноске. А затем получить список уже оборудования по названиям блока, указать необходимый порядок следования, и пронумеровать автоматически. А если в БД забиты дополнительные данные - то получить на выходе сразу готовую спеку в виде csv файла. Или сразу в эксель или ворд загнать. В общем, насколько хватит фантазии) Но если хотя бы освоите для начала динамические блоки и связку с экселем через экспресс тулс тот же - это сразу даст хотя бы некоторый прирост производительности.

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от Nike Посмотреть сообщение
зря #16 игнорировал, там твоя задача на 90% (кроме вывода в Excel) решена.
Там вынимает данные, а ему еще надо выноски или их подобия пронумеровать..
Сергей812 вне форума  
 
Непрочитано 12.09.2014, 12:02
#32
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ему еще надо выноски или их подобия пронумеровать..
Вопрос стоял так: "Как получить спецификацию (таблицу с характеристиками) выделенных объектов?"
То есть предполагается, что все что надо уже пронумеровано.
А автоматическая нумерация - это дополнительная хотелка, требующая отдельного, не относящегося к получению спецификации решения.
Nike вне форума  
 
Непрочитано 12.09.2014, 12:35
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Nike Посмотреть сообщение
Вопрос стоял так: "Как получить спецификацию (таблицу с характеристиками) выделенных объектов?"
То есть предполагается, что все что надо уже пронумеровано.
А автоматическая нумерация - это дополнительная хотелка, требующая отдельного, не относящегося к получению спецификации решения.
Аппетит приходит во время еды
Цитата:
Сообщение от Taurustau Посмотреть сообщение
Возник ещё вопрос с нумерацией блоков на чертеже и отражением этой нумерации в извлеченных данных блока. Можно ли пронумеровать блоки на чертеже автоматически с выводом номера в виде выноски на чертеже и в виде того же номера в извлеченных данных? В атрибутах блока номер ставить не удобно потому что набор блоков каждый раз разный и будут возникать пробелы в нумерации.
Скоро, чувствую, появиться вопрос - а как автоматически расставить блоки оборудования)
Сергей812 вне форума  
 
Автор темы   Непрочитано 12.09.2014, 12:44
#34
Taurustau

инженер-технолог
 
Регистрация: 18.03.2014
Сообщений: 76


Цитата:
Сообщение от Nike Посмотреть сообщение
Taurustau, зря #16 игнорировал, там твоя задача на 90% (кроме вывода в Excel) решена.
Nike,

C этой программкой не разобрался, а учитывая что выводит она всё-таки в .txt, не стал копаться глубже.

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Nike Посмотреть сообщение
Вопрос стоял так: "Как получить спецификацию (таблицу с характеристиками) выделенных объектов?"
То есть предполагается, что все что надо уже пронумеровано.
А автоматическая нумерация - это дополнительная хотелка, требующая отдельного, не относящегося к получению спецификации решения.
По поводу формулировки вопроса скорее согласен, чем нет. Задам вопрос в другом разделе форума.
Taurustau вне форума  
 
Непрочитано 12.09.2014, 14:43
#35
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Цитата:
Сообщение от Taurustau Посмотреть сообщение
C этой программкой не разобрался, а учитывая что выводит она всё-таки в .txt, не стал копаться глубже.
Ну и зря.
Открой полученный txt из Excel и наслаждайся.
Вложения
Тип файла: zip Пример блоков.zip (4.0 Кб, 32 просмотров)
Nike вне форума  
 
Автор темы   Непрочитано 12.09.2014, 15:04
#36
Taurustau

инженер-технолог
 
Регистрация: 18.03.2014
Сообщений: 76


Цитата:
Сообщение от Nike Посмотреть сообщение
Ну и зря.
Открой полученный txt из Excel и наслаждайся.
Nike, В Excel происходит смещение столбцов. Видимо из за разного количества атрибутов в блоках.
Taurustau вне форума  
 
Непрочитано 12.09.2014, 15:15
#37
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010



Да. Нужно привести атрибуты в соответствие, чтобы у всех блоков было одинаково.
Nike вне форума  
 
Непрочитано 12.09.2014, 21:49
#38
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Taurustau Посмотреть сообщение
Поясните пожалуйста почему пример не соответствует требованиям. В обоих примерах есть атрибуты для извлечения.
Вам нужно сперва самому определиться в каком виде и что именно Вы хотите получить.
Если спецификацию ТХ то атрибутов с информацией мало, а если хотите нумеровать то эти номера тоже надо хранить в атрибутах - оттуда считывать будете.
А если просто пронумеровать по готовому списку то проблем нет.
Вот пример, накидал на скорую руку, можно отшлифовать под конкретные нужды.
Вложения
Тип файла: zip Спец.zip (841.0 Кб, 34 просмотров)
maratovich вне форума  
 
Непрочитано 12.09.2014, 21:54
#39
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Вот по Вашему примеру, найдите отличия от первого варианта
Вложения
Тип файла: zip Спец2.zip (90.2 Кб, 42 просмотров)
maratovich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как получить спецификацию (таблицу с характеристиками) выделенных объектов?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить геодезическую таблицу? MAJKL.BY Программирование 51 15.11.2017 19:05
Как из раздела dxf "BLOCKS Section" получить точки контуров объектов HATCH и REGION? KAI Программирование 2 06.11.2010 09:06
Быстро получить Набор объектов попадающих в Сферу [N.S] Программирование 10 09.08.2009 11:04
Как получить таблицу свойств объектов такую же как в OrCad passat AutoCAD 1 08.12.2004 01:12