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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать кнопку выполняющую функцию "Разрешить разчленение" блока"

Как создать кнопку выполняющую функцию "Разрешить разчленение" блока"

Ответ
Поиск в этой теме
Непрочитано 28.05.2012, 12:50 #1
Как создать кнопку выполняющую функцию "Разрешить разчленение" блока"
mvart
 
Регистрация: 07.06.2005
Сообщений: 290

Если в файле много блоков с закрытыми установками для расчленения ,как создать кнопку выполняющую функцию "Разрешить расчленение блока" выполняющую для всех блоков в файле ?
Просмотров: 5552
 
Непрочитано 28.05.2012, 12:58
#2
Кулик Алексей aka kpblc
Moderator

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


Руками - никак. Только если программу писать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.05.2012, 13:56
#3
mvart


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Руками - никак. Только если программу писать.
1 Спасибо за ответ .
2 Кто бы взялся за написание
mvart вне форума  
 
Непрочитано 28.05.2012, 14:27
#4
Кулик Алексей aka kpblc
Moderator

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


Без проверок:
Код:
[Выделить все]
 (vl-load-com)

(defun c:make-explodeable (/ adoc selset err err_lst)

  (defun _kpblc-conv-selset-to-ename (selset / tab item)
                                     ;|
*    Преобразование набора, полученного через ssget, в список ename-представлени
* примитивов.
*    Параметры вызова:
	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (cond
      ((not selset) nil)
      ((= (type selset) 'pickset)
       (repeat (setq tab  nil
                     item (sslength selset)
                     ) ;_ end setq
         (setq tab (cons (ssname selset (setq item (1- item))) tab))
         ) ;_ end repeat
       )
      ((= (type selset) 'vla-object)
       (_kpblc-conv-vla-to-list selset)
       )
      ((listp selset) selset)
      ) ;_ end of cond
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (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
      (foreach item (mapcar
                      (function
                        (lambda (x)
                          (vla-item (vla-get-blocks adoc) x)
                          ) ;_ end of LAMBDA
                        ) ;_ end of function
                      ((lambda (/ name_lst name)
                         (foreach ent (mapcar (function vlax-ename->vla-object)
                                              ((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
                                                 tab
                                                 ) ;_ end of lambda
                                               )
                                              ) ;_ end of mapcar
                           (if (not (member (setq name (strcase (vla-get-name ent))) name_lst))
                             (setq name_lst (cons name name_lst))
                             ) ;_ end of if
                           ) ;_ end of foreach
                         ) ;_ end of lambda
                       )
                      ) ;_ end of mapcar
        (if (vl-catch-all-error-p (setq err (vl-catch-all-apply
                                              (function
                                                (lambda ()
                                                  (vla-put-explodable item :vlax-true)
                                                  ) ;_ end of lambda
                                                ) ;_ end of function
                                              ) ;_ end of VL-CATCH-ALL-APPLY
                                        ) ;_ end of setq
                                  ) ;_ end of VL-CATCH-ALL-ERROR-P
          (setq err_lst (cons (vla-get-name item) (vl-catch-all-error-message err)))
          ) ;_ end of if
        ) ;_ end of foreach
      (if err_lst
        (princ (strcat "При обработке были обнаружены ошибки:"
                       (apply (function strcat)
                              (mapcar
                                (function
                                  (lambda (x)
                                    (strcat "\n" (car x) "\t: " (cdr x))
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                err_lst
                                ) ;_ end of mapcar
                              ) ;_ end of apply
                       ) ;_ end of strcat
               ) ;_ end of princ
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Тема перемещена в программирование
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.05.2012, 14:36
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от mvart Посмотреть сообщение
выполняющую для всех блоков в файле ?
ну если всех то можно и проще:
Код:
[Выделить все]
 (vl-load-com)
(vlax-for block
 (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
 (vla-put-explodable block :vlax-true))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.05.2012, 14:58
#6
mvart


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
1 (vl-load-com)
2 (vlax-for block
3 (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
4 (vla-put-explodable block :vlax-true))
Это весь Лисп код ?
mvart вне форума  
 
Непрочитано 28.05.2012, 15:07
#7
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от mvart Посмотреть сообщение
Это весь Лисп код ?
Этого достаточно, если обрабатывать ВСЕ блоки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.05.2012, 15:17
#8
mvart


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


прошу прощения но сохранив в ЛИСП
(vl-load-com)
(vlax-for block
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vla-put-explodable block :vlax-true))

загрузил в акад ,а как должна выглядеть команда на исполнение ?

Последний раз редактировалось mvart, 28.05.2012 в 15:38.
mvart вне форума  
 
Непрочитано 28.05.2012, 15:53
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Не поверишь - но это и есть команда на исполнение. Можешь завернуть ее в (defun c:имя_команды() текст из №5 ) и вызывать соответственно как назвал.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.05.2012, 16:11
#10
mvart


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Не поверишь - но это и есть команда на исполнение. Можешь завернуть ее в (defun c:имя_команды() текст из №5 ) и вызывать соответственно как назвал.
(defun c:raz(raz)
(vl-load-com)
(vlax-for block
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vla-put-explodable block :vlax-true))

при вызове получил:

Команда: _appload raz2.lsp успешно загружено.
Команда: ; ошибка: неверно сформированный список на входе
Команда:
mvart вне форума  
 
Непрочитано 28.05.2012, 16:12
#11
Кулик Алексей aka kpblc
Moderator

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


Закрывающую скобку забыл.
Код:
[Выделить все]
 (defun c:raz (raz)
  (vl-load-com)
  (vlax-for block
                  (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (vla-put-explodable block :vlax-true)
    ) ;_ end of vlax-for
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.05.2012, 16:19
#12
mvart


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


[quote=Кулик Алексей aka kpblc;925108]Закрывающую скобку забыл.
Код:
[Выделить все]

(defun c:raz (raz)
(vl-load-com)
(vlax-for block
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vla-put-explodable block :vlax-true)
) ;_ end of vlax-for
) ;_ end of defun

--------------

Спасибо. Но теперь в ответ получаю

Команда: raz
; ошибка: слишком мало аргументов
Команда:

Может из - за того что команда не в модели выполняется а в компоновке листа ?
mvart вне форума  
 
Непрочитано 28.05.2012, 16:25
#13
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от mvart Посмотреть сообщение
Может из - за того что команда не в модели выполняется а в компоновке листа ?
Нет, вместо c:raz(raz) напиши c:raz()
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 28.05.2012, 16:40
#14
mvart


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


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Нет, вместо c:raz(raz) напиши c:raz()

СПАСИБО
mvart вне форума  
 
Непрочитано 28.05.2012, 17:57
#15
VVA

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


Цитата:
Сообщение от mvart Посмотреть сообщение
Кто бы взялся за написание
Уже все давно написано. Non Exploding Blocks
Один из вариантов
Код:
[Выделить все]
(defun c:Expload  (/ Flag BlockObjects Ent)
(initget "Yes No")
(setq Flag (cond
           ((getkword "\Make All Explodable-Nonexplodable (Blocks+Xrefs) [Yes/No] <YES>: ") ) ( "Yes" )))
(setq BlockObjects (tblnext "BLOCK" T))
      (while BlockObjects
            (cond ((and
	          (setq Ent (entget (cdr (assoc -2 BlockObjects)))
		        Ent (entget (cdr (assoc 330 Ent))))
		(entmod (subst (cons 280  (if (eq Flag "Yes") 1 0))
                               (assoc 280 Ent) Ent)))
                   )
            )
            (setq BlockObjects (tblnext "BLOCK"))
      )
(princ)      
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.05.2012, 13:30
#16
Do$

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


Еще есть код из первого сообщения популярной темы http://forum.dwg.ru/showthread.php?t=22894
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать кнопку выполняющую функцию "Разрешить разчленение" блока"

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать кнопку в AutoCAD 2011 rassom AutoCAD 21 11.11.2010 06:23
Как в Lisp-коде создать кнопку, которая запустит exe-файл??? vadik_k_l LISP 2 26.01.2010 20:30
Как создать кнопку которая будет вставлять конкретный блок klinker Динамические блоки 7 12.10.2009 16:32
Как создать функцию с необязательным вводом параметра Krieger Программирование 2 14.02.2009 11:49
помогите создать кнопку N84 AutoCAD 8 29.11.2007 12:37