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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD 2008, программное удаление объектов RTEXT из состава блока

AutoCAD 2008, программное удаление объектов RTEXT из состава блока

Ответ
Поиск в этой теме
Непрочитано 27.04.2009, 02:26 #1
AutoCAD 2008, программное удаление объектов RTEXT из состава блока
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,846

Доброго всем!
Столкнулся с проблемой удаления объекта типа RTEXT из состава блока. Во вложении - файл с единственным блоком. Пытаюсь удалять объект RTEXT с помощью кода
Код:
[Выделить все]
(defun test (/ blk_ref start blk_cont ent)
  (setq blk_ref (car (entsel))
        start   (tblobjname "block" (cdr (assoc 2 (entget blk_ref))))
        ) ;_ end of setq
  (while (setq ent (entnext (cond (ent)
                                  (t start)
                                  ) ;_ end of cond
                            ) ;_ end of entnext
               ) ;_ end of setq
    (setq blk_cont (cons ent blk_cont))
    ) ;_ end of while
  (foreach ent blk_cont
    (if (= (cdr (assoc 0 (entget ent))) "RTEXT")
      (entdel ent)
      ) ;_ end of if
    ) ;_ end of foreach
  ) ;_ end of defun
И ведь не удаляется! entdel возвращает nil.
Вообще, создается ощущение, что RTEXT весьма странный объект: через ActiveX-перебор описания блока до него не добраться; метода vla-erase "не понимает"; дамп - и тот не снять!
Вообще, программно удалить RTEXT из состава блока возможно?

Вложения
Тип файла: dwg
DWG 2007
Drawing2.dwg (67.8 Кб, 545 просмотров)

__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 3350
 
Непрочитано 27.04.2009, 09:15
#2
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Этим кодом вроде удаляет:
Код:
[Выделить все]
(defun test (/)
  (vlax-for s (vla-item
		(vla-get-Blocks
		  (vla-get-ActiveDocument (vlax-get-acad-object))
		)
		"qwre"
	      )
    (if	(= (vla-get-ObjectName s) "RText")
      (vla-Delete s)
    )
  )
  (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acallviewports)
)
Makswell вне форума  
 
Автор темы   Непрочитано 27.04.2009, 17:57
#3
Кулик Алексей aka kpblc
Moderator

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


Все дело в том, что у меня при попытке получить ObjectName с RTEXT'a вообще выдавало ошибку... Хотя вечером попробую, спасибо (вечно путаю vla-erase и vla-delete).
---
Попробовал. То ли у меня AutoCAD какой-то кривой до невозможности, то ли еще что... В общем, не срабатывает вариант #2.
Мало того, при попытке выделения RTEXT'a внутри режима редактирования блока в окне свойств вообще наблюдаю странную картину:

А при попытке дампа следующее (естественно, что rtext.arx загружен):
Код:
[Выделить все]
_$ (entget ent)
((-1 . <Entity name: -40123bd0>) (0 . "RTEXT") (330 . <Entity name: -40125308>)
 (5 . "1DE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) 
 (6 . "ByBlock") (370 . -2) (100 . "RText") (10 1533.55 884.941 0.0) (210 0.0 0.0 1.0)
 (50 . 0.0) (40 . 2.5) (7 . "Standard") (70 . 1) (1 . "$(getvar,\"dwgname\")"))
_$ (vlax-dump-Object (vlax-ename->vla-object ent))
Automation Error. Description was not provided.
---
Добавлено:
Во, стоило только написать про rtext.arx, как сразу нашлось решение. Правда, не полностью адекватное, но все же лучше чем ничего:
Код:
[Выделить все]
(defun test (/ arx_lst blk_ref)
  (if (member "RTEXT.ARX" (mapcar (function strcase) (arx)))
    (progn
      (setq arx_lst t)
      (arxunload "rtext.arx")
      ) ;_ end of progn
    ) ;_ end of if
  (if (and (setq blk_ref (car (entsel)))
           (= (cdr (assoc 0 (entget blk_ref))) "INSERT")
           (setq blk_ref (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
                                   (cdr (assoc 2 (entget blk_ref)))
                                   ) ;_ end of vla-item
                 ) ;_ end of setq
           ) ;_ end of and
    (vlax-for sub blk_ref
      (if (= (vla-get-objectname sub) "AcDbZombieEntity")
        (vla-delete sub)
        ) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of if
  (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acallviewports)
  (if arx_lst
    (arxload "rtext.arx")
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 27.04.2009 в 23:28.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.04.2009, 08:48
#4
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Алексей, ИМХО у тебя всё же что-то не так с Автокадом. Повторил твои действия у себя. AutoCAD 2008 SP1.
Цитата:
_$ (entget (car (entsel)))
((-1 . <Имя объекта: 7e599468>) (0 . "RTEXT") (330 . <Имя объекта: 7e594cf8>) (5 . "1E5") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "RText") (10 1533.55 884.941 0.0) (210 0.0 0.0 1.0) (50 . 0.0) (40 . 2.5) (7 . "Standard") (70 . 1) (1 . "$(getvar,\"dwgname\")"))
_$
_$
_$ (vlax-dump-Object (vlax-ename->vla-object (car (entsel))))
; IRTextObj: IRTextObj Interface
; Значения свойств:
; Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
; Contents = "$(getvar,\"dwgname\")"
; Document (RO) = #<VLA-OBJECT IAcadDocument 01e0f368>
; Handle (RO) = "1E5"
; HasExtensionDictionary (RO) = 0
; Height = 2.5
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 1ae78c34>
; Layer = "0"
; Linetype = "ByBlock"
; LinetypeScale = 1.0
; Lineweight = -2
; Material = "ByLayer"
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 2119799912
; ObjectName (RO) = "RText"
; OwnerID (RO) = 2119781624
; PlotStyleName = "ByBlock"
; Position = (1533.55 884.941 0.0)
; Rotation = 0.0
; Style = "Standard"
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 1ae85770>
; Type = 1
; Visible = -1
T
_$
Миниатюры
Нажмите на изображение для увеличения
Название: 01.png
Просмотров: 104
Размер:	8.6 Кб
ID:	19586  
Makswell вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD 2008, программное удаление объектов RTEXT из состава блока

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Панель "МОНОМАХ" в AutoCAD 2008 Bublik 22 Мономах 24 18.05.2013 23:50
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Адаптеры для редактирования сторонних объектов в AutoCAD 2008 vlad68 AutoCAD 5 25.03.2009 10:55
AutoCAD 2008 vs Autocad 2008 LT (_imageattach) svlc AutoCAD 8 19.02.2009 14:55