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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Расстановка номеров пикетов по трассе трубопровода.

Расстановка номеров пикетов по трассе трубопровода.

Ответ
Поиск в этой теме
Непрочитано 19.06.2009, 13:12
Расстановка номеров пикетов по трассе трубопровода.
Jeriko
 
Регистрация: 18.06.2009
Сообщений: 118

Имеется план трассы трубопровода, необходимо каждые 100м проставить номер пикета (ПК00+00, ПК01+00...ПК99+00).

С помощью команды _measure можно проставить пикетаж по трассе, но тогда номера пикетов приходится проставлять вручную, что при большой длине трассы занимает довольно много времени.

Отсюда вопрос: каким образом можно научить автокад, автоматически проставлять номера пикетов по возрастающей ПК00+00, ПК01+00 и тд?Есть ли возможность реализовать это с помощью динамического блока? Или с помощью команды _dataextraction, можно ли создать связь с экселем , таким образом чтобы при изменении значения в экселе менялось значение текста на самом чертеже?
Просмотров: 53516
 
Автор темы   Непрочитано 25.06.2009, 08:54
#21
Jeriko


 
Регистрация: 18.06.2009
Сообщений: 118


То, что нужно! Шикарно работает, теперь работа которая раньше занимала часа 4 делается за 1 минуту! Виктор, спасибо Вам огромное!
Jeriko вне форума  
 
Непрочитано 25.06.2009, 10:40
#22
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Jeriko, а вот теперь я упустил здесь ход мысли... Поясните коротенько плиз, как это должно правильно работать, - мне тоже пригодится.
У меня получается с этим лиспом, что для каждого пикета нужен щелчок ПКМ или ввод.
Так должно быть или должно быть автоматом - сразу все пикеты по всей выбраной полилинии?
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 10:59
#23
Jeriko


 
Регистрация: 18.06.2009
Сообщений: 118


Все автоматом делается, лисп сразу проставляет блоки по трассе с заданным шагом и нумерует их.

Алгоритм такой: создаете блок с атрибутом / далее запукаете лисп (_b2p) / пишете название блока, который необходимо рассавить по трассе / указываете шаг расстановки / число с которого начнется нумерация блока / шаг нумерации / пишите префикс (если он не нужен жмете пробел) / пишите суффикс (если он не нужен жмете пробел) / выбираете объект по которому необходимо раставить блоки и вуаля, все готово
Jeriko вне форума  
 
Непрочитано 25.06.2009, 11:44
#24
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Ну вроде все так и делаю... - блок точка с атрибутом по умолчанию хх
запускаю лисп и далее по тексту...
После выбора полилинии ставит в ее начале блок - хх и точка и все Если щелкать дальше то ставит пикеты... с таким логом:
Команда: b2p
Name of blok? 1
Distance? 100
Start number? 0
Step? 1
Prefiks? ПК
Suffiks?
Выберите объект: 63.694577
63.694577
63.694577
63.694577
63.694577

и.т.д.
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 12:29
#25
Jeriko


 
Регистрация: 18.06.2009
Сообщений: 118


А что вы в качестве объекта выбираете? Нужно линию по которой необходимо раставить пикеты выбирать.

Вот на этом чертеже все работает. Сравните.
Вложения
Тип файла: dwg
DWG 2007
Measure.dwg (189.5 Кб, 3329 просмотров)

Последний раз редактировалось Jeriko, 25.06.2009 в 12:37. Причина: добавление
Jeriko вне форума  
 
Непрочитано 25.06.2009, 12:37
#26
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


skif58, скорее всего писалось для одной версии акада, а вы работаете в другой, и в какой-то комманде лиспа, изменилось формула приглашения, или добавилась какая нибудь опция
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 25.06.2009, 12:44
#27
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
А что вы в качестве объекта выбираете? Нужно линию по которой необходимо раставить пикеты выбирать.
Ну да. Вот картинка.
Похоже sasha_lif прав... - у меня 2008-ой русский...
Ну да ладно... - если нажать и держать ввод, то все получается автоматом...
Миниатюры
Нажмите на изображение для увеличения
Название: Пикетаж.gif
Просмотров: 377
Размер:	292.0 Кб
ID:	22842  
__________________
*...И Случай, бог изобретатель. *

Последний раз редактировалось skif58, 25.06.2009 в 12:50.
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 12:50
#28
Jeriko


 
Регистрация: 18.06.2009
Сообщений: 118


skif58, у меня тоже автокад 2008 русский стоит, так что думаю не в этом дело.

Последний раз редактировалось Jeriko, 25.06.2009 в 12:52. Причина: опечатка
Jeriko вне форума  
 
Непрочитано 25.06.2009, 12:52
#29
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
skif58, у меня тока автокад 2008 русский стоит, так что думаю не в этом дело.
Тогда странно...
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 12:54
#30
Jeriko


 
Регистрация: 18.06.2009
Сообщений: 118


Попробуйте в моем файле этот лисп применить.
Jeriko вне форума  
 
Непрочитано 25.06.2009, 14:15
#31
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
Попробуйте в моем файле этот лисп применить.
С Вашим блоком работает, с моим нет.
И ориентация блока не та. Сравните плиз с моим блоком 2, может я блок как-то не так делаю?
Вложения
Тип файла: dwg
DWG 2007
Measure_Re.dwg (191.3 Кб, 3092 просмотров)
__________________
*...И Случай, бог изобретатель. *

Последний раз редактировалось skif58, 25.06.2009 в 14:28.
skif58 вне форума  
 
Непрочитано 25.06.2009, 14:43
#32
Hohotun


 
Регистрация: 11.12.2006
Сообщений: 24


а можно ли как нибудь сделать что бы пикеты были горизонтально а не выравнивались в зависимости от трассы?
Hohotun вне форума  
 
Непрочитано 25.06.2009, 14:56
#33
zenon

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


Victor, может еще пару запросов пусть обрабатывает??
  1. А если надо расстановку не с определенным шагом, а каждый раз разное?? Думаю надо добавить, что-то типа команд _divide и _measure
  2. Также Hohotun правильно указал нужен запрос на разрешение поворота блока, опять же по типу выше указанных команд
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 15:14
#34
Hohotun


 
Регистрация: 11.12.2006
Сообщений: 24


Цитата:
Сообщение от zenon Посмотреть сообщение
Также Hohotun правильно указал нужен запрос на разрешение поворота блока, опять же по типу выше указанных команд
я имел ввиду не столько всего блока а именно текста, тоесть засечки рапологаются перепендикулярно трассе а текст горизонтально.
Hohotun вне форума  
 
Непрочитано 25.06.2009, 15:22
#35
zenon

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


Цитата:
Сообщение от Hohotun Посмотреть сообщение
я имел ввиду не столько всего блока а именно текста, тоесть засечки рапологаются перепендикулярно трассе а текст горизонтально.
гдето мелькала прога по изменению свойств аттрибутов блока, поищи.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 15:25
#36
Кулик Алексей aka kpblc
Moderator

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


Ну тогда, как вариант:
Код:
[Выделить все]
(vl-load-com)

(defun test (/                    *error*              blk_name             blk_def              blk_ref
             dist                 prefix               suffix               curve                curve_len
             space                att                  _kpblc-conv-vla-to-list                   _kpblc-conv-ent-to-vla
             _kpblc-conv-ent-to-ename                  fun_conv-list-to-string
             fun_get-attr-by-blockref
             )

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

  (defun fun_get-attr-by-blockref (ent)
    (apply (function append)
           (mapcar (function _kpblc-conv-vla-to-list)
                   (list (vla-getattributes ent) (vla-getconstantattributes ent))
                   ) ;_ end of mapcar
           ) ;_ end of apply
    ) ;_ end of defun

  (defun fun_conv-list-to-string (lst sep)
    (cond
      ((listp lst)
       (strcat (vl-princ-to-string (car lst))
               (apply (function strcat)
                      (mapcar
                        (function
                          (lambda (x)
                            (strcat sep (vl-princ-to-string x))
                            ) ;_ end of lambda
                          ) ;_ end of function
                        (cdr lst)
                        ) ;_ end of mapcar
                      ) ;_ end of apply
               ) ;_ end of strcat
       )
      (t
       (vl-princ-to-string lst)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((listp value)
       (mapcar '_kpblc-conv-vla-to-list value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (setq value (_kpblc-conv-ent-to-vla value))
            (and (= (type value) 'vla-object)
                 (vlax-property-available-p value 'count)
                 ) ;_ end of and
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в vla-указатель.
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в указатель. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-vla (entlast))
(_kpblc-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object) ent_value)
      ((= (type ent_value) 'ename) (vlax-ename->vla-object ent_value))
      ((setq res (_kpblc-conv-ent-to-ename ent_value))
       (vlax-ename->vla-object res)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value /)
                                  ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в примитив. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object)
       (vlax-vla-object->ename ent_value)
       )
      ((= (type ent_value) 'ename) ent_value)
      ((= (type ent_value) 'str) (handent ent_value))
      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if
    (and (= (type
              (setq blk_name (vl-catch-all-apply
                               (function (lambda (/ res)
                                           (cond
                                             ((and (setq res (getstring "\nИмя блока <Указать> : "))
                                                   (/= res "")
                                                   ) ;_ end of and
                                              res
                                              )
                                             (t (cdr (assoc 2 (entget (car (entsel))))))
                                             ) ;_ end of cond
                                           ) ;_ end of lambda
                                         ) ;_ end of function
                               ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
            'str
            ) ;_ end of =
         (= (type
              (setq blk_def
                     (vl-catch-all-apply
                       (function
                         (lambda () (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk_name))
                         ) ;_ end of function
                       ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
            'vla-object
            ) ;_ end of =
         (= (type (setq dist (vl-catch-all-apply (function (lambda () (getdist "\nРасстояние <Отмена> : "))))))
            'real
            ) ;_ end of =
         (= (type (setq prefix (vl-catch-all-apply (function (lambda () (getstring "\nПрефикс <\"\"> : "))))))
            'str
            ) ;_ end of =
         (= (type (setq suffix (vl-catch-all-apply (function (lambda () (getstring "\nСуффикс <\"\"> : "))))))
            'str
            ) ;_ end of =
         (= (type
              (setq start (vl-catch-all-apply (function (lambda () (getint "\nСтартовый номер <Отмена> : ")))))
              ) ;_ end of type
            'int
            ) ;_ end of =
         (= (type (setq curve (vl-catch-all-apply
                                (function (lambda ()
                                            (princ "\nКривая для обработки : ")
                                            (vlax-ename->vla-object (ssname (ssget "_:E:S" '((0 . "*LINE"))) 0))
                                            ) ;_ end of lambda
                                          ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'vla-object
            ) ;_ end of =
         (=
           (type
             (setq
               att (vl-catch-all-apply
                     (function
                       (lambda (/ lst)
                         (vlax-for item blk_def
                           (if (wcmatch (strcase (vla-get-objectname item)) "*ATT*")
                             (setq lst (cons item lst))
                             ) ;_ end of if
                           ) ;_ end of vlax-for
                         (cond
                           ((= (length lst) 0)
                            (alert "В выбранном блоке нет атрибутов!")
                            (vla-endundomark adoc)
                            (princ)
                            (exit)
                            )
                           ((= (length lst) 1)
                            (vla-get-tagstring (car lst))
                            )
                           (t
                            (setq lst (mapcar (function vla-get-tagstring) (reverse lst)))
                            (initget (fun_conv-list-to-string lst " "))
                            (getkword
                              (strcat "\nАтрибут для автоназначения [" (fun_conv-list-to-string lst "/") "] <Отмена> : ")
                              ) ;_ end of getkword
                            )
                           ) ;_ end of cond
                         ) ;_ end of lambda
                       ) ;_ end of function
                     ) ;_ end of vl-catch-all-apply
               ) ;_ end of setq
             ) ;_ end of type
           'str
           ) ;_ end of =
         (/= att "")
         ) ;_ end of and
     (progn
       (setq curve_len (vlax-curve-getdistatpoint curve (vlax-curve-getendpoint curve))
             space     (vla-objectidtoobject adoc (vla-get-ownerid curve))
             cur_dist  0.
             ) ;_ end of setq
       (while (<= cur_dist curve_len)
         (setq blk_ref (vla-insertblock
                         space
                         (vlax-3d-point
                           (vlax-curve-getpointatdist curve cur_dist)
                           ) ;_ end of vlax-3d-point
                         blk_name
                         1.
                         1.
                         1.
                         (angle '(0. 0. 0.)
                                (vlax-curve-getfirstderiv
                                  curve
                                  (vlax-curve-getparamatdist curve cur_dist)
                                  ) ;_ end of vlax-curve-getFirstDeriv
                                ) ;_ end of angle
                         ) ;_ end of vla-InsertBlock
               ) ;_ end of setq
         ((lambda (/ att_ref)
            (setq att_ref (car (vl-remove-if-not
                                 (function
                                   (lambda (x)
                                     (wcmatch (strcase (vla-get-tagstring x)) (strcase att))
                                     ) ;_ end of lambda
                                   ) ;_ end of function
                                 (fun_get-attr-by-blockref blk_ref)
                                 ) ;_ end of vl-remove-if-not
                               ) ;_ end of car
                  ) ;_ end of setq
            (vla-put-textstring att_ref (strcat prefix (vl-princ-to-string start) suffix))
            (vla-put-rotation att_ref 0.)
            ) ;_ end of lambda
          )
         (setq start    (1+ start)
               cur_dist (+ cur_dist dist)
               ) ;_ end of setq
         ) ;_ end of while
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.06.2009, 15:42
#37
Jeriko


 
Регистрация: 18.06.2009
Сообщений: 118


skif58, найди 10 отличий...искал, искал... не нашел, наши блоки идентичны, видимо проблемма в самом лиспе. причем попробовал команды _measure и _divide с вашим блоком все работает как надо, то есть ориентация у блоков получается перпендикулярно трассе, по чему лиспом они не расставляются я не знаю. С лиспом, который выложил Кулик Алексей aka kpblc, все работает, значит проблемма в самом лиспе.

Кулик Алексей aka kpblc, вопрос по лиспу: можно ли там какнибудь изменить ориентацию текста? тоесть добавить опцию выбора, размещать его горизонтально или же в соответствии с планом трассе.

Последний раз редактировалось Jeriko, 25.06.2009 в 15:53. Причина: добавление
Jeriko вне форума  
 
Непрочитано 25.06.2009, 15:49
#38
zenon

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


Кулик Алексей aka kpblc, критику немного наведу
1. запрос на приращение??
2. запрос на то, каким образом расставлять блоки
а) по указанной длине,
б) указание каждого последующего пикета
в) либо разбить на равное количество участков
3. запрос на поворот блока и его атрибута.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 15:54
#39
Кулик Алексей aka kpblc
Moderator

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


zenon, у меня времени на написание лиспа было около 15 минут... По идее (если делать нормальную команду) надо прописывать вообще диалог, в котором все и указывать. Вариант dcl-а я могу накидать, но на этом я и закончусь Делать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.06.2009, 16:04
#40
zenon

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


Конечно делать!!!!!!
А исправлять ошибки будешь??? или
Цитата:
на этом я и закончусь
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Расстановка номеров пикетов по трассе трубопровода.

Реклама i
Опции темы Поиск в этой теме
Поиск в этой теме:

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