Объеденение примитивов "Таблица"
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объеденение примитивов "Таблица"

Объеденение примитивов "Таблица"

Ответ
Поиск в этой теме
Непрочитано 08.05.2009, 10:08 #1
Объеденение примитивов "Таблица"
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,917

Как объеденить несколько таблиц в одну?
Пример и что надо получить см. в прикрепленном файле.
ps не надо указывать на ToolPac, он не корректно срабатывает, см. прикрепленый файл.
Tabl.dwg

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 4343
 
Непрочитано 08.05.2009, 13:20
#2
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Мне кажется, "автоматически" без дополнительных программных наворотов - никак. А не автоматически - копипастью.. Копируем одну из таблиц, добавляем нужное количество строк (что б не по одной строчке - выделив предварительно несколько строк), и копипастим "диапазоны" ячеек из исходных таблиц...
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 11.05.2009, 10:48
#3
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


А я и имел ввиду програмный метод.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 11.05.2009, 14:27
#4
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от zenon Посмотреть сообщение
А я и имел ввиду програмный метод.
Ну, на уровне своих знаний программирования я бы сделал так:
считать данные с исходных таблиц (количество строк-столбцов, содержимое и формат ячеек), создать новую таблицу с суммарным количеством строк, и внести данные из исходных таблиц.. Или последовательно добавлять строки к одной из таблиц и построчно переносить в них данные из второй...
Понятно, нужны не голые рассуждения, а конкретный код.. Но это уже требует времени, я по крайней мере за пару минут такой написать не смогу.
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 11.05.2009, 14:45
#5
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Никто и не торопит
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 11.05.2009, 15:58
#6
Кулик Алексей aka kpblc
Moderator

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


Встречный вопрос: а что делать, если в таблицах разное количество столбцов? А как поступать с объединенными ячейками? А что делать, если заголовки столбцов в таблицах будут разными?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 11.05.2009 в 15:58. Причина: Исправил опечатку
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.05.2009, 16:14
#7
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
а что делать, если в таблицах разное количество столбцов?
Вбить пустые
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А как поступать с объединенными ячейками?
можно снести в 1 ячейку
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что делать, если заголовки столбцов в таблицах будут разными?
Вбить просто значение.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 11.05.2009, 21:08
#8
Кулик Алексей aka kpblc
Moderator

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


Я говорил о другом. Во вложении - файлик с 3 таблицами (формат dwg - 2007). Таблицы надо объединить. Первыми данные идут со "Спецификации заполнений дверных проемов с разбивкой по секциям"; вторыми - "Спецификация заполнений оконных проемов по зданию"; последними - "Технико-экономические показатели".
Меня интересует, как должен выглядеть результат.
Вложения
Тип файла: dwg
DWG 2007
ACAD-Drawing1.dwg (105.4 Кб, 826 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.05.2009, 10:00
#9
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Устроит и так
ACAD-Drawing1.dwg
как правило нужно склеивать однотипные таблицы
вроде таких
Dwing.dwg
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 18.05.2009, 21:52
#10
Кулик Алексей aka kpblc
Moderator

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


Ну вот, вариант "на коленке", обладает массой минусов (но как старт, думаю, покатит):
Код:
[Выделить все]
(defun test (/ *error* table selset start_row)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (cond
    ((= (type (setq table
                     (vl-catch-all-apply
                       (function
                         (lambda ()
                           (car (entsel "\nУкажите начальную таблицу <Отмена> : "))
                           ) ;_ end of lambda
                         ) ;_ end of function
                       ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
        'ename
        ) ;_ end of =
     (cond
       ((= (cdr (assoc 0 (entget table))) "ACAD_TABLE")
        (setq table (vlax-ename->vla-object table))
        (if (setq selset (ssget '((0 . "ACAD_TABLE"))))
          (progn
            (foreach obj (mapcar (function vlax-ename->vla-object)
                                 ((lambda (/ tab item)
                                    (repeat (setq tab  nil
                                                  item (sslength selset)
                                                  ) ;_ end setq
                                      (setq tab
                                             (cons
                                               (ssname selset (setq item (1- item)))
                                               tab
                                               ) ;_ end of cons
                                            ) ;_ end of setq
                                      ) ;_ end of repeat
                                    ) ;_ end of lambda
                                  )
                                 ) ;_ end of mapcar
              (if (> cols tbl_col)
                (vla-insertcolumns
                  table
                  (vla-get-columns table)
                  (vla-getcolumnwidth table 0)
                  (- cols (vla-get-columns table))
                  ) ;_ end of vla-insertcolumns
                ) ;_ end of if
              (setq start_row (vla-get-rows table))
              (vla-insertrows
                table
                start_row
                (vla-getrowheight obj 0)
                (1- (vla-get-rows obj))
                ) ;_ end of vla-insertrows
              ((lambda (/ row_index col_index)
                 (setq row_index start_row
                       col_index 0
                       ) ;_ end of setq
                 (repeat (vla-get-rows obj)
                   (repeat (vla-get-columns obj)
                     (vla-setcellvalue
                       table
                       row_index
                       col_index
                       (vla-getcellvalue obj (- row_index start_row) col_index)
                       ) ;_ end of vla-setcellvalue
                     (setq col_index (1+ col_index))
                     ) ;_ end of repeat
                   (setq col_index 0
                         row_index (1+ row_index)
                         ) ;_ end of setq
                   ) ;_ end of repeat
                 ) ;_ end of lambda
               )
              ) ;_ end of foreach
            ) ;_ end of progn
          ) ;_ end of if
        )
       (t (princ "\nУказана не таблица"))
       ) ;_ end of cond
     ) ;_ end of cond
    (t (princ "\nОтменен выбор"))
    ) ;_ end of cond
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.05.2009, 12:16
#11
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Кулик Алексей aka kpblc, ну скажем мысля верна.
Есть правда недочеты. см. файл.
TAbl.dwg
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 28.05.2009, 00:43
#12
Кулик Алексей aka kpblc
Moderator

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


Удалить-то исходники не проблема. Проблема в другом: блоки, вставленные в ячейки таблицы, не копируются. Если устроит, то пожалуйста, еще один вариант:
Код:
[Выделить все]
(defun test (/ *error* table selset start_row fun_set-table-autoupdate)

  (defun fun_set-table-autoupdate (tbl update)
    (cond
      ((vlax-property-available-p tbl 'regeneratetablesuppressed t)
       (vla-put-regeneratetablesuppressed
         tbl
         (if update
           :vlax-true
           :vlax-false
           ) ;_ end of if
         ) ;_ end of vla-put-regeneratetablesuppressed
       )
      ((vlax-property-available-p tbl 'recomputetableblock t)
       (vlax-put-property
         tbl
         'recomputetableblock
         (if update
           :vlax-true
           :vlax-false
           ) ;_ end of if
         ) ;_ end of vlax-put-property
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun *error* (msg)
    (vl-catch-all-apply
      (function
        (lambda ()
          (fun_set-table-autoupdate table t)
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of vl-catch-all-apply
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (cond
    ((= (type (setq table
                     (vl-catch-all-apply
                       (function
                         (lambda ()
                           (car (entsel "\nУкажите начальную таблицу <Отмена> : "))
                           ) ;_ end of lambda
                         ) ;_ end of function
                       ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
        'ename
        ) ;_ end of =
     (cond
       ((= (cdr (assoc 0 (entget table))) "ACAD_TABLE")
        (setq table (vlax-ename->vla-object table))
        (if (setq selset (ssget "_:L" '((0 . "ACAD_TABLE"))))
          (progn
            (fun_set-table-autoupdate table nil)
            (foreach obj (vl-remove-if
                           (function
                             (lambda (x)
                               (equal x table)
                               ) ;_ end of lambda
                             ) ;_ end of function
                           (mapcar (function vlax-ename->vla-object)
                                   ((lambda (/ tab item)
                                      (repeat (setq tab  nil
                                                    item (sslength selset)
                                                    ) ;_ end setq
                                        (setq tab
                                               (cons
                                                 (ssname selset (setq item (1- item)))
                                                 tab
                                                 ) ;_ end of cons
                                              ) ;_ end of setq
                                        ) ;_ end of repeat
                                      ) ;_ end of lambda
                                    )
                                   ) ;_ end of mapcar
                           ) ;_ end of vl-remove-if
              (if (> cols tbl_col)
                (vla-insertcolumns
                  table
                  (vla-get-columns table)
                  (vla-getcolumnwidth table 0)
                  (- cols (vla-get-columns table))
                  ) ;_ end of vla-insertcolumns
                ) ;_ end of if
              (setq start_row (vla-get-rows table))
              (vla-insertrows
                table
                start_row
                (vla-getrowheight obj 0)
                (vla-get-rows obj)
                ) ;_ end of vla-insertrows
              ((lambda (/ row_index col_index)
                 (setq row_index start_row
                       col_index 0
                       ) ;_ end of setq
                 (repeat (vla-get-rows obj)
                   (repeat (vla-get-columns obj)
                     (vla-setcellvalue
                       table
                       row_index
                       col_index
                       (vla-getcellvalue obj (- row_index start_row) col_index)
                       ) ;_ end of vla-setcellvalue
                     (setq col_index (1+ col_index))
                     ) ;_ end of repeat
                   (vl-catch-all-apply
                     (function
                       (lambda ()
                         (vla-setrowheight table row_index (vla-getrowheight obj (- row_index start_row)))
                         ) ;_ end of lambda
                       ) ;_ end of function
                     ) ;_ end of vl-catch-all-apply
                   (setq col_index 0
                         row_index (1+ row_index)
                         ) ;_ end of setq
                   ) ;_ end of repeat
                 ) ;_ end of lambda
               )
              (vla-erase obj)
              ) ;_ end of foreach
            (fun_set-table-autoupdate table t)
            ) ;_ end of progn
          ) ;_ end of if
        )
       (t (princ "\nУказана не таблица"))
       ) ;_ end of cond
     ) ;_ end of cond
    (t (princ "\nОтменен выбор"))
    ) ;_ end of cond
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
P.S. 2 дня сидел, пытался добраться до блока, вставленного в ячейку. Что-то никак не получается...
---
Вроде исправил ошибку с неправильным количеством строк...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 28.05.2009 в 00:59.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.05.2009, 10:55
#13
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Удалить-то исходники не проблема. Проблема в другом: блоки, вставленные в ячейки таблицы, не копируются. Если устроит, то пожалуйста, еще один вариант:

P.S. 2 дня сидел, пытался добраться до блока, вставленного в ячейку. Что-то никак не получается...
---
Вроде исправил ошибку с неправильным количеством строк...
на блоки можно смело положить, ибо нужна только текстовая инфа
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 06.08.2009, 14:57
#14
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,783
Отправить сообщение для ssn с помощью Skype™


блин...
а как этот последний лисп запускается? какая функция? или надо его куда то встраивать?
ssn вне форума  
 
Автор темы   Непрочитано 06.08.2009, 14:59
#15
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


ssn, http://dwg.ru/art/8
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 06.08.2009, 15:01
#16
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,783
Отправить сообщение для ssn с помощью Skype™


ага. тока где этот defun C:ХХХ?
ну подскажите если туплю...
очень надо.. многооо таблиц

ээх товарищи програмисты...
старинный и мторный Cntr+C и Cntr+V меня спасают...
а хотелось быстро сделать

Последний раз редактировалось ssn, 06.08.2009 в 15:26.
ssn вне форума  
 
Непрочитано 06.08.2009, 16:24
#17
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Код:
в командной строке введи

Читаем внимательно статью VVA:
Цитата:
Команда или функция ?

Для начала необходимо определиться, что у нас: команда или функция?
Немного теории.
В описании практически любого кода есть такая строка, как
(defun …


и потом после нее чего-то там написано. Так вот то, что там написано и есть имя функции.
Если первыми символами являются C:, то функция готова к вызову из командной строки. Если такого нет, то вызывать функцию надо, заключая ее имя в круглые скобки.
Например, есть функция
(defun c:test ()<Что-то делаем 1>)


Ее вызывать (при условии, что она подгружена) с командной строки можно напрямую:

Команда : test

И будут выполнены действия <Что-то делаем 1>
А вот такую:
(defun test ()<Чего-то делаем 2>)


Можно будет вызывать только так:

Команда : (test)

И будут выполнены действия <Чего-то делаем 2>.
С точки зрения AutoCAD'a это 2 разных модуля.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 06.08.2009, 19:36
#18
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,783
Отправить сообщение для ssn с помощью Skype™


а... вон оно што, михалыч
спасибо
ssn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объеденение примитивов "Таблица"



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать массив для группы примитивов в Bricscad? Tonic Программирование 8 19.12.2007 09:22
список свойств параметров примитивов leonardo23 AutoCAD 7 10.01.2007 09:02
Выбор всех примитивов одним кликом DANZZ AutoCAD 5 12.08.2006 17:49
Выбор примитивов в функции (command) mmax Программирование 12 19.05.2006 20:02