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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автозаполнение ведомости рабочих чертежей

Автозаполнение ведомости рабочих чертежей

Ответ
Поиск в этой теме
Непрочитано 29.10.2007, 09:15 2 |
Автозаполнение ведомости рабочих чертежей
wetr
 
инженер
 
Владивосток
Регистрация: 09.08.2006
Сообщений: 1,535

Те кто видел КОМПАС меня поймут: хочу чтобы ведомость рабочих четрежей заполнялась автоматически. Пользую поля - ссылки на объекты. В моем случае ссылаюсь на блок(рамка) с аттрибутами "№листа" и "наименование листа". Вроде бы все отлично. Убивает трудоемкость создания данной таблицы. Т.е. как я делаю(может не правильно?):
создаем мтекст-вставить поле-объект-выбрать- а дальше проблемка - рамка то находится в лайоутах. А перелистывать лайоуты в режиме выбора нельзя... Приходится сначала открывать лайоут, затем копировать текст вида
"%<\AcObjProp Object(%<\_ObjId 2130566400>%).TextString>%"
в отдельный файл, затем вставлять в нужное мне поле. Есть другие варианты узнать ObjID? Или другие варианты создать эту таблицу?
И еще: в каких случаях меняется этот ID? А то я боюсь теперь эти блоки редактировать - все собьется нафиг
*******************************************************************************************************************
...Прошел год
VVA сделал отличную программу по созданию Ведомости рабочих чертежей (Компас отдыхает)

ВОЗМОЖНОСТИ:
- Ведомость создается в виде таблицы с полями.
- Обязательно использование блока с атрибутами "ЛИСТ" и "НАИМЕНОВАНИЕ.ЧЕРТЕЖА".
- Таблицы вставляется в слое _Таблица. Если слоя нет - он создается. Настройки слоя можно поменять в ЛИСПе
- Таблицы вставляются в Стиле таблиц "Ведомость чертежей" оформленной по ГОСТу. Настройки стиля см. в ЛИСПе
- Запускать командой VRC в командной строке или сделать себе кнопку


ОСОБЕННОСТИ:
- В таблице и блоке используется шрифт "MIPGOST.SHX". Скачать можно здесь. Не нравится? Открывай код и меняй под себя.
- В блок-рамке используется многострочный атрибут, который работает только в AutoCAD 2008 и старше.
Если у вас более ранняя версия - программа будет работать, но атрибут будет однострочный.
- При заполнении многострочного атрибута "НАИМЕНОВАНИЕ.ЛИСТА" не используйте ENTER. Текст перескочит на новую строку сам.(Это актуально если лисп вставляет поля. Варианты лиспа VRCTS и VRCTN отрабатывают без проблем)

ПРО БЛОК:
- Рамка пестрит полями - название проекта заполнять на титульном листе, в рамке обновится
- ШИФР проекта заполнять на титульном листе
- Формат листа - ссылка на lookup внутри блока, обновляется.
- Для того, чтобы количество листов прописывалось автоматом, я сделал себе макрос на кнопку, запускающую VRC
Цитата:
^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;all;;vrc
Внимание! Если у вас используется переменная USERI1, могут возьникнуть проблемы!
**********************

Для тех, кому не нравиться что программа создает стили и слои, вариант от VVA и Red Nova

************************************
***Обновление от 04.02.2008. **********
************************************
Добавлена возможность заполнять таблицу полями, текстом, выбирать или нет листы. Подробности в начале лиспа.
Команды:
VRC - таблица с полями, все листы
VRCTS - таблица с Tекстом, выбор (S) листов
VRCTN - таблица с Tекстом, нет (N) выбора листов
VRCFS - таблица с полями (F), выбор (S) листов

************************************
***Обновление от 06.09.2010. ***********
***********************************
Добавлена возможность выбора стиля таблиц
Версия для x64 : http://forum.dwg.ru/showpost.php?p=349807&postcount=159

Вложения
Тип файла: rar mipgost.rar (6.1 Кб, 1220 просмотров)
Тип файла: dwg
DWG 2004
Пример Ведомость чертежей.dwg (110.4 Кб, 34830 просмотров)
Тип файла: lsp vrc_VVA.lsp (34.6 Кб, 1104 просмотров)

__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось Кулик Алексей aka kpblc, 19.04.2014 в 22:22.
Просмотров: 126864
 
Непрочитано 02.10.2008, 12:08
#101
Кулик Алексей aka kpblc
Moderator

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


regen сделай
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2008, 03:04
#102
wetr

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


Все что делал раньше - неверно. Ссылался на вхождение блока, а это не то. Необходимо, чтобы каждое вхождение блока зависело от своего параметра текущего вхождения. Это достигается вставкой поля местозаменителя (BlockPlaceholder). Но опять таки не могу "урезать выражение" с помощью Дизеля.
значение поля
Код:
[Выделить все]
%<\AcObjProp.16.2 Object(?BlockRefId).Parameter(93).lookupString \f "%tc1">%
в Diesel приобретае вид LOOKUPSTRING
Код:
[Выделить все]
$(substr,"LOOKUPSTRING",1,2)
И как результат
Код:
[Выделить все]
Формат LO
Должно быть Формат А3

Кто нибудь сталкивался?
P.S. Спасибо Какаду
http://dwg.ru/f/showpost.php?p=234249&postcount=4
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 07.10.2008 в 04:01.
wetr вне форума  
 
Непрочитано 03.10.2008, 08:30
#103
Кулик Алексей aka kpblc
Moderator

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


Выложи блочок, посмотрю. А то "всухую" что-то плохо соображается
P.S. Если со строки "LOOKUPSTRING" оставлять только первые 2 символа, то останется "LO"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 03.10.2008 в 08:35.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2008, 09:45
#104
wetr

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


да я понял, что остается 2 первых символа от "LOOKUPSTRING", а вот как его заставить обрабатывать значение поля...
Вложения
Тип файла: dwg
DWG 2004
Шаблон_.dwg (108.8 Кб, 2339 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 03.10.2008, 10:18
#105
Кулик Алексей aka kpblc
Moderator

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


Кхе, а у меня в значение поля не удалось засунуть результат Lookup-параметра (имею в виду без программирования )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2008, 13:58
#106
wetr

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


Насколько я понял, этот самый BlockPlaceholder становится активным только при вставке поля в атрибут и только в редакторе блока. В простой текст его не вставишь. А жаль...
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Автор темы   Непрочитано 09.10.2008, 09:07
#107
wetr

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


Задача решилась. Выкладываю вкупе все примочки которые я использую.
Редми внутри
Вложения
Тип файла: rar Моя лучшая рамка.rar (107.1 Кб, 224 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 09.10.2008 в 10:10. Причина: скромней надо быть ;)
wetr вне форума  
 
Автор темы   Непрочитано 10.10.2008, 06:27
#108
wetr

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


Немного по теме

VVA, проясни хоть немного. Ничего не получается

А в vrc нужно добавить что-то типа такого :
Код:
[Выделить все]
;;; В переменной table vla-указатель на добавленную таблицу
(vla-put-layer table (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы")))))
Добавил функцию _dwgru-layer-create(или не надо было?), добавил строку
Код:
[Выделить все]
(vla-put-layer table (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы")))))
Переменной table не нашел в коде. И кто такой
Цитата:
vla-указатель
???
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 10.10.2008, 12:52
#109
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Ну так про table это для примера. Переменная может называться и мама_мыла_раму
Ищи что-то похожее
Код:
[Выделить все]
(setq tbl (vla-addtable (lib:get-active-space)
                      (vlax-3d-point (trans pnt 1 0))
                      (+ (length attlst) 2)
                      3    ;_Кол-во столбцов
                      800  ;_высота строки
                      6000 ;_ширина столбца
                    )
       )
(vla-put-layer tbl (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы")))))
Синее - что было, фиолетовое - нужно добавить, красное - то, что я подразумевал под
Цитата:
;;; В переменной table vla-указатель на добавленную таблицу
То, что добавил _dwgru-layer-create правильно
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 12.10.2008, 09:29
#110
wetr

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


VVA, что-то не получается у меня. Добавил функцию и строку, где ты написал - вставляется таблица в нужном слое, но пустая и не того размера.
Код:
[Выделить все]
(vl-load-com)
;;;================== Сервисные ф-ции BEGIN

;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
;|=============================================================================
*   На основе ф-ции _kpblc-layer-create
*   http://dwg.ru/forum/viewtopic.php?t=3116&start=45&sid=fab803bd4dbda125ffdc6c07563f682a
*   пост № 47
*   Добавлен новый  параметр  suff - суффикс слоя, если он есть, то имя слоя получаестся путем
*   добавления к имени существующего слоя суффикса suff
*   Создание слоя с указанными параметрами.
*   Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. может быть пропущено, если указан suff
     ("color" . 3)         ; номер цвета. nil -> 7
     ("lw" . 50)         ; вес линии слоя. nil -> 25
*                          Оно выражается в сотых долях миллиметра и может быть любым
*                          из следующего ряда: 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70,
*                          80, 90, 100, 106, 120, 140, 158, 200 и 211.
     ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   ("suff" . "_Размеры")  ;_Добавляемый суффикс с текущему слою. Если задан, поле "name" игнорируется            
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
* Примеры:
  (_dwgru-layer-create '(("name" . "Test")("color" . 1)("lw" . 50)))
* создать если нет и слой Test цветом 1 (красный) весом линии 0.5

=========================================================================|;

(defun _dwgru-layer-create (layer-list / vla_layer buf)
       (setq *MIP-CLAYER-PROP-SETTING*
     (list (cons "layer"
   (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
   ) ;_ end of cons
    (cons "color" (getvar "cecolor"))
    (cons "lw" (getvar "celweight"))
    (cons "lt" (getvar "celtype"))
    ) ;_ end of list
    ) ;_ end of setq

  ;;;Если есть suff добавляем в начало списка,
  ;;;чтобы assoc нашел раньше
  (if (cdr(assoc "suff" layer-list))
    (progn
     (setq layer-list (vl-remove (assoc "name" layer-list) layer-list))
     (setq layer-list (append (list(cons "name" (strcat (getvar "clayer") (cdr(assoc "suff" layer-list))))) layer-list))
    )
  )
  (setq vla_layer
  (vla-add
    (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (snvalid (cdr (assoc "name" layer-list)))
        (cdr (assoc "name" layer-list))
        "0"
      )
    ) ;_ end of vla-add
 ) ;_ end of setq
  (vla-put-color
    vla_layer
    (if (setq buf (cdr (assoc "color" layer-list)))
      buf
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if (setq buf (cdr (assoc "lw" layer-list)))
      (if (member buf (list acLnWt000  acLnWt030  acLnWt090
    acLnWt005  acLnWt035  acLnWt100
    acLnWt009  acLnWt040  acLnWt106
    acLnWt013  acLnWt050  acLnWt120
    acLnWt015  acLnWt053  acLnWt140
    acLnWt018  acLnWt060  acLnWt158
    acLnWt020  acLnWt070  acLnWt200
    acLnWt025  acLnWt080  acLnWt211
    )
    )
    buf
    acLnWtByLwDefault
 )
      acLnWtByLwDefault
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (setq buf (cdr (assoc "lt" layer-list)))
    (_kpblc-linetype-load
      buf
      (cdr (assoc "ltfile" layer-list))
      ) ;_ end of _kpblc-linetype-load
    ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if (= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
    vla_layer
    ) ;_ end of equal
    ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

;;;================== Сервисные ф-ции END

;;; Реактор

(or *kpblc-activedoc*
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))))

(setq VLR-react (VLR-SysVar-Reactor nil (list '(:VLR-sysVarChanged . chrzmstyle)))) 
(defun chrzmstyle (name event / nstyle)
  (if (= (car event) "DIMSTYLE")
    (progn
      (setq nstyle (getvar "DIMSTYLE")
	    nstyle (str-str-lst nstyle "_")
	    nstyle (VL-STRING-RIGHT-TRIM "_" (apply 'strcat (mapcar '(lambda (x) (strcat x "_"))(cdr nstyle)))))
      (if (snvalid nstyle)
	(progn
	  (setq nstyle (strcat "Размерные_" nstyle))
	  (vla-put-activelayer *kpblc-activedoc*
          (_dwgru-layer-create (list (cons "name" nstyle))))
	  )
	)
      )
    )
  (princ) 
  )
;http://dwg.ru/f/showthread.php?t=14548
;АВТО Заполнение ведомости рабочих чертежей
(defun c:vrc (/ adoc alay ss pnt tbl attlst lst fld lock)
  (defun SortStringWithNumberAsNumber (ListOfString IgnoreCase / NorStrs count)
;;;Function Normalize (add 0 befor number) number in string
;;; Count normalize symbols set in variable count
;;; CAB added count as an argument
  (defun NormalizeNumberInString (str count / ch i pat ret buf)
    (setq i   0
          pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
          ret ""
    ) ;_ end of setq
    (while (/= (setq ch (substr str (setq i (1+ i)) 1)) "")
      (if (vl-position ch pat)
        (progn
          (setq buf ch) ;_ end of setq
          (while
            (vl-position (setq ch (substr str (setq i (1+ i)) 1)) pat)
             (setq buf (strcat buf ch))
          ) ;_ end of while
          (while (< (strlen buf) count) (setq buf (strcat "0" buf)))
          (setq ret (strcat ret buf))
        ) ;_ end of progn
      ) ;_ end of if
      (setq ret (strcat ret ch))
    ) ;_ end of while
    ret
  ) ;_ end of defun
  ;;-------------------------------------------------
  ;;  function to Count the longest number in string 
  ;;  CAB added to get the correct COUNT
  (defun getcount (lst / count pat)
    (setq count 0)
    (setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
    (mapcar
      '(lambda (str / i maxlen ch)
         (setq i 0 maxlen 0)
         (while (/= (setq ch (substr str (setq i (1+ i)) 1)) "")
           (if (vl-position ch pat) ; number
             (setq maxlen (1+ maxlen))
             (setq count  (max count maxlen) maxlen 0)
           )
         )
  (setq count  (max count maxlen)) ;_<<< ADD 21.06.2007 by 
       )
      Lst
    )
    count
  )
  ;;===============================================
  (setq count   (GetCount ListOfString)
        NorStrs (mapcar '(lambda (x) (NormalizeNumberInString x count))
                        ListOfString)
  )
  (and IgnoreCase (setq NorStrs (mapcar 'strcase NorStrs)))
  (mapcar '(lambda (x) (nth x ListOfString)) (vl-sort-i NorStrs '<))
)
   (defun get-all-atts (obj)
  (if (and obj
    (eq :vlax-true (vla-get-HasAttributes obj))
    (vlax-property-available-p obj 'Hasattributes)
    
      )
    (vl-catch-all-apply
      (function
 (lambda ()
   (mapcar (function (lambda (x)
         (list (vla-get-TagString x)
        (vla-get-TextString x)
                                    x
         )
       )
    )
    (append (vlax-invoke obj 'Getattributes)
     (vlax-invoke obj 'Getconstantattributes)
    )
   )
 )
      )
    )
  )
)
  (defun lib:get-active-space ()
  (if (and (zerop (vla-get-activespace (vla-get-activedocument (vlax-get-acad-object)))) 
      (= :vlax-false (vla-get-mspace (vla-get-activedocument (vlax-get-acad-object)))) 
      ) ;_ end of and 
    (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))) 
    (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  ) ;_ end
  (vl-load-com)
   (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        alay (vla-get-activelayer adoc)
  )
  (if
(and
(setq ss (ssget "_X" '((0 . "INSERT")(66 . 1))))
(setq lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp(mapcar 'cadr(ssnamex ss)))))
(setq attlst (mapcar '(lambda(x)(get-all-atts x)) lst))
(setq attlst (vl-remove-if-not '(lambda(x)(and (assoc "ЛИСТ" x)
                                               (assoc "НАИМЕНОВАНИЕ.ЧЕРТЕЖА" x)
                                               )
                                  )
               attlst)
      )
(setq lst (SortStringWithNumberAsNumber (mapcar '(lambda (x)(cadr(assoc "ЛИСТ" x))) attlst) t))
(vl-catch-all-apply '(lambda()
(setq attlst (vl-sort attlst '(lambda(x y)(< (vl-position(cadr(assoc "ЛИСТ" x)) lst)(vl-position(cadr(assoc "ЛИСТ" y)) lst)))))
                       )
  )
 (setq pnt (vl-catch-all-apply
                       (function getpoint)
                       '("Точка вставки таблицы <Отказаться>: ")
                   )
     )
 (not (vl-catch-all-error-p pnt))
 (setq tbl (vla-addtable (lib:get-active-space)
                      (vlax-3d-point (trans pnt 1 0))
                      (+ (length attlst) 2)
                      3    ;_Кол-во столбцов
                      15  ;_высота строки
                      185 ;_ширина столбца
                    )
       )
(or (vla-put-layer tbl (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы"))))) t)
)
(progn
  (if (= (vla-get-lock alay) :vlax-true)
        (progn (vla-put-lock alay :vlax-false) (setq lock t))
      )
          (vla-put-regeneratetablesuppressed tbl :vlax-true)
          (vla-settext tbl 0 0 "Ведомость рабочих чертежей основного комплекта")
          (vla-setcellalignment tbl 0 0 acmiddlecenter)
          (vla-setcelltextheight tbl 0 0
                                      3.5  ;_Высота текста
            )
          (vla-settext tbl 1 0 "Лист")
          (vla-settext tbl 1 1 "Наименование")
          (vla-settext tbl 1 2 "Примечание")
          (vla-setcellalignment tbl 1 0 acMiddleCenter)
          (vla-setcellalignment tbl 1 1 acMiddleCenter)
          (vla-setcellalignment tbl 1 2 acMiddleCenter)
          (vla-setcelltextheight tbl 1 0
	                              3  ;_Высота текста лИСТ
            )
          (vla-setcelltextheight tbl 1 1
                                    3  ;_Высота текста Наименование
            )
          (vla-setcelltextheight tbl 1 2
                                    3  ;_Высота текста Примечание
            )
          (vla-setcolumnwidth tbl 0
                                  15 ;_Ширина колонки Лист
            )
          (vla-setcolumnwidth tbl 1
                                  140 ;_Ширина колонки Наименование
            )
          (vla-setcolumnwidth tbl 2
                                  30 ;_Ширина колонки Примечание
            )
          (vla-put-horzcellmargin tbl 1) ;_Отступ текста по горизонтали
          (vla-SetRowHeight tbl 0 13) ;_Высота строки Ведомость чертежей
          (vla-SetRowHeight tbl 1 15) ;_Высота строки Лист Обозначение Наименование
          (setq row 1)
          (foreach i attlst
	    (setq row (1+ row))
	    (vla-SetRowHeight tbl row 8) ;_Высота строки
            (setq fld (strcat " %<\\AcObjProp Object(%<\\_ObjId "
             (vl-princ-to-string(vla-get-objectid (caddr (assoc "ЛИСТ" i))))
                ">%).TextString \\f \"%tc3\">%"
                ) ;_ strcat
          )
            (vla-settext tbl row 0 fld)
            (vla-setcellalignment tbl row 0 acMiddleCenter)
            (vla-setcelltextheight tbl row 0
                             2.5  ;_Высота текста
              )
            (setq fld (strcat " %<\\AcObjProp Object(%<\\_ObjId "
             (vl-princ-to-string(vla-get-objectid (caddr (assoc "НАИМЕНОВАНИЕ.ЧЕРТЕЖА" i))))
                ">%).TextString \\f \"%tc3\">%"
                ) ;_ strcat
          )
            (vla-settext tbl row 1 fld)
            (vla-setcellalignment tbl row 1 acMiddleLeft)
            (vla-setcelltextheight tbl row 1
                             2.5  ;_Высота текста
              )
	    
            
            
            
            

          )
          (vla-put-regeneratetablesuppressed tbl :vlax-false)
          (vla-update tbl)
          (if lock (vla-put-lock alay :vlax-true))
        )
      )
  )
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 13.10.2008 в 16:06.
wetr вне форума  
 
Непрочитано 12.10.2008, 16:28
#111
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


wetr, Просто вставил vla-put-layer в конструкцию and, а она (vla-lut-layer) взвращает nil и and прекращает работу.
Замени
Код:
[Выделить все]
(vla-put-layer tbl (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы")))))
на
Код:
[Выделить все]
(or (vla-put-layer tbl (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы"))))) t)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.10.2008, 02:38
#112
wetr

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


VVA, отлично все работает!
Ну а чтобы все было идеально, нужно чтобы вставлялась таблица в нужном стиле. Это реализуемо?
(заменил код в №110. А кому лень копипастить прикрепляю файл)
Вложения
Тип файла: lsp vrc.lsp (13.3 Кб, 109 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 13.10.2008, 09:27
#113
Кулик Алексей aka kpblc
Moderator

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


Создать табличный стиль программно - реализуемо. После вставки таблицы применить к ней стиль - тоже можно. Проблема в другом В том, что ширины столбцов, например, касаются только таблицы как таковой и не хранятся в стиле.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.10.2008, 09:42
#114
wetr

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


Что-то я не въехал в проблему
Сейчас в лиспе уже задаются размеры столбцов и строк. Т.е. какой стиль таблицы не выбери - создается таблица с нужными размерами ячеек. Но, не более. Стиль текста, толщины линий - это все зависит от стиля таблицы и там настраивается.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 13.10.2008, 10:22
#115
Кулик Алексей aka kpblc
Moderator

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


Я к тому, что таблицу надо будет сначала вставить, потом применять стиль, а потом перепроверять ячейки. У меня на 2006-м ADT такое было, до сих пор испуга хватает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.10.2008, 11:15
#116
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


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

Сами таблицы (стобцы, ширина и прочее - в том числе, возможно и данные) надо вообще выносить из программы. Иначе потом замучаетесь на каждый случай кустарно программы делать. В ruCAD описание таблиц вынесено в XML. Например, таблица, показанная на рисунке в #79, описана так:
Код:
[Выделить все]
 
 
<?xml version="1.0" encoding="windows-1251" ?>
<table>
  <summaryinfo Title="ВЕДОМОСТЬ ЧЕРТЕЖЕЙ ОСНОВНОГО КОМПЛЕКТА"  Create_DTM="23.04.2007 11:56:48" RevNumber="4"/>
  <title rows="1" height="15" ask_title="1">
  <columns count="3">
    <column_1 size="15" type="STRING" align="C"/>
    <column_2 size="140" type="STRING"  align="L"/>
    <column_3 size="30" type="STRING" align="L"/>
  </columns>
    <row_1  height="15">
   <cell_1 text="Лист" />
   <cell_2 text="Наименование" />
   <cell_3 text="Примечание" />
 </row_1>
  </title>
  <data rows="1">
    <row_1>
      <column_1 data=""/>
      <column_2 data=""/>
      <column_3 data=""/>
    </row_1>
  </data>
</table>
В таком формате могут быть описаны любые таблицы. Для рисования в конкретной программе используется одна функция, вызываемая примерно так:

Код:
[Выделить все]
 
(setq table_obj (ru-table-xml-by-two-point
      "common\\_Ведомость чертежей основного комплекта"
      "ВЕДОМОСТЬ ЧЕРТЕЖЕЙ ОСНОВНОГО КОМПЛЕКТА "
            T
      lst_data_cells
    )
  )
Здесь в аргументах имя XML-файла описания таблицы и список данных для заполнения столбцов. Вот формирование этого списка и является главным в конкретной программе, такой как рассматриваемая в ветке. Можно сосредотачиваться на формировании списка и не думать, как же именно рисовать таблицу (она сама умеет рисоваться) и как переделывать для других случаев.

Это для размышления о возможных путях совершенствования.
ShaggyDoc вне форума  
 
Непрочитано 13.10.2008, 11:24
#117
Кулик Алексей aka kpblc
Moderator

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


ShaggyDoc, вопрос: а зачем в атрибутах, например, columns, хранить количество подэлементов? Они ж и так вычисляются (правда, я использую Microsoft'овский XML-parser...) По-моему, xml-файл можно подупростить (для вариантов ручного либо программного наращивания).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.10.2008, 13:35
#118
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
ShaggyDoc, вопрос: а зачем в атрибутах, например, columns, хранить количество подэлементов? Они ж и так вычисляются (правда, я использую Microsoft'овский XML-parser...) По-моему, xml-файл можно подупростить (для вариантов ручного либо программного наращивания).
Здесь упрощать не надо. Если сразу задано количество колонок, нет необходимости читать все описания колонок, чтобы их пересчитать. Сразу видим, что колонок 3, а элемент каждой колонки именуется конкатенацией "column_" и номера. В том же LISP можно сразу формировать список данных.

Структуру, конечно, можно всякую предусматривать - любой парсер её прочитает (а MS-XML еще и испортит без спросу, даже при чтении). Но, если не указывать числа колонок (и строк данных), всё значительно замедляется. Сначала парсер должен будет выстроить полную объектную модель документа, а программист должен будет, обращаясь к модели, извлекать из свойств структуры количество колонок и прочее. Кроме того, иногда (не в этом случае) заголовки ячеек могут объединяться, и там надо точно задать номер ячейки, не надеясь, что парсер его правильно объединит.
ShaggyDoc вне форума  
 
Непрочитано 13.10.2008, 13:39
#119
Кулик Алексей aka kpblc
Moderator

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


Все, сегодня же забираю "САПР на базе". Пора обновляться...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.10.2008, 15:46
#120
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от wetr Посмотреть сообщение
VVA, отлично все работает!
Ну а чтобы все было идеально, нужно чтобы вставлялась таблица в нужном стиле. Это реализуемо?
(заменил код в №110. А кому лень копипастить прикрепляю файл)
Что-то в #110 не увидил замены
По поводу стиля таблицы делаю примерно как сказал ShaggyDoc в #116.
Правда пошел по более легкому пути. Ручками создал нужный стиль, замтем "достал" его из словаря и сохранил ввиде списка. В автозагрузке есть такой кусочек
Код:
[Выделить все]
;;Добавляем стиль таблицы
(if (and (setq tb-dic(DICTSEARCH (NAMEDOBJDICT) "ACAD_TABLESTYLE"))
	 (not (member (cons 3 "МИП")(DICTSEARCH (NAMEDOBJDICT) "ACAD_TABLESTYLE"))))
  (progn
(setq tb (list
'(0 . "TABLESTYLE")
(cons 330 (CDR (ASSOC -1 tb-dic)))
'(100 . "AcDbTableStyle")
'(3 . "Standard")
'(70 . 0)
'(71 . 0)
'(40 . 1);Отступ
'(41 . 1);Отступ
'(280 . 0)
'(281 . 0)
'(7 . "МИП_ГОСТ")
'(140 . 2.5)
'(170 . 5)
'(62 . 256)
'(63 . 7)
'(283 . 0)
'(274 . -1)
'(284 . 1)
'(64 . 256)
'(275 . -1)
'(285 . 1)
'(65 . 256)
'(276 . -1)
'(286 . 1)
'(66 . 256)
'(277 . -1)
'(287 . 1)
'(67 . 256)
'(278 . -1)
'(288 . 1)
'(68 . 256)
'(279 . -1)
'(289 . 1)
'(69 . 256)
'(7 . "МИП_ГОСТ")
'(140 . 3.5)
'(170 . 5)
'(62 . 256)
'(63 . 256)
'(283 . 0)
'(274 . -2)
'(284 . 1)
'(64 . 0)
'(275 . -2)
'(285 . 1)
'(65 . 0)
'(276 . -2)
'(286 . 1)
'(66 . 0)
'(277 . -2)
'(287 . 1)
'(67 . 0)
'(278 . -2)
'(288 . 1)
'(68 . 0)
'(279 . -2)
'(289 . 1)
'(69 . 0)
'(7 . "МИП_ГОСТ")
'(140 . 3.0)
'(170 . 5)
'(62 . 256)
'(63 . 256)
'(283 . 0)
'(274 . -1)
'(284 . 1)
'(64 . 256)
'(275 . -1)
'(285 . 1)
'(65 . 256)
'(276 . -1)
'(286 . 1)
'(66 . 256)
'(277 . -1)
'(287 . 1)
'(67 . 256)
'(278 . -1)
'(288 . 1)
'(68 . 256)
'(279 . -1)
'(289 . 1)
'(69 . 256)
)
      )
(if (setq xr (entmakex tb))
(entmod (append tb-dic(list (cons 3 "МИП")(cons 350 xr)))))
(setq tb nil xr nil tb-dic nil )
))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автозаполнение ведомости рабочих чертежей

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозаполнение ведомости чертежей и автонумерация листов в спдс 6 Кукурузо_Джон_Горыныч ПО от CSoft 34 15.02.2019 08:13
Ведомость рабочих чертежей основного комплекта 13Rossoneri Архитектура 3 22.08.2015 00:21
Аннулирование комплекта рабочих чертежей путем замены Elena.sh Разное 8 26.05.2011 05:47
Хочу быстрее заполнять ведомости рабочих чертежей! a-alex Программирование 2 19.02.2008 19:09