Выдернуть текст из сгруппированных(?) объектов Autocad-a через VBA
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выдернуть текст из сгруппированных(?) объектов Autocad-a через VBA

Выдернуть текст из сгруппированных(?) объектов Autocad-a через VBA

Ответ
Поиск в этой теме
Непрочитано 14.07.2009, 15:26 #1
Выдернуть текст из сгруппированных(?) объектов Autocad-a через VBA
reg123
 
Регистрация: 14.07.2009
Сообщений: 8

Здравствуйте господа и дамы.
Помогите пожалуйста с VBA-кодом

Постараюсь внятно описать проблему.
Есть некий код

Код:
[Выделить все]
Public Sub Test()
Dim acSelSet As AcadSelectionSet
Set acSelSet = ThisDrawing.SelectionSets.Add("rrr")
acSelSet.SelectOnScreen

myFunc acSelSet

ActiveDocument.SelectionSets("rrr").Delete
End Sub

Public Function myFunc(objSet As AcadSelectionSet) As Boolean
Dim strTxt As String
Dim objEnt As AcadEntity

For Each objEnt In objSet
  If TypeOf objEnt Is AcadText Or TypeOf objEnt Is AcadMText Then
    strTxt$ = objEnt.TextString
    
        'здесь мой код
        'здесь мой код
        'здесь мой код

    objEnt.TextString = strTxt
    objEnt.Update
  End If
Next
End Function
Этот код был взят отсюда http://www.cad.dp.ua/stats/a_vba/index.php
Он предлагает выделить объекты, перебирает выделенное в поиске текстовых объектов, выдирает из текстовых объектов содержимое, и уже с этим содержимым (strTxt$) я произвожу различные действия. После этого измененное содержимое обновляется.

Суть в том что иногда в некоторых файлах этот код не работает. Когда я подвожу к этим текстам курсор мыши, то AutoCad подсвечивает целую кучу различных сгруппированных (или несгруппрированных, не знаю) элементов. Я вообще не работаю в AutoCad, я только печатаю чертежи. Углубляться в эту тему мне не хотелось бы. Может кто-нибудь подскажет такой код, чтоб он выдирал текст из всего? (если не совсем понятно могу выложить проблемный файл).
Заранее спасибо.
Просмотров: 4099
 
Непрочитано 14.07.2009, 16:16
#2
Кулик Алексей aka kpblc
Moderator

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


По-моему, он и так "выдернет" все что надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.07.2009, 16:51
#3
reg123


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


Нет, к сожалению не всё.
Хотел выложить файл. Выделил проблемный кусок, скопировал, удалил всё лишнее, но файл всё-равно занимает 5-mb. Пустой (на мой взгляд).

==============================

О, получилось ужать файл. Посмотрите, будьте добры. Вот в этом файле с точки зрения скрипта тестовых объектов нет.
Вложения
Тип файла: zip test1.zip (44.1 Кб, 57 просмотров)

Последний раз редактировалось reg123, 14.07.2009 в 17:00.
reg123 вне форума  
 
Непрочитано 14.07.2009, 17:56
#4
Дима_

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


В вашем примере текст лежит внутри блока - надо делать рекурсивный алгоритм который будет проверять все вложенные блоки (подблоки), на лиспе это не сложно - vb не знаю. Так-же приведенный вами алгоритм не проверяет таблицы - не знаю на сколько это нужно, но в них тоже можетбыть текст.
p.s. В лиспе я бы выдернул текст из всех объектов в которых есть DXF пара с кодом 1 - написанно "на коленке" без проверки (vl-remove nil (mapcar '(lambda (obj) (cdr (assoc 1 (entget obj)))) (список 'ename))), либо через VL - (if (vlax-property-available-p obj 'textstring) (vla-get-textstring obj)) - для таблиц посложнее - в первом случае "вытянет" только первую клетку, во втором надо проверять еще метод gettext и сканировать все клетки, но если нужно - то вобщем ничего сложного - но и если вхождение блока - то рекурсия на его описание.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.07.2009, 18:06
#5
reg123


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


> Дима_
Спасибо за проявленный интерес.

Рекурсия меня не пугает, опыт имеется. Но я совершенно не владею объектной моделью AutoCad-а. Мне бы очень пригодились подсказки студии

Последний раз редактировалось reg123, 14.07.2009 в 18:16.
reg123 вне форума  
 
Непрочитано 14.07.2009, 20:59
#6
Дима_

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


Я, в свою очередь, совершенно не владею VB про свойства и методы всех объектов акада - есть в "егонойже" справке. На если что-то непонятно - могу написать на лиспе (visual), но в basic переводить - на Ваши плечи.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выдернуть текст из сгруппированных(?) объектов Autocad-a через VBA



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA в AutoCAD alle Программирование 47 03.12.2014 11:26
Срочно! Горю! Как через VBA подцепить LISP-файл на запуск? АлександрМихайлович LISP 6 10.05.2005 22:45
AutoCAD LT 2005 и VBA Macros Vidas Программирование 10 03.05.2005 11:00
Можно ли через VBA динамически двигать объекты? {Smirnoff} Программирование 4 11.12.2003 01:14
подскажите кто может где взять литературу по VBA for AutoCad er Программирование 2 28.10.2003 14:08