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

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

Команда Burst

Ответ
Поиск в этой теме
Непрочитано 06.07.2010, 14:46 #1
Команда Burst
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Подскажите, как сделать так, что бы команда Burst (команда из экспресса), после однократного выбора всех объектов, повторялась 4 раза...куда добавить repeat?
Просмотров: 7989
 
Непрочитано 06.07.2010, 15:08
#2
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Из HELP-а:

Цитата:
AutoLISP Reference Guide > AutoLISP Functions > R Functions >
repeat


Evaluates each expression a specified number of times, and returns the value of the last expression

(repeat int [expr...])
Arguments

int
An integer. Must be a positive number.

expr
One or more atoms or expressions.

Return Values

The value of the last expression or atom evaluated. If expr is not supplied, repeat returns nil.

Examples

Command: (setq a 10 b 100)

100

Command: (repeat 4 (setq a (+ a 10)) (setq b (+ b 100)))

500

After evaluation, a is 50, b is 500, and repeat returns 500.

If strings are supplied as arguments, repeat returns the last string:

Command: (repeat 100 "Me" "You")

"You"
E-degtyarev вне форума  
 
Автор темы   Непрочитано 06.07.2010, 15:12
#3
Zaghim


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


Да это все понятно. Суть вопроса в том, куда именно запихнуть рипит, что бы команда burst проработала 4 раза с единожды выбранными объектами. Это делается потому что иногда люди делают БЛОК В БЛОКЕ и так сколь угодно раз.

Попробуйте применить эту команду к обычному блоку и посмотреть результат. А теперь сделайте блок и него запихните еше один блок и повторите команду...снимется так скажем только первый слой) и еще один блок останется.

Последний раз редактировалось Zaghim, 06.07.2010 в 15:18.
Zaghim вне форума  
 
Непрочитано 06.07.2010, 15:18
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Простым добавлением repeat, думаю, не получится. Нужно серьезные изменения в код вносить.
Do$ вне форума  
 
Непрочитано 06.07.2010, 15:27
#5
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(repeat 4
(command "burst" "_p")
)
Ну и далее по логике command...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.07.2010, 15:33
#6
Zaghim


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


Так все-таки получится, что я 4 раза буду рамкой объекты выбирать...
Zaghim вне форума  
 
Непрочитано 06.07.2010, 15:35
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Так все-таки получится, что я 4 раза буду рамкой объекты выбирать...
а запомнить выбор и подставлять его 4 раза не судьба?
hwd вне форума  
 
Непрочитано 06.07.2010, 15:36
#8
Кулик Алексей aka kpblc
Moderator

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


Образец файла можешь кинуть? А то у меня такой вложенности блоков с атрибутами не бывает. А идея (правда, всего одна) есть.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.07.2010, 15:36
#9
Zaghim


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


Судьба, только вот не знаю как. Помогите
Вложения
Тип файла: dwg
DWG 2004
Drawing3.dwg (33.8 Кб, 930 просмотров)
Тип файла: lsp burst.lsp (7.7 Кб, 86 просмотров)
Zaghim вне форума  
 
Непрочитано 06.07.2010, 15:43
#10
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
а запомнить выбор и подставлять его 4 раза не судьба?
Команда burst расчленяет блок на составляющие. То, что будет запомнено, в чертеже уже не будет существовать.
Do$ вне форума  
 
Автор темы   Непрочитано 06.07.2010, 15:47
#11
Zaghim


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


Я тоже об этом думал...
Кстати вместо (command "burst")
нужно писать (C:burst)
Zaghim вне форума  
 
Непрочитано 06.07.2010, 15:47
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
Команда burst расчленяет блок на составляющие. То, что будет запомнено, в чертеже уже не будет существовать.
пардон... не посмотрел что это за команда...
hwd вне форума  
 
Автор темы   Непрочитано 06.07.2010, 15:53
#13
Zaghim


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


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

(Defun C:burs ()

(command "-layer" "n" "X-ref" "c" "8" "X-ref" "s" "X-ref" "" "")

(repeat 4
(C:burst)
)

(command "chprop" "all" "" "c" "bylayer" "")

)

Как сделать, что бы она не вываливалась, якобы с ошибкой, а выполнила последнюю команду?
Zaghim вне форума  
 
Непрочитано 06.07.2010, 15:56
#14
Кулик Алексей aka kpblc
Moderator

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


Пробуй
Код:
[Выделить все]
(defun repeat-burst (range / lastent item bcnt selset last_ent burst-one explodable att-text)

  (defun item (n e) (cdr (assoc n e)))

  (defun bitset (a b) (= (boole 1 a b) b))

  (defun bump (prmpt)
    (princ
      (nth bcnt '("\r-" "\r\\" "\r|" "\r/"))
      ) ;_ end of Princ
    (setq bcnt (rem (1+ bcnt) 4))
    ) ;_ end of defun

  (defun lastent (/ e0 en)
    (setq e0 (entlast))
    (while (setq en (entnext e0))
      (setq e0 en)
      ) ;_ end of While
    e0
    ) ;_ end of defun

  (defun att-text (aent / aname tent ilist inum)
    (setq aname (cdr (assoc -1 aent)))
    (if (_matts_util aname)
      (progn
          ; Multiple Line Text Attributes (MATTS) -
          ; make an MTEXT entity from the MATTS data
        (_matts_util aname 1)
        ) ;_ end of progn
      (progn
          ; else -Single line attribute conversion
        (setq tent '((0 . "TEXT")))
        (foreach inum '(8 6 38 39 62 67 210 10 40 1 50 41 51 7 71 72 73 11 74)
          (if (setq ilist (assoc inum aent))
            (setq tent (cons ilist tent))
            ) ;_ end of If
          ) ;_ end of ForEach
        (setq
          tent (subst
                 (cons 73 (item 74 aent))
                 (assoc 74 tent)
                 tent
                 ) ;_ end of Subst
          ) ;_ end of Setq
        (entmake (reverse tent))
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of defun

  (defun explodable (bname / b expld)
    (vl-load-com)
    (setq blocks (vla-get-blocks
                   (vla-get-activedocument (vlax-get-acad-object))
                   ) ;_ end of vla-get-blocks
          ) ;_ end of setq

    (vlax-for b blocks
      (if (and (= :vlax-false (vla-get-islayout b))
               (= (strcase (vla-get-name b)) (strcase bname))
               ) ;_ end of and
        (setq expld (= :vlax-true (vla-get-explodable b)))
        ) ;_ end of if
      ) ;_ end of vlax-for
    expld
    ) ;_ end of defun

  (defun burst-one (bname / bent aname ent atype aent again ename ent bblock ss-color ss-layer ss-ltype mirror ss-mirror
                    mlast)
    (setq
      bent   (entget bname)
      blayer (cdr (assoc 8 bent))
      bcolor (cdr (assoc 62 bent))
      bblock (cdr (assoc 2 bent))
      bcolor (cond
               ((> bcolor 0) bcolor)
               ((= bcolor 0) "BYBLOCK")
               ("BYLAYER")
               ) ;_ end of Cond
      bltype (cond ((cdr (assoc 6 bent)))
                   ("BYLAYER")
                   ) ;_ end of Cond
      ) ;_ end of Setq
    (setq elast (lastent))
    (if (and (explodable bblock) (= 1 (item 66 bent)))
      (progn
        (setq aname bname)
        (while (setq
                 aname (entnext aname)
                 aent  (entget aname)
                 atype (item 0 aent)
                 again (= "ATTRIB" atype)
                 ) ;_ end of Setq
          (bump "Converting attributes")
          (att-text aent)
          ) ;_ end of While
        ) ;_ end of Progn
      ) ;_ end of If
    (progn
      (bump "Exploding block")
      (acet-explode bname)
          ;(command "_.explode" bname)
      ) ;_ end of Progn
    (setq
      ss-layer (ssadd)
      ss-color (ssadd)
      ss-ltype (ssadd)
      ename    elast
      ) ;_ end of Setq
    (while (setq ename (entnext ename))
      (bump "Gathering pieces")
      (setq
        ent   (entget ename)
        etype (item 0 ent)
        ) ;_ end of Setq
      (if (= "ATTDEF" etype)
        (progn
          (if (bitset (item 70 ent) 2)
            (att-text ent)
            ) ;_ end of If
          (entdel ename)
          ) ;_ end of Progn
        (progn
          (if (= "0" (item 8 ent))
            (ssadd ename ss-layer)
            ) ;_ end of If
          (if (= 0 (item 62 ent))
            (ssadd ename ss-color)
            ) ;_ end of If
          (if (= "BYBLOCK" (item 6 ent))
            (ssadd ename ss-ltype)
            ) ;_ end of If
          ) ;_ end of Progn
        ) ;_ end of If
      ) ;_ end of While
    (if (> (sslength ss-layer) 0)
      (progn
        (bump "Fixing layers")
        (command
          "_.chprop" ss-layer "" "_LA" blayer "") ;_ end of command
 ;_ end of command
        ) ;_ end of Progn
      ) ;_ end of If
    (if (> (sslength ss-color) 0)
      (progn
        (bump "Fixing colors")
        (command
          "_.chprop" ss-color "" "_C" bcolor "") ;_ end of command
 ;_ end of command
        ) ;_ end of Progn
      ) ;_ end of If
    (if (> (sslength ss-ltype) 0)
      (progn
        (bump "Fixing linetypes")
        (command
          "_.chprop" ss-ltype "" "_LT" bltype "") ;_ end of command
 ;_ end of command
        ) ;_ end of Progn
      ) ;_ end of If
    ) ;_ end of defun

  (if (= (type (setq selset (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (ssget '((0 . "INSERT")))
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'pickset
         ) ;_ end of =
    (progn
      (setq bcnt     0
            last_ent (entlast)
            selset   ((lambda (/ tab item)
                        (repeat (setq tab  nil
                                      item (sslength selset)
                                      ) ;_ end setq
                          (setq tab (cons (ssname selset (setq item (1- item))) tab))
                          ) ;_ end of repeat
                        ) ;_ end of lambda
                      )
            ) ;_ end of setq
      (repeat range
        (foreach ent selset
          (burst-one ent)
          ) ;_ end of foreach
        (setq selset (vl-remove-if-not
                       (function
                         (lambda (x)
                           (= (cdr (assoc 0 (entget x))) "INSERT")
                           ) ;_ end of lambda
                         ) ;_ end of function
                       ((lambda (/ res)
                          (while (and last_ent (setq last_ent (entnext last_ent)))
;;; Где-то тут понадобится включать _.chprop
;;; Хотя лично я бы делал не так.
                            (setq res (cons last_ent res))
                            ) ;_ end of while
                          (reverse res)
                          ) ;_ end of lambda
                        )
                       ) ;_ end of vl-remove-if-not
              ) ;_ end of setq
        ) ;_ end of repeat
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.07.2010, 16:05
#15
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Offtop: Сдается мне, что достаточно было бы explode
Do$ вне форума  
 
Автор темы   Непрочитано 06.07.2010, 16:06
#16
Zaghim


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


Вместо этого
(defun repeat-burst (range / lastent item bcnt selset last_ent burst-one explodable att-text)

сделал так
(defun с:rburst (range / lastent item bcnt selset last_ent burst-one explodable att-text)

и не работает, пишет оч много аргументов


Еще попутный вопрос
Нужно разомкнуть все имеющиеся слои... если делать в каде по команде -layer порядок действий такой:
(command "-layer" "u" "" "all" "" "") послу u напишите имя слоя или выбрать объекты, т.е. если нажать enter появится возможнось их выбрать, можно нажать олл и выбрать все..а вот через лисп такая фигня не проходит....возможно сделать такое?
Zaghim вне форума  
 
Непрочитано 06.07.2010, 16:09
#17
Кулик Алексей aka kpblc
Moderator

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


Do$, в данном конкретном случае (то есть для представленого блока) - возможно.
Zaghim, делай так:
Код:
[Выделить все]
(defun c:rburst()
(repeat-burst 4)
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.07.2010, 16:22
#18
Zaghim


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


Работает!!!! Спасибо!!!!
Теперь вопрос с анлоком всех слоев только остался

И еще

(defun c:rburst()

;(command "-layer" "u" "" "all" "" "") --- с этим косяк
(command "-layer" "n" "X-ref" "c" "8" "X-ref" "s" "X-ref" "" "")

(repeat-burst 4)
(command "chprop" "all" "" "c" "bylayer" "") --- эта команда в упор не хочет работать, не пойму почему ((((((
)
Zaghim вне форума  
 
Непрочитано 06.07.2010, 16:50
#19
Vova

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


А теперь представь, что в блоке есть пунктирные линии. Команда Burst превратит их в сплошные. Теперь представь, в блоке есть скрытые атрубуты. Они вылезут наружу. Баги команды Burst oписаны и исправлены в теме, название которой типа Баги Express, ребята подскажут поточнее, от VVA. Со своей проблемой подожди немного, сейчас готовится статья, там такие случаи разбираются
Vova вне форума  
 
Автор темы   Непрочитано 06.07.2010, 17:48
#20
Zaghim


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


Времени ждать пока нету, надо наколбасить эту штуку, что бы x-ref готовить по-быстрому...

Поэтому просьба помочь с этими командами...почему они не выполняются?
Zaghim вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда Burst

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Печать из модели по выбору объекта zenon Программирование 192 04.05.2017 09:41
Преобразование полей в текст YuraVel AutoCAD 17 14.04.2015 14:30
ACAD-2002. Глюк начальной загрузки ЛИСП? ===AAA=== LISP 27 31.08.2005 07:58