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

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

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

Закрытая тема
Поиск в этой теме
Непрочитано 05.10.2009, 13:33 #1
Инструменты поддержки 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.
Просмотров: 8916
 
Непрочитано 05.10.2009, 13:41
#2
BM60


 
Регистрация: 08.02.2008
Где-то
Сообщений: 8,460


Offtop: Недавно, что-то слово-в-слово уже читал. Галлюцинации или назойливая муха?
__________________
Я дарю не рыбу, а удочку и море.
www.zodchii.ws, www.complexdoc.ru,
Библиотеки электронных книг
Download
BM60 вне форума  
 
Непрочитано 05.10.2009, 13:54
#3
Profan


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


Причем тут CAD стандарты? Обычная задача по программированию.
Profan вне форума  
 
Непрочитано 05.10.2009, 14:01
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от BM60 Посмотреть сообщение
Offtop: Недавно, что-то слово-в-слово уже читал. Галлюцинации или назойливая муха?
Offtop: Было в "Корпоративных стандартах".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.10.2009, 14:05
#5
kheylan


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


Просто в CAD Стандарте Предприятия у нас прописано, чтобы не было точек, а так, конечно, это задача по программированию, т.е. поддержка последнего
kheylan вне форума  
 
Непрочитано 05.10.2009, 14:20
#6
Profan


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


Мало ли, что у вас прописано. У нас, например, точки фактически не используются (проектирование объектов здравохранения), разве только при использовании команд "Поделить" да "Разметить". И ни в какой СТП нет нужды вводить подобное требование. Поэтому и надо эту тему попросту переименовать.
А если попробовать функцию (entnext) применительно к блокам?

Последний раз редактировалось Profan, 05.10.2009 в 14:54.
Profan вне форума  
 
Непрочитано 05.10.2009, 18:58
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
А как удалить точки в блоках, вставленные в чертеж???
Код:
[Выделить все]
(defun mip:del-ObjectbyName ( ObjectName / *error*  tmp cnt pcnt)
  ;;; ObjectType - Имя удаляемого объекта, возвращаемое vla-get-ObjectName
  ;;;              например "AcDbPoint"
  ;;;(mip:del-ObjectbyName "AcDbPoint")
  (defun *error* (msg)(princ msg)(mip:layer-status-restore)(princ))
  (vl-load-com)
  (setq ObjectName (strcase ObjectName) pcnt 0)
  (mip:layer-status-save)
  (vlax-for item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (if (= (vla-get-IsXRef item) :vlax-false)
      (progn
	(setq cnt 0 tmp (strcat "Inspected: " (vla-get-name item)))
	(grtext -1 tmp)
	(vlax-for   sub_item item
	  (terpri)(princ (vla-get-ObjectName sub_item))
	  (setq cnt (1+ cnt))
	  (if (zerop(rem cnt 10))(grtext -1 (strcat tmp " : " (itoa cnt))))
	  (vl-catch-all-apply
	    '(lambda()
	       (if (= (strcase(vla-get-ObjectName sub_item)) ObjectName)
		 (progn
		   (vla-delete sub_item)
		   (setq pcnt (1+ pcnt))
		   )
		 )
	       )
     )
   ) ;_ end of vlax-for
   )
      ) ;_ end of if 
    ) ;_ end of vlax-for 
  (mip:layer-status-restore)
  (vl-cmdf "_.Regenall")
  (alert (strcat (itoa pcnt) " point deleted"))
  (princ)
  )
  (defun mip:layer-status-restore () 
    (foreach item *MIP_LAYER_LST*
      (if (not (vlax-erased-p (car item))) 
        (vl-catch-all-apply 
          '(lambda () 
             (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
             (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
             ) ;_ end of lambda 
          ) ;_ end of vl-catch-all-apply 
        ) ;_ end of if 
      ) ;_ end of foreach
    (setq *MIP_LAYER_LST* nil)
    ) ;_ end of defun 

  (defun mip:layer-status-save ()
    (setq *MIP_LAYER_LST* nil)
    (vlax-for item (vla-get-layers *kpblc-activedoc*) 
      (setq *MIP_LAYER_LST* (cons (list item 
                                  (cons "freeze" (vla-get-freeze item)) 
                                  (cons "lock" (vla-get-lock item)) 
                                  ) ;_ end of cons 
                            *MIP_LAYER_LST* 
                            ) ;_ end of cons 
            ) ;_ end of setq 
      (vla-put-lock item :vlax-false)
      (if (= (vla-get-freeze item) :vlax-true)
      (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))))
      ) ;_ end of vlax-for
    ) ;_ end of defun
Вызов
Код:
[Выделить все]
^C^C(mip:del-ObjectbyName "AcDbPoint");
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.10.2009, 20:16
#8
kheylan


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


VVA почему-то получается вот так
Команда: (mip:del-ObjectbyName "AcDbPoint")
неверный тип аргумента: VLA-OBJECT nil
хотя все вроде правильно делал, сохранил первую часть как del-ObjectbyName.lsp, подгрузил, ввел команду
kheylan вне форума  
 
Непрочитано 05.10.2009, 20:25
#9
Vova

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


А нельзя-ли просто поменять стиль точки на такой, которой не видно? (вторая в окне стилей). И вообще странно, что у вас массовое применение точек, а пользователь не умеет привести точку к невидимой. Вероятно вашему Cad manager попался чертеж с огромными крестами.
Vova вне форума  
 
Автор темы   Непрочитано 05.10.2009, 20:34
#10
kheylan


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


>>>Vova
Просто мы работаем на субподряде с разными организациями и приходится приводить их чертежи в порядок, а стиль точки неизвестно как у заказчика отзовется или в головной конторе, куда мы отсылаем dwg
kheylan вне форума  
 
Непрочитано 05.10.2009, 21:05
#11
Profan


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


Плохо ваши авторы CAD Стандарта Предприятия знают AutoCAD. Отображение точки в AutoCAD'е определяется переменной PDMODE, а размер отображения - переменной PDSIZE. Обе эти переменные сохраняются в чертеже и поэтому совершенно неважно, как отображается точка в чертежах ДРУГИХ организаций.
Profan вне форума  
 
Автор темы   Непрочитано 06.10.2009, 05:12
#12
kheylan


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


>>>VVA
Спасибо! Поклон до земли!
Нашел в чем причина
надо заменить *kpblc-activedoc* на (vla-get-activedocument (vlax-get-acad-object))
Программа работает! Ура!
Макрос на кнопку:
Удалить все точки
^C^C^P(if (null mip:del-ObjectbyName)(load "del-ObjectbyName"));^P(mip:del-ObjectbyName "AcDbPoint");
Вложения
Тип файла: lsp del-ObjectbyName.LSP (2.5 Кб, 72 просмотров)
Тип файла: dwg
DWG 2007
Удалить точки.dwg (165.3 Кб, 918 просмотров)

Последний раз редактировалось kheylan, 07.10.2009 в 06:42.
kheylan вне форума  
 
Непрочитано 06.10.2009, 08:07
#13
wetr

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


Цитата:
Сообщение от Profan Посмотреть сообщение
Плохо ваши авторы CAD Стандарта Предприятия знают AutoCAD. Отображение точки в AutoCAD'е определяется переменной PDMODE, а размер отображения - переменной PDSIZE. Обе эти переменные сохраняются в чертеже и поэтому совершенно неважно, как отображается точка в чертежах ДРУГИХ организаций.
А если часть чертежа вместе с точками будет скопирована в другой файл?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 06.10.2009, 08:10
#14
Profan


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


Ты тоже AutoCAD не знаешь?
Profan вне форума  
 
Непрочитано 06.10.2009, 08:14
#15
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от wetr Посмотреть сообщение
А если часть чертежа вместе с точками будет скопирована в другой файл?
Ну Profan же и говорит, что они будут отображаться в зависимости от настроенного в том чертеже стиля точек. Если в исходном были крестики, а в приемном настроено на квадратики, значит будут квадратики.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 06.10.2009, 08:20
#16
kheylan


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


Продолжим тему инструменты CAD Стандарта, который на основе AutoCAD 2009. Что делать с чужим чертежом, который необходим тебе для работы?!
После прихода чертежа со стороны, он сначала проходит обработку в два этапа

Первая кнопка (1), назовем ее - Выбрать все в буфер обмена,
ее функции - Очистка чертежа от мусора, копирование его в буфер обмена, открытие нового чертежа для вставки его в среду CAD Стандарта
^C^C^P(if(not(member "explodeproxy2007.arx" (arx)))(arxload "explodeproxy2007.arx"));EXPLODEALLPROXY;REMOVEALLPROXY;_Y;_AUDIT;_Y;_LAYERP;_LAYERP;_-Purge;_All;;_N;_.convert;;; _ai_selall;_Copyclip;_Qnew;
Часть команд взято отсюда http://forum.dwg.ru/showthread.php?t=14455 , большое спасибо автору.
Т.е. сохраняем оригинал и получаем содержимое модели в буфере обмена

Вторая кнопка (2), назовем ее - Вставить из буфера обмена,
ее функции - Вставить все из буфер обмена в новый чертеж и показать все в пределах чертежа
^C^C_pasteorig;'_.zoom _e
Т.е. получаем содержимое модели в нашем шаблоне

Третий этап делаем вручную, с помощью Центра Управления перетаскиваем листы

Вопрос: Реально все это объединить в одну команду или как это происходит у Вас!?
kheylan вне форума  
 
Непрочитано 06.10.2009, 08:49
#17
wetr

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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Ну Profan же и говорит, что они будут отображаться в зависимости от настроенного в том чертеже стиля точек. Если в исходном были крестики, а в приемном настроено на квадратики, значит будут квадратики
Я имею ввиду такую ситуацию:
Автор отправляет чертеж с точками, настроенными на "невидимость" PDMODE=1. Тамошние проектировщики копируют часть чертежа себе в файл, с настройками PDMODE=100. Получаются козюльки и автору темы объявляют выговор.
Вот поэтому точки и удаляют
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 06.10.2009, 08:55
#18
Кулик Алексей aka kpblc
Moderator

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


kheylan, а зачем так геморройно? Можно (примерно) так:
Код:
[Выделить все]
(defun clear-dwg (/ adoc err *error*)
                 ;|
*    Очистка файла
|;

  (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))))
  (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)
                       (setq cadver (atoi (vl-string-trim "VISUALP " (strcase (ver)))))
                       (arxload (findfile "explodeproxy2007.arx"))
                       (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
Код особо не гонял.
P.S. Тему все же переименуй
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 06.10.2009 в 11:08.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2009, 08:59
#19
Profan


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


Для wetr.
С какой стати они будут объявлять выговор? Точка ("Point") - стандартный объект AutoCAD'а. Этак можно по куче позиций надавать выговоров тем, у кого берешь чертеж и который не соответствует твоим понятиям о "правильности" чертежа. Точка может использоваться, например, как уникальный объект для привязки. Но ты можешь про себя изрыгать сколько угодно проклятий, но не имеешь права мне объявлять выговор. Не нравится точка или не умеешь поменять ее отображение - воспользуйся приведенной здесь программой.

А вот ко мне пришли чертежи, сделанные в CorelDRAW. Я пойду и объявлю авторам анафему.
Profan вне форума  
 
Непрочитано 06.10.2009, 09:15
#20
wetr

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


Цитата:
Сообщение от Profan Посмотреть сообщение
Плохо ваши авторы CAD Стандарта Предприятия знают AutoCAD. Отображение точки в AutoCAD'е определяется переменной PDMODE, а размер отображения - переменной PDSIZE. Обе эти переменные сохраняются в чертеже и поэтому совершенно неважно, как отображается точка в чертежах ДРУГИХ организаций.
Для Profan.
Зачем вы так? Вы ведь даже не знаете этих "авторов CAD Стандарта Предприятия". Не знаете ситуации, в которой они находятся и что именно их побудило заняться удалением точек.

Пример привел лишь для того, чтоб вы не были так категоричны. Повторюсь: ситуации бывают разные.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Инструменты поддержки CAD Cтандарта предприятия

Размещение рекламы