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

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

работа команды _UNDO

Ответ
Поиск в этой теме
Непрочитано 24.11.2008, 16:55 #1
работа команды _UNDO
Ева
 
Воронеж
Регистрация: 01.04.2008
Сообщений: 40

Привет, всем!
Требуется выполнить такую задачу.
Существует какой- либо блок с атрибутом, состоящий из круга или прямоугольника(из отрезков).Необходимо узнать форму блока. Для этого я выбираю блок, затем использую команду _explode, удаляю последний примитив (тк это атрибут) и получаю имя оставшегося круга или линии(последней из которых стрится прямоугольник).Затем требуется отменить действия разблокирования и удаления атрибута.Пример кода:

(setq obj (car(entsel "\nВыберите блок")))
(command "_explode" obj "");;
(entdel(entlast))
(setq obj1(entlast))
;;; действия c obj1

Помогите, пожалуйста, разобраться как с помощью команды _UNDO и ее опций отменить дейсвия разблокирования и удаления атрибута?
Просмотров: 3452
 
Непрочитано 24.11.2008, 17:40
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Код:
[Выделить все]
(command "_.UNDO" "_Mark")
(setq obj (car(entsel "\nВыберите блок")))
(command "_explode" obj "");;
(entdel(entlast))
(setq obj1(entlast))
;;; действия c obj1
(command "_.UNDO" "_Back")
А как ты по последней линии определишь форму блока?
Это я к тому, что можно не расчленяя блока пройтись по его описанию в таблице блоков и узнать из чего он состоит:
1. Если в описании блока есть круг - то это ...
2. Если в описании блока есть линия - то это ...
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.11.2008, 10:27
#3
Дима_

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


То Ева - способ то явно сомнительный, поищи лучше в поиске про программирование блоков - проще и надежней получиться.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.11.2008, 10:37
#4
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


VVA, а каким образом можно узнать это с помощью таблиц?Помогите, пожалуйста с кодом
Ева вне форума  
 
Автор темы   Непрочитано 25.11.2008, 11:47
#5
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


Уважаемые программисты, помогите, пожалуйста, разобраться, как с помощью описания в таблице блоков, узнать из каких элементов состоит блок - круг, линия и тд.?
Ева вне форума  
 
Непрочитано 25.11.2008, 12:01
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Код:
[Выделить все]
(vl-load-com)
(setq blkobj (vlax-ename->vla-object (car(entsel "\nУкажите блок:")))) ;_Vla объект блока
(setq blkdef ;_Определение блока в таблице блоков
       (vla-item (vla-get-blocks(vla-get-activedocument (vlax-get-acad-object))) (vla-get-name blkobj)))
(princ "\nБлок состоит из:")
(vlax-for item blkdef ;_Цикл по примитивам блока
  (terpri)
  (princ (vla-get-ObjectName item))
  )
(princ)
Вариант 2 (без ActiveX)
Код:
[Выделить все]
(setq ent (car(entsel "\nУкажите блок:")))
(setq blkdef (tblobjname "block" (cdr(assoc 2 (entget ent)))))
(princ "\nБлок состоит из:")
(while (setq blkdef (entnext blkdef))
  (terpri)
  (princ (cdr(assoc 0 (entget blkdef))))
 )
(princ)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 25.11.2008 в 12:06.
VVA вне форума  
 
Автор темы   Непрочитано 25.11.2008, 12:10
#7
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


VVA, спасибо огромное, очень выручили
Ева вне форума  
 
Автор темы   Непрочитано 25.11.2008, 12:20
#8
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


А есть ли возможность еще как то вытащить радиус круга, входящего в состав блока?
Ева вне форума  
 
Непрочитано 25.11.2008, 12:36
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Код:
[Выделить все]
(setq ent (car(entsel "\nУкажите блок:")))
(setq blkdef (tblobjname "block" (cdr(assoc 2 (entget ent)))))
(princ "\nБлок состоит из:")
(while (setq blkdef (entnext blkdef))
  (terpri)
  (princ (cdr(assoc 0 (entget blkdef))))
  (if (= (cdr(assoc 0 (entget blkdef))) "CIRCLE")
    (progn
    (princ "  радиус = ")(princ (cdr(assoc 40 (entget blkdef))))
    )
    )
 )
(princ)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.11.2008, 12:52
#10
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


VVA, все получилось, спасибо
Ева вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > работа команды _UNDO

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение полей (fields) RomanM AutoCAD 20 24.08.2016 22:39
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Работа команды "ЕТ" _superhatch zenon AutoCAD 2 04.09.2007 13:16
Работа команды "LAYOFF" balk AutoCAD 22 29.06.2006 11:03
Прозрачные команды Vova AutoCAD 17 21.06.2006 05:33