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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > вызов через command или передать объекты во внешнюю команду

вызов через command или передать объекты во внешнюю команду

Ответ
Поиск в этой теме
Непрочитано 19.10.2006, 17:05 #1
вызов через command или передать объекты во внешнюю команду
Mr_Eugene
 
инженер-проектировщик
 
Москва.Терна
Регистрация: 05.10.2006
Сообщений: 33

Граждане,
подскажите как поступить!

я получаю SelectionSet (переменная nabor01) с блоками,
которые надо расколбасить командой burst из ET, чтоб атрибуты сохранить

вариант
Код:
[Выделить все]
(load "burst.lsp" "Not found ExpressTools")
         (repeat (vla-get-Count nabor01)
            (setq teq (vlax-vla-object->ename (vla-Item nabor01 p)))
            (setq p (1+ p))
            (command "burst" teq)
         );repeat
радостно сообщает, что команды "burst" нету
ну и фиг с ним
думал по другому:
Код:
[Выделить все]
(load "burst.lsp" "Not found ExpressTools")
         (repeat (vla-get-Count nabor01)
            (setq teq (vlax-vla-object->ename (vla-Item nabor01 p)))
            (setq p (1+ p))
            (c:burst)
         );repeat
программа вызывается, но , естессно, требует объект
вот и думаю теперь как бы это так поизящней сделать
т.к. пихать объект в набор, подсвечивать через sssfirst, а потом burst вызывать не хоцца

а может я через command че не так делаю?

помогите, плиз!
Просмотров: 3166
 
Непрочитано 19.10.2006, 17:28
#2
Кулик Алексей aka kpblc
Moderator

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


Рецепт Евгения Елпанова: есть еще такая фенька, как burst-one. Если просмотреть burst.lsp, то там можно увидеть определение этой функции. В качестве параметра передается ename-указатель на примтив.
Мой вариант: выделить набор через (sssetfirst nabor1 nabor1) и натравить на него c:burst.
Кстати, перед работой этого лиспа преобразуй набор в список - тогда не получишь грабель.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2006, 18:03
#3
Mr_Eugene

инженер-проектировщик
 
Регистрация: 05.10.2006
Москва.Терна
Сообщений: 33


спасибо!

про sssetfirst уже думал....

хочу попробовать burst-one тока не знаю как подгрузить внутреннюю функцию
вызов (burst-one) после (load "burst.lsp") не помогает
Mr_Eugene вне форума  
 
Непрочитано 20.10.2006, 08:41
#4
Кулик Алексей aka kpblc
Moderator

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


Я тупо скопировал код burst.lsp, слегка его поменяв в части выбора:
Код:
[Выделить все]
(defun try-to-do (/ adoc burst-one lastent item bump)

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

  (defun bitset (a b) (= (boole 1 a b) b))
  (setq bcnt 0)
  (defun bump (prmpt)
    (princ
      (nth bcnt '("\r-" "\r\\" "\r|" "\r/"))
      ) ;_ end of Princ
    (setq bcnt (rem (1+ bcnt) 4))
    ) ;_ end of Defun

  (defun att-text (aent / tent ilist inum)
    (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 Defun

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

  (defun burst-one (bname    /        bent     aname    ent      atype
                    aent     again    ename    ent      ss-color ss-layer
                    ss-ltype mirror   ss-mirror         mlast
                    )
    (setq
      bent   (entget bname)
      blayer (item 8 bent)
      bcolor (item 62 bent)
      bcolor (cond
               ((> bcolor 0) bcolor)
               ((= bcolor 0) "BYBLOCK")
               ("BYLAYER")
               ) ;_ end of Cond
      bltype (cond ((item 6 bent))
                   ("BYLAYER")
                   ) ;_ end of Cond
      ) ;_ end of Setq
    (setq elast (lastent))
    (if (= 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 progn
      ) ;_ end of if
    (if (> (sslength ss-color) 0)
      (progn
        (bump "Fixing colors")
        (command "_.chprop" ss-color "" "_C" bcolor "")
        ) ;_ end of progn
      ) ;_ end of if
    (if (> (sslength ss-ltype) 0)
      (progn
        (bump "Fixing linetypes")
        (command "_.chprop" ss-ltype "" "_LT" bltype "")
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of defun

  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (foreach ent (vl-remove-if
                 'listp
                 (mapcar 'cadr (ssnamex (ssget '((0 . "INSERT") (66 . 1)))))
                 ) ;_ end of vl-remove-if
    (burst-one ent)
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.10.2006, 09:28
#5
Mr_Eugene

инженер-проектировщик
 
Регистрация: 05.10.2006
Москва.Терна
Сообщений: 33


ага
баальшое спасибо!
Mr_Eugene вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > вызов через command или передать объекты во внешнюю команду

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