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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Autocad. Как добраться до всех свойств Mtext'а.

VBA. Autocad. Как добраться до всех свойств Mtext'а.

Ответ
Поиск в этой теме
Непрочитано 14.02.2017, 08:32
VBA. Autocad. Как добраться до всех свойств Mtext'а.
samaratopograf
 
Изыскатель
 
Самара
Регистрация: 09.02.2017
Сообщений: 14

Добрый день уважаемые форумчане.

Добавляю в свой чертеж MText программно (на VBA. AutoCAD 2014). У MText есть такое свойство, как скрытие заднего плана .BackgroundFill.
Программно его можно установить в .BackgroundFill = True. А вот как добраться, а главное изменить коэффициент перекрытия?
По умолчанию, коэффициент перекрытия имеет значение 1.5. А мне хотелось бы программно его менять.
На форумах ничего такого не нашел.
Просмотров: 14314
 
Непрочитано 15.02.2017, 12:51
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Спасибо за код, но я на VB пишу.
значит, смиритесь) Даже в Net API не на всю объектную модель акада сделали реализацию оберток по сравнению с ObjectARX, а в COM-интерфейсе и подавно.

----- добавлено через ~1 мин. -----
Boxa, vb - это VBA скорее, судя по заголовку.. а не VB.NET
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.02.2017, 12:54
#22
samaratopograf

Изыскатель
 
Регистрация: 09.02.2017
Самара
Сообщений: 14


Цитата:
Сообщение от Boxa Посмотреть сообщение
а что это меняет? методы и свойства одни и те же, синтаксис только разный
Да в принципе ничего. Спасибо еще раз за помощь ...
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:54
#23
baksconstructor


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


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Есть. Выше писал. Это коэффициент перекрытия в скрытии заднего плана.
А теперь попробуйте найти :
https://knowledge.autodesk.com/searc...9FE30-htm.html
Это сторонняя настройка, поэтому и нужно подключать AcDbMgd.dll
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
в Net API - смотрите верхнюю и предпоследнюю строчку скриншота от Boxa в посте №2
он берёт не объект, а свойства примитива, меняет их и отправляет через WriteMessage на строну.

----- добавлено через ~2 мин. -----
Поэтому ни VBA ни Lisp ни СОМ работать не будут, нет этого в автокаде.
baksconstructor вне форума  
 
Автор темы   Непрочитано 15.02.2017, 12:57
#24
samaratopograf

Изыскатель
 
Регистрация: 09.02.2017
Самара
Сообщений: 14


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Даже в Net API не на всю объектную модель акада сделали реализацию оберток по сравнению с ObjectARX,
Библиотеку ObjectARX и подключил. Все работает .


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
vb - это VBA скорее, судя по заголовку.. а не VB.NET
Да вроде в заголовке VBA написано)))
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:59
1 | #25
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Код:
[Выделить все]
Public Class acad__boxashu

    <CommandMethod("GetMtext")>
    Public Sub GetMtext()

        '' Получениеn текущего документа и базы данных
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim acEd As Editor = acDoc.Editor

        Dim opt1 As PromptEntityOptions = New PromptEntityOptions("Выбери ьтекст:")
        opt1.AllowNone = False

        Dim res1 As PromptEntityResult = acEd.GetEntity(opt1)
        If res1.Status <> PromptStatus.OK Then
            Exit Sub
        End If

        '' Старт транзакции
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            Dim acMText As MText = acTrans.GetObject(res1.ObjectId, OpenMode.ForRead)
            acEd.WriteMessage(
                    $"BackgroundFill:{acMText.BackgroundFill}; " +
                    $"BackgroundFillColor:{acMText.BackgroundFillColor}; " +
                    $"BackgroundScaleFactor:{acMText.BackgroundScaleFactor}")
            ' Сохранение нового объекта в базе данных
            acTrans.Commit()
            ' Очистка транзакции
        End Using
    End Sub
End Class
Boxa вне форума  
 
Непрочитано 15.02.2017, 12:59
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Библиотеку ObjectARX и подключил. Все работает .
рад за вас - это серьезное продвижение: с VBA на ObjectARX перейти за несколько дней и чтобы при этом все работало.
Сергей812 вне форума  
 
Непрочитано 15.02.2017, 13:04
#27
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Цитата:
Это сторонняя настройка, поэтому и нужно подключать AcDbMgd.dll
тоже самое можно сказать про VBA и Lisp
Истинный AutoCAD это ObjectARX, а остальное лишь надстройки
trir вне форума  
 
Непрочитано 15.02.2017, 13:12
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Это сторонняя настройка, поэтому и нужно подключать AcDbMgd.dll
Т.е. хотите сказать, что Аутодеск кидает в корневую папку акада какие то сторонние библиотеки?
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
он берёт не объект, а свойства примитива, меняет их и отправляет через WriteMessage на строну.
не поверите, любой примитив что в VBA, что в Net API - это объект)
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.02.2017, 13:48
#29
samaratopograf

Изыскатель
 
Регистрация: 09.02.2017
Самара
Сообщений: 14


Спасибо. Я стараюсь))

----- добавлено через ~9 мин. -----
Цитата:
Сообщение от Boxa Посмотреть сообщение
Код:
Спасибо за код.
Учиться, учиться и еще раз учиться .........
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 14:14
#30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Если начали упираться в ограничения VBA объектной модели акада, но страшно переходить на Net полностью - можно в одной сборке (язык VB.NET) писать как в VBA-стиле (Interop), так и в Net. Это плохой стиль программирования, но вы же не на сторону пишете скорее всего.
Сергей812 вне форума  
 
Непрочитано 15.02.2017, 14:30
#31
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


baksconstructor, Спасибо. Вы сделали мой день.

Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Библиотеку ObjectARX и подключил. Все работает .
Да вроде в заголовке VBA написано)))
А вот как Вы к VBA, ARX библиотеки прицепили и это еще и заработало, для меня загадка

ЗЫ.
скопировав отправку сообщения из C# в код VB.NET с удивлением обнаружил, что оператор конкатенации $ и тут работает... я особо за развитием VB.NEt не слежу, но прикольно.

Последний раз редактировалось Boxa, 15.02.2017 в 14:33. Причина: ЗЫ.
Boxa вне форума  
 
Непрочитано 15.02.2017, 14:34
#32
baksconstructor


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


Offtop:
Цитата:
Сообщение от Boxa Посмотреть сообщение
baksconstructor, Спасибо. Вы сделали мой день.
Всегда рад направить на путь истинный
baksconstructor вне форума  
 
Непрочитано 15.02.2017, 14:41
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Offtop:
Цитата:
Сообщение от Boxa Посмотреть сообщение
А вот как Вы к VBA, ARX библиотеки прицепили и это еще и заработало, для меня загадка
Ибо VBA - это вершина программирования, а все остальное - чистые понты. Объясняли же недавно)
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.02.2017, 14:44
#34
samaratopograf

Изыскатель
 
Регистрация: 09.02.2017
Самара
Сообщений: 14


Цитата:
Сообщение от Boxa Посмотреть сообщение
А вот как Вы к VBA, ARX библиотеки прицепили и это еще и заработало, для меня загадка
ХИ))))

Я же написал, что поставил себе Visual Studio 2015(VS2015).
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 14:47
#35
Владимир_М


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


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ибо VBA - это вершина программирования
А не поделитесь ссылочкой (конкретной), где и кто это утверждал? Любопытно было бы взглянуть
Владимир_М вне форума  
 
Непрочитано 15.02.2017, 14:50
#36
baksconstructor


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


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ибо VBA - это вершина программирования, а все остальное - чистые понты. Объясняли же недавно)
Повторюсь - не знаю как некоторые, но люди на VB6 (VBA) делают то что другим и не снилось.
Цитата:
Сообщение от Владимир_М Посмотреть сообщение
Любопытно было бы взглянуть
Здеся мы, я не программист, я пользователь, и как пользователь это утверждаю.
baksconstructor вне форума  
 
Непрочитано 15.02.2017, 14:51
#37
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


библиотеки NET API лежат в папке AutoCAD'а (а ещё их можно поставить через nuget) - для этого не обязательное качать ObjectARX SDK (тем более, что они там другие), хотя там есть много полезного

Цитата:
Повторюсь - не знаю как некоторые, но люди на VB6 (VBA) делают то что другим и не снилось.
знаем
trir вне форума  
 
Непрочитано 15.02.2017, 14:55
#38
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Цитата:
Сообщение от Владимир_М Посмотреть сообщение
А не поделитесь ссылочкой (конкретной), где и кто это утверждал? Любопытно было бы взглянуть
вы участвовали в общении в этой ветке, и недавно.

Цитата:
Сообщение от baksconstructor Посмотреть сообщение
но люди на VB6 (VBA) делают то что другим и не снилось.
и способами - которыми другим и не снились из-за наличия штатных средств. Все познается в сравнении.
Сергей812 вне форума  
 
Непрочитано 15.02.2017, 15:08
#39
Владимир_М


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


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вы участвовали в общении в этой ветке, и недавно.
Да, конечно, и я это прекрасно помню... Но я просил именно ссылку на конкретную цитату... Ну да ладно, baksconstructor, уже ответил.
Вопрос снимается...
Владимир_М вне форума  
 
Непрочитано 14.07.2022, 13:45
#40
MapperPro


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


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Добавляю в свой чертеж MText программно (на VBA. AutoCAD 2014). У MText есть такое свойство, как скрытие заднего плана .BackgroundFill.
Добрый день уважаемые форумчане! Тема старая, но не менее актуальная.
Вопрос изначально был о доступе к свойствам MTEXT из-под VBA. Для себя решил эту задачу при помощи VLAX. Недавно (2022).
Код:
[Выделить все]
Option Explicit

Sub testPropBackScaleVL()
Dim myBackScale As Double
Dim myBackColor As Integer
Dim pnt(0 To 2) As Double
Dim objVL As Vlax

    Set objVL = New Vlax
    pnt(0) = 200: pnt(1) = 300: pnt(2) = 0
    myBackScale = 1
    myBackColor = 3
    
    With ThisDrawing.ModelSpace.AddMText(pnt, 0, "Proverka")
        .AttachmentPoint = acAttachmentPointMiddleCenter
        .Height = 2.5
        .color = 5
        .BackgroundFill = True
        .Update
    End With

    objVL.GetLispSymbol "(setpropertyvalue (entlast) ""BackgroundScaleFactor"" " & myBackScale & ")"
    objVL.GetLispSymbol "(setpropertyvalue (entlast) ""UseBackgroundColor"" " & 0 & ")"
    objVL.GetLispSymbol "(setpropertyvalue (entlast) ""BackgroundFillColor"" " & myBackColor & ")"

    Debug.Print objVL.GetLispSymbol("(getpropertyvalue (entlast) ""BackgroundScaleFactor"")")
End Sub

Последний раз редактировалось MapperPro, 14.07.2022 в 15:52. Причина: Форматирование
MapperPro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Autocad. Как добраться до всех свойств Mtext'а.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить шрифт всех надписей чертежа за один раз в Autocad? massa99 AutoCAD 15 09.12.2018 11:55
Видеоуроки AutoCAD kosmax AutoCAD 173 17.02.2017 15:08
Возможно ли программно добраться до данных из библиотеки Autocad? alex8888 Программирование 5 04.08.2011 14:01
проблема с отображением кнопок и всех панелей,кроме свойств в акаде 2008 1eternal AutoCAD 13 14.05.2010 15:52
AutoCad 2008 зависает при вызове свойств штриховки LiSa AutoCAD 34 06.03.2009 00:17