Инструменты поддержки CAD Cтандарта предприятия - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Инструменты поддержки CAD Cтандарта предприятия

Инструменты поддержки CAD Cтандарта предприятия

Закрытая тема
Поиск в этой теме
Непрочитано 05.10.2009, 13:33
Инструменты поддержки CAD Cтандарта предприятия
kheylan
 
Екатеринбург
Регистрация: 24.05.2009
Сообщений: 86

Чтобы CAD Cтандарт Предприятия работал помимо инструкций и руководств, необходимо инструменты с помощью которых он быстро и эффективно выполнялся. Предлагаю собрать здесь ссылки на эти команды, макросы и т.д. Первое, что приходится приводить к стандарту текст, размеры, слои, типы линий и многое остальное. С остального и начну.
У нас на предприятии одно из условий выполнения стандарта, можно использовать точки только во время проектирования, при подготовке в архив все точки должны быть удалены.
Если просто удалить точки в чертеже, то можно использовать такой макрос:
^C^C^P(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "POINT")))) (sssetfirst selset selset)));(mfunc);_all;;_erase;^H
А как удалить точки в блоках, вставленные в чертеж???-> Смотри пост №12
Установить список масштабов согласно ГОСТа -> Смотри пост №27
Задать объектам свойства ПоСлою -> Смотри пост №33
Единый текстовой стиль - всему чертежу-> Смотри пост №37

Последний раз редактировалось kheylan, 07.10.2009 в 07:23.
Просмотров: 9180
 
Непрочитано 06.10.2009, 09:30
#21
Beginer

проектировщик ж/б, ОиФ
 
Регистрация: 21.04.2006
Санкт-Петербург
Сообщений: 1,115


А для чего вообще в чертежах исользуют точки? Или специфика какая? Спрашиваю потому, что сам ими никогда не пользовался.
Beginer вне форума  
 
Непрочитано 06.10.2009, 09:37
#22
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


wetr, ты пойми, автор темы делает СТП для себя, для своей организации. Но он не может насаждать свои правила другим организациям. У себя он может удалить точки, но ведь в другой организации точки все равно останутся. Он не может удалить точки "как класс". И не надо думать за чужую контору, они сами сообразят, надо им точки удалять или не надо.
А по поводу СТП вообще - скажу так: сама идея подобных СТП ущербна, поскольку не имеет под собой законодательной базы.
А сами точки ("Point") могут использоваться, например, при создании высотных отметок, по которым потом строятся горизонтали. Я раньше применял точки в 3D-построениях для удобной привязки "УЗЕЛ" ("NODE").
Profan вне форума  
 
Автор темы   Непрочитано 06.10.2009, 10:51
#23
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


Кулик Алексей aka kpblc , насчет кода
осмелюсь так сказать (if (<= cadver 2007) вместо (if (<= cadver 2010) и со строки(repeat 3 (vla-purgeall adoc))
программа работает некорректно,
т.е. не выполняет нормально AUDIT и PURGE
А так класс! Да хорошо бы пристегнуть переменную DEMANDLOAD!
А насчет темы, точки - это частности! Главное инструменты, помогающие жить, неважно как их назовешь.
kheylan вне форума  
 
Непрочитано 06.10.2009, 11:22
#24
Кулик Алексей aka kpblc
Moderator

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


Код в #18 подправил. Немного.
Насчет if и прочего: код вообще-то сделан для конкретной ситуации (например, explodeproxy2007.arx находится в путях поддержки AutoCAD), универсальный будет намного длиннее. В 2010 версии команда removeallproxy имеет немного другой формат, поэтому я там и сделал подобную проверку.
Вот еще вариант (уже более гибкий, т.к. будет работать во всех версиях, где возможна подгрузка explodeproxy.arx); сам файл explode*.arx может находиться в любом уровне вложенности путей поддержки:
Код:
[Выделить все]
(defun clear-dwg (/ adoc err *error* fun_conv-string-to-list fun_files-in-directory)
                 ;|
*    Очистка файла
|;

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun fun_conv-string-to-list (string separator / i)
                                 ;|
*    Функция разбора строки. Возвращает список либо точечную пару.
*    Параметры вызова:
*	string		разбираемая строка
*	separator	символ, используемый в качестве разделителя частей
*    Примеры вызова:
(fun_conv-string-to-list "1;2;3;4;5;6" ";")	;'(1 2 3 4 5 6)
(fun_conv-string-to-list "1;2" ";")		;'(1 2)
*    За основу взяты уроки Евгения Елпанова по рекурсиям
|;
    (cond
      ((= string "") nil)
      ((setq i (vl-string-search separator string))
       (cons (substr string 1 i)
             (fun_conv-string-to-list
               (substr string (+ (strlen separator) 1 i))
               separator
               ) ;_ end of fun_conv-string-to-list
             ) ;_ end of cons
       )
      (t (list string))
      ) ;_ end of cond
    ) ;_ end of defun

  (defun fun_files-in-directory (directory pattern /)
                                ;|
*    Возвращает список файлов находящаяся в заданной
* директории
*    Автор : Зуенко Виталий (ZZZ)
*  Параметры:
*    directory  путь к папке например "D:\\Мои документы\\ZEF\\Lisp"
*    pattern    шаблон  список '("*.dwg" "*.dxf")
* Пример вызова:
|;
    (apply
      (function append)
      (append
        (mapcar
          (function
            (lambda (_pattern)
              (mapcar (function (lambda (f) (strcat directory "\\" f)))
                      (vl-directory-files directory _pattern 1)
                      ) ;_ list
              ) ;_ end of lambda
            ) ;_ end of function
          pattern
          ) ;_ mapcar
        (mapcar
          (function
            (lambda (d)
              (fun_files-in-directory
                (strcat directory "\\" d)
                pattern
                ) ;_ end of fun_files-in-directory
              ) ;_ end of lambda
            ) ;_ end of function
          (vl-remove
            "."
            (vl-remove ".."
                       (vl-directory-files directory nil -1)
                       ) ;_ end of vl-remove
            ) ;_ vl-remove
          ) ;_ mapcar
        ) ;_ append
      ) ;_ end of apply
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (not (wcmatch "explodeproxy*.arx"
                    ((lambda (/ lst)
                       (setq lst (arx)
                             lst (strcase (strcat (car lst) (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) (cdr lst)))) t)
                             ) ;_ end of setq
                       ) ;_ end of lambda
                     )
                    ) ;_ end of wcmatch
           ) ;_ end of not
    (if (vl-catch-all-error-p
          (setq err
                 (vl-catch-all-apply
                   (function
                     (lambda (/ cadver file_lst)
                       (foreach file (setq cadver   (atoi (vl-string-trim "VISUALP " (strcase (ver))))
                                           file_lst (vl-remove-if-not
                                                      (function
                                                        (lambda (x)
                                                          (wcmatch (strcase (vl-filename-base x)) "EXPLODE*")
                                                          ) ;_ end of lambda
                                                        ) ;_ end of function
                                                      (apply
                                                        (function append)
                                                        (mapcar
                                                          (function
                                                            (lambda (x)
                                                              (fun_files-in-directory x '("*.arx"))
                                                              ) ;_ end of lambda
                                                            ) ;_ end of function
                                                          (fun_conv-string-to-list
                                                            (vla-get-supportpath
                                                              (vla-get-files (vla-get-preferences (vlax-get-acad-object)))
                                                              ) ;_ end of vla-get-SupportPath
                                                            ";"
                                                            ) ;_ end of fun_conv-string-to-list
                                                          ) ;_ end of mapcar
                                                        ) ;_ end of apply
                                                      ) ;_ end of vl-remove-if-not
                                           ) ;_ end of setq
                         (vl-catch-all-apply
                           (function
                             (lambda ()
                               (arxload file_lst)
                               ) ;_ end of lambda
                             ) ;_ end of function
                           ) ;_ end of vl-catch-all-apply
                         ) ;_ end of foreach
                       (vlax-for blk_def (vla-get-blocks adoc)
                         (if (equal (vla-get-isxref blk_def) :vlax-false)
                           (explodeallproxyinblock (vla-get-name blk_def))
                           ) ;_ end of if
                         ) ;_ end of vlax-for
                       (if (<= cadver 2010)
                         (command "removeallproxy")
                         (command "removeallproxy" "_y")
                         ) ;_ end of if
                       ) ;_ end of lambda
                     ) ;_ end of function
                   ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
          ) ;_ end of vl-catch-all-error-p
      (princ (strcat "Ошибка при работе с разбивкой прокси : " (vl-catch-all-error-message err)))
      ) ;_ end of if
    ) ;_ end of if
  (repeat 3 (vla-purgeall adoc))
  (vla-auditinfo adoc :vlax-true)
  (vla-purgeall adoc)
  (vlax-for app (vla-get-registeredapplications adoc)
    (vl-catch-all-apply
      (function
        (lambda ()
          (vla-delete app)
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Этот код я вообще не проверял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.10.2009, 16:14
#25
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


Кулик Алексей aka kpblc
Насчет вот этого не понял, поправите, если не так
Цитата:
В 2010 версии команда removeallproxy имеет немного другой формат, поэтому я там и сделал подобную проверку.
Так это относится к редактированию масштабов, а масштабы у нас появились с 2008, да и сам автор говорит http://www.caduser.ru/forum/index.ph...#message257587
так что будет уместней
(<= cadver 2007)
А так за основу взял код из поста №24 и макрос на первую кнопку из поста №16 будет такой
^C^C^P(if(not clear-dwg)(load"clear-dwg"));^P(clear-dwg);_ai_selall;_copyclip;_qnew;
переменную DEMANDLOAD наверно скриптом прикрутить к ярлыку запуска AutoCAD?
А как объединить 1 со 2 кнопкой из поста №16 + листы?
Вложения
Тип файла: lsp clear-dwg.LSP (5.3 Кб, 64 просмотров)
kheylan вне форума  
 
Непрочитано 06.10.2009, 16:25
#26
Кулик Алексей aka kpblc
Moderator

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


В 2008:
Код:
[Выделить все]
Command: removeallproxy <enter>
Command:
В 2010:
Код:
[Выделить все]
Command: removeallproxy <enter>
Очистить список масштабов [Да / Нет] <Да> _y <enter>
Command:
C формулировкой могу ошибаться, но дополнительный вопрос у меня появлялся именно на 2010 версии (сейчас она не установлена, проверить точно не могу).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.10.2009, 16:58
#27
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


В 2009 по крайней мере
Команда: removeallproxy
Очистить список масштабов? [Да/Нет] <Да>:
Но это первая чистка масштабов, основной инструмент - это
приведение списка масштаба согласно ГОСТу, спасибо автору VVA http://forum.dwg.ru/showpost.php?p=302360&postcount=75
вот файл SetScale.LSP, где внесены эти масштабы
Вложения
Тип файла: lsp SetScale.LSP (2.9 Кб, 79 просмотров)
kheylan вне форума  
 
Непрочитано 06.10.2009, 17:01
#28
Кулик Алексей aka kpblc
Moderator

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


kheylan, у меня 2009 нет. Значит, в проверке надо либо устанавливать (<= cadver 2009), либо вообще отказываться от этой штукенции и пытаться выполнить удаление прокси-объектов самостоятельно (весьма неблагодарное дело на самом деле)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.10.2009, 17:41
#29
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


Кулик Алексей aka kpblc
извини за назойливость. но я всегда понимал, что
(if <текст-выражение> <выражение-тогда> [<выражение-иначе>])
(if (<= cadver 2007) (command "removeallproxy")
(command "removeallproxy" "_y")
) ;_ end of if
выражение будет выполняться для 2007,2006 и тд истина <выражение-тогда>
а 2008, 2009, 2010, если ложь <выражение-иначе>
kheylan вне форума  
 
Непрочитано 06.10.2009, 18:14
#30
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Цитата:
Сообщение от Beginer Посмотреть сообщение
А для чего вообще в чертежах исользуют точки?
Я использовал в случах, когда надо что-то моделировать и передавать в стороннюю программу, которая требует именно точки.
Ещё у геодезистов разных специализаций (топосъемка, гоеметрия объекта) многим вспомогательным программам (или LISP'ам) надо скармливать точечные массивы. И которые отдают данные тоже в точках.
В обычной работы вместо точки, как правило, просто рисуешь (п)линию нулевой длины :)

P.s. Боярин, попроси автора перименовать-таки тему. Я думал, тут что-то вкусненькое, а тут какое-то уныние.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 06.10.2009, 20:19
#31
Кулик Алексей aka kpblc
Moderator

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


Александр Бауск, его уже 2 раза просили. Третья просьба будет уже более "жесткой": или переименовывается тема, или она закрывается через 12 часов.
kheylan, в 2008 версии запроса на восстановление списка масштабов нет. Учитывая, что в 2009 теоретически загружается такая же версия arx, что и в 2007-2008, там ожидать запроса бесполезно. Поэтому если версия AutoCAD до 2009 включительно, то выполнять explodeproxy. Если выше - с подтверждением очистки списка масштабов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2009, 20:36
#32
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Более продуктивно было-бы рассказать как, например, нажатие на кнопку Линейный размер (не штатную кнопку, а самодельную) приводит к созданию стиля, пригодного для данного масштаба, слоя, в который размер устанавливается, оба становятся текущими и следует запрос, мол, давай, размерь. Потом восстанавливаются текущими то, что было до взятия команды. Как это сделать на макросах описано в книге Язык макрокоманд и создание кнопок. Но с тех пор много воды утекло. Появились аннотации. Хорошо-бы сделать подобное под них, да на лиспе. Алексей как модератор может закрыть тему, но как программист мог-бы ее и развить, в этом-ли направлении, или в подобном. Да и стоит-ли закрывать? Появится, возможно, другой автор и продолжит тему. Да и топикстартер не сказал последнего слова. Пусть считает мой пост направлением для размышления. Точки это действительно мелко для такого броского названия
Vova вне форума  
 
Автор темы   Непрочитано 06.10.2009, 21:34
#33
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


Да, точки - это, конечно мелко, но это было нужно на тот момент. Но в шапке темы было написано: Предлагаю собрать здесь ссылки на команды, макросы и т.д., которые необходимы для поддержки стандарта.
Я думал народ поделится или посоветует что-нибудь!
Примерно, вот в таком стиле:
С 2008 появилась переменная SETBYLAYERMODE с помощью которой можно легко задать всем объектам свойства ПоСлою и варьировать ею задавая отдельные свойства ПоСлою. У нас свойства ПоСлою - один из постулатов стандарта.
Свойства ПоСлою
Нажмите кнопку. Свойства всех объектов будут ПоСлою
^C^C^P(setvar "setbylayermode" 127);_ai_selall;_setbylayer;;;
Цвет ПоСлою
Выберите объекты, чтобы задать Цвет ПоСлою выбранным объектам
^C^C^P(setvar "setbylayermode" 97);_select;\_setbylayer;_previous^M;;;
ТипЛинии ПоСлою
Выберите объекты, чтобы задать ТипЛинии ПоСлою выбранным объектам
^C^C^P(setvar "setbylayermode" 98);_select;\_setbylayer;_previous^M;;;
Вес ПоСлою
Выберите объекты, чтобы задать Вес ПоСлою, выбранным объектам
^C^C^P(setvar "setbylayermode" 100);_select;\_setbylayer;_previous^M;;;
Вложения
Тип файла: dwg
DWG 2007
ПоСлою.dwg (142.2 Кб, 600 просмотров)

Последний раз редактировалось kheylan, 06.10.2009 в 21:41.
kheylan вне форума  
 
Непрочитано 06.10.2009, 21:42
#34
Кулик Алексей aka kpblc
Moderator

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


kheylan, почти убедил. Но именно "почти". Самое главное: через месяц найти что-либо полезное в этой теме не сможет никто (если тема будет развиваться). И прежде всего саму эту тему никто не найдет.
В правилах, конечно, не прописано "один вопрос - одна тема", но это не зря рекомендуют. Одно дело - сносить объекты точек; другое - устанавливать параметры объектам; третье - создавать стили и т.п. Мешать все в одну кучу не есть гуд.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2009, 21:53
#35
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Vova, а зачем вообще создавать отдельный стиль под каждый масштаб? Dim scale overall исчерпывает эту проблему.

__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 07.10.2009, 04:20
#36
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Привожу пример из доаннотейского периода. Пусть есть несколько ВЭ с разными масштабами. Соответствующие куски модели надо заполнять внемасштабными элементами, в том числе и размерами. У нас делается так: сначала надо нажать кнопку масштаба. Скажем, 1:50. Затем все, что рисуется с кнопок нашего меню, исходит из мышки нужной величины. В том числе размеры. В проставляемый размер программа вкладывает нужный overall, при этом образуется стиль, в имя которого входит цифра 50. Образуется также слой, в имя которого входит 50. Только что образованным стилем в только что созданном слое (без всяких шаблонов и стандартов предприятия) проставляется первый и последующие размеры данного масштаба. При нажатии масштабной кнопки, допустим, 1:100 при нажатии затем разных кнопок вставки внемасштабного блока, текста, размеров, штриховок, типов линии все повторяется, образуются, если надо, новые стили и слои.
Ты предлагаешь вместо разных стилей для размеров иметь один, но много раз Style Overrides. Слои все равно надо плодить, иначе не получится отключить ненужное, если один и тот-же кусок попадает в разномасштабные ВЭ.
Так тоже можно. программа при этом не упростится, количество стилей уменьшится до одного, но пользователям стремно видеть Style overrides. Все хотят с ним бороться, не понимая сути. Много стилей не напрягают, в отличие от Style Overrides

Последний раз редактировалось Vova, 07.10.2009 в 04:38.
Vova вне форума  
 
Автор темы   Непрочитано 07.10.2009, 07:20
#37
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


Наверно тему нужно было начинать с основных пунктов проверки чертежа - это текстовые и размерные стили.
Начнем с текстовых стилей и приведение их к единому.
Здесь у нас основной инструмент, хвала автору VVA
http://forum.dwg.ru/attachment.php?a...9&d=1228383759 , на базе которого создан макрос
ISO
Сначала выбираем ISO, потом выбираем стили которые будем приводить в соответствие со стилем ISO (Совет- выбрать все)
^C^C_AUDIT;_Yes;^C^C_-style;ISO;isocpeur;0;0.8;0;_N;_N;^C^C^P(if (null C:CTS)(load "ChangeTextStyles"));CTS;(cts:layer-status-save);(ru-textstyle-update "*");TSUP;TEXTSTYLE;ISO;^H
ISO - это наш стиль, ваш стиль может быть, который вашему сердцу мил. Жизнь нас заставила использовать этот инструмент, когда к нам стали приходить такие чертежи как "Невидимый текст"
Вложения
Тип файла: dwg
DWG 2007
Невидимый текст.dwg (76.0 Кб, 609 просмотров)
Тип файла: lsp ChangeTextStyles.LSP (32.2 Кб, 72 просмотров)
kheylan вне форума  
 
Непрочитано 07.10.2009, 07:39
#38
wetr

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


удалено
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 07.10.2009, 08:06
#39
Кулик Алексей aka kpblc
Moderator

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


kheylan, тебе достаточно было снять использование BigFont в описаниях стилей, а потом выполнить регенерацию. Это так, в качестве альтернативного решения.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Инструменты поддержки CAD Cтандарта предприятия