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

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

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

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

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

Добавляю в свой чертеж MText программно (на VBA. AutoCAD 2014). У MText есть такое свойство, как скрытие заднего плана .BackgroundFill.
Программно его можно установить в .BackgroundFill = True. А вот как добраться, а главное изменить коэффициент перекрытия?
По умолчанию, коэффициент перекрытия имеет значение 1.5. А мне хотелось бы программно его менять.
На форумах ничего такого не нашел.
Просмотров: 14269
 
Непрочитано 14.02.2017, 10:04
1 | #2
Boxa

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


Вообще нужное Вам свойство называется BackgroundScaleFactor вот только в VBA его может и не быть...

Последний раз редактировалось Boxa, 14.02.2017 в 10:12.
Boxa вне форума  
 
Автор темы   Непрочитано 14.02.2017, 10:55
#3
samaratopograf

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


Цитата:
Сообщение от Boxa Посмотреть сообщение
BackgroundScaleFactor вот только в VBA его может и не быть...
Я искал)))) не нашел.
А через .net можно?
samaratopograf вне форума  
 
Непрочитано 14.02.2017, 11:43
1 | #4
Boxa

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


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
А через .net можно?
да, конечно.
Boxa вне форума  
 
Автор темы   Непрочитано 14.02.2017, 11:58
#5
samaratopograf

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


Цитата:
Сообщение от Boxa Посмотреть сообщение
да, конечно.
Спасибо. Не хотелось в .net лезть, но видимо по другому не получится.
Да и сделать текст аннотативным на vba вот тоже не получалось, а с .net видимо получится ...
Буду .net "курить"))).

Спасибо еще раз!
samaratopograf вне форума  
 
Автор темы   Непрочитано 15.02.2017, 11:59
#6
samaratopograf

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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Вообще нужное Вам свойство называется BackgroundScaleFactor вот только в VBA его может и не быть...
А вы какую сборку используете.

Поставил себе VS2015.
Проект на VisualBasic
Подключил Autodesk.AutoCAD.Interop
Interop.AXDBLib

В этих сборках для MText нет таких свойств, как BackgroundScaleFactor, как у вас.
Может что не так делаю конечно. Буду рад любой помощи ...

Последний раз редактировалось Кулик Алексей aka kpblc, 15.02.2017 в 12:13.
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:13
#7
Кулик Алексей aka kpblc
Moderator

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


А зачем Interop? В данном случае, мне кажется, надо без него работать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.02.2017, 12:28
#8
Сергей812


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


COM Interop (Взаимодействие с COM) — технология, включённая в .NET CLR, позволяющая объектам COM взаимодействовать с объектами .NET, и наоборот.
механизмы те же, просто "зашли" со стороны Net-сборки, а не со стороны VBA/ внешней программы через COM-интерфейс.
Сергей812 вне форума  
 
Непрочитано 15.02.2017, 12:30
#9
baksconstructor


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


Собственно где в объектной модели находится BackgroundScaleFactor ?
baksconstructor вне форума  
 
Непрочитано 15.02.2017, 12:34
#10
Сергей812


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


Autodesk.AutoCAD.DatabaseServices.MText
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.02.2017, 12:36
#11
samaratopograf

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


Немного поторопился.
Скачал Autodesk_ObjectARX_2014
Подключил AcDbMgd.dll
Теперь наконец-то добрался до всех свойств MText'а.
Построил сборку. Загрузил в Акад. Все работает.
Спасибо всем за поддержку.
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:37
| 1 #12
Boxa

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


samaratopograf, через Autodesk.AutoCAD.Interop Вы к СОМ подключаетесь и получаете то же, что и в VBA, и смысл...

Я не знаю какую версию акада Вы используете, но в последних (с 2013 и далее), для того что бы воспользоваться кодом ниже, нужно подключить acCoreMgd, AcDbMgd, acMgd (копировать локально - false) ну и версию .NEt указать правильно в настройках проекта.



Код:
[Выделить все]
 using App = Autodesk.AutoCAD.ApplicationServices;
using Db = Autodesk.AutoCAD.DatabaseServices;
using Ed = Autodesk.AutoCAD.EditorInput;
using Rtm = Autodesk.AutoCAD.Runtime;

[assembly: Rtm.CommandClass(typeof(samaratopograf_BackgroundFill.Commands))]
namespace samaratopograf_BackgroundFill
{
    public class Commands
    {
        [Rtm.CommandMethod("GetMText")]
        static public void GetMText()
        {
            App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
            if (acDoc == null) return;

            Db.Database acCurDb = acDoc.Database;
            Ed.Editor acEd = acDoc.Editor;

            Ed.PromptEntityOptions opt1 = new Ed.PromptEntityOptions("\nВыбери мтекст:");
            opt1.AllowNone = false;

            Ed.PromptEntityResult res1 = acEd.GetEntity(opt1);
            if (res1.Status != Ed.PromptStatus.OK)
                return;

            using (Db.Transaction acTrans = acCurDb.TransactionManager.StartOpenCloseTransaction())
            {
                Db.MText acMText = acTrans.GetObject(res1.ObjectId, Db.OpenMode.ForRead) as Db.MText;
                acEd.WriteMessage(
                    $"BackgroundFill:{acMText.BackgroundFill}; " + 
                    $"BackgroundFillColor:{acMText.BackgroundFillColor}; " +
                    $"BackgroundScaleFactor:{acMText.BackgroundScaleFactor}");
                acTrans.Commit();
            }
        }
    }
}


Удачи.
Boxa вне форума  
 
Непрочитано 15.02.2017, 12:39
#13
baksconstructor


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Autodesk.AutoCAD.DatabaseServices.MText
Где ?
Миниатюры
Нажмите на изображение для увеличения
Название: 3.jpg
Просмотров: 89
Размер:	94.0 Кб
ID:	183764  
baksconstructor вне форума  
 
Автор темы   Непрочитано 15.02.2017, 12:40
#14
samaratopograf

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


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Собственно где в объектной модели находится BackgroundScaleFactor ?
Это скрытие заднего плана. Коэффициент перекрытия. Средствами VBA до него не добраться (((

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Немного поторопился.
Скачал Autodesk_ObjectARX_2014
Подключил AcDbMgd.dll
Цитата:
Сообщение от Boxa Посмотреть сообщение
нужно подключить acCoreMgd, AcDbMgd, acMgd
Спасибо всем.
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:44
#15
baksconstructor


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


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
Средствами VBA до него не добраться (((
Причем здесь VBA, если его в объектной модели нет ? Нет описания данного параметра, нет такого объекта в автокаде, значит это не родная приблуда
baksconstructor вне форума  
 
Непрочитано 15.02.2017, 12:45
#16
Boxa

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


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Где ?
Там где Вы ищите его и нет, о чем было написано в #2 сообщении, это свойство есть в .NET API, т.е. нужно смотреть другой раздел справки.

----- добавлено через 59 сек. -----
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Причем здесь VBA, если его в объектной модели нет ? Нет описания данного параметра, нет такого объекта в автокаде, значит это не родная приблуда
Смешно. Вы код в #12 посмотрите. В VBA / COM дохрена чего нет, чтож только на него ровняться.
Boxa вне форума  
 
Автор темы   Непрочитано 15.02.2017, 12:46
#17
samaratopograf

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


[quote=Boxa;1618709]samaratopograf



Спасибо за код, но я на VB пишу.
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:47
#18
Сергей812


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


baksconstructor, в Net API - смотрите верхнюю и предпоследнюю строчку скриншота от Boxa в посте №2
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.02.2017, 12:48
#19
samaratopograf

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


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Причем здесь VBA, если его в объектной модели нет ?
Есть. Выше писал. Это коэффициент перекрытия в скрытии заднего плана.
samaratopograf вне форума  
 
Непрочитано 15.02.2017, 12:50
#20
Boxa

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


Цитата:
Сообщение от samaratopograf Посмотреть сообщение
но я на VB пишу.
а что это меняет? методы и свойства одни и те же, синтаксис только разный
Boxa вне форума  
Ответ
Вернуться   Форум 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