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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему нет семейства LeaderStyles?

Почему нет семейства LeaderStyles?

Ответ
Поиск в этой теме
Непрочитано 28.09.2010, 10:23 #1
Почему нет семейства LeaderStyles?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

Почему не работает этот код?
Код:
[Выделить все]
'Заменим во всех стилях выносок цвет текста на белый
   For intНомОбъекта = 0 To ThisDrawing.LeaderStyles.Count - 1
      Set objСтильРазмеров = ThisDrawing.LeaderStyles(intНомОбъекта)
   Next intНомОбъекта
И почему разработчики AutoCAD не сделали семейство LeaderStyles если есть семействa DimStiles, LineTypes, TextStyles и т.д.?
Просмотров: 5334
 
Непрочитано 28.09.2010, 11:05
1 | #2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Почему не работает этот код?
Код:
[Выделить все]
'Заменим во всех стилях выносок цвет текста на белый
   For intНомОбъекта = 0 To ThisDrawing.LeaderStyles.Count - 1
      Set objСтильРазмеров = ThisDrawing.LeaderStyles(intНомОбъекта)
   Next intНомОбъекта
И почему разработчики AutoCAD не сделали семейство LeaderStyles если есть семействa DimStiles, LineTypes, TextStyles и т.д.?

МишаИнженер, код не работает потому что, как вы сами сказали нет семейства LeaderStyles, а семейтсва нет, потому что данные о стилях мультивыносок система хранит в словаре ACAD_MLEADERSTYLE, в отличие от данных о размерных стилях, которые храняться в секции TABLES в символьной таблице DIMSTYLE, тоже относиться и к текстовым стилям и к типам линий.


Пример работы со стилями мультивыносок из help:
Код:
[Выделить все]
Sub MLS()

    Dim oDict As AcadDictionary
    Set oDict = ThisDrawing.Dictionaries.Item("ACAD_MLEADERSTYLE")

    Dim i As Long
    For i = 0 To oDict.Count - 1
      Dim oObj As AcadObject
      Set oObj = oDict.Item(i)
      If oObj.ObjectName = "AcDbMLeaderStyle" Then
          Dim oMLS As AcadMLeaderStyle
          Set oMLS = oObj
          MsgBox "Name = " & oMLS.Name & vbCrLf & _
          "Annotative = " & oMLS.Annotative & vbCrLf & _
          "ContentType = " & oMLS.ContentType & vbCrLf & _
          "LeaderLineType = " & oMLS.LeaderLineType, vbInformation, "MLeader Styles"
      End If
    Next i
    Dim oNewMLS As AcadMLeaderStyle
    Set oNewMLS = oDict.AddObject("TEST", "AcDbMLeaderStyle")

    oNewMLS.LeaderLineType = acSplineLeader
    Dim oCol As New AcadAcCmColor
    oCol.ColorIndex = acBlue
    oNewMLS.LeaderLineColor = oCol

    Call ThisDrawing.SetVariable("CMLEADERSTYLE", "TEST")
    Dim points(0 To 5) As Double
    points(0) = 1: points(1) = 1: points(2) = 0
    points(3) = 2: points(4) = 2: points(5) = 0
    Dim oML As AcadMLeader
    Set oML = ThisDrawing.ModelSpace.AddMLeader(points, i)
    oML.TextString = "mleader created with " & vbCrLf & "style ""TEST"""

End Sub
__________________
cadtools

Последний раз редактировалось TararykovDG, 28.09.2010 в 11:38.
TararykovDG вне форума  
 
Непрочитано 28.09.2010, 11:50 справка ObjectARX для AutoCAD 2009
1 | #3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Это VBA или VB.Net? Если второй, то в справке ObjectARX для AutoCAD 2009 видим:

__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 28.09.2010, 18:21
#4
МишаИнженер


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


А чем словарь ACAD_MLEADERSTYLE отличается от символьной таблицы, например DIMSTYLE? И ещё вопрос: чтобы поменять свойство в стиле мультивыноски надо сделать требуемый стиль мультивыноски активным (а как это делается) затем поменять значение системной отвечающей за редактируемое свойство (и здесь желательно пример как это делается) и затем скопировать текущие настройки системных переменных в требуемый стиль мультивыноски. По этой схеме редактируются стили размеров и для мультивыносок также? Научите пожалуйста редактировать свойства стилей мультивыносок! К сожалению программисты AutoCAD и Microsoft взяли моду очень сложными методами изменять свойства классов семейств и приходится вместо обычного символа "=" использовать сложные и неудобные схемы которые выглядят очень нелепо и запутанно!
МишаИнженер вне форума  
 
Непрочитано 29.09.2010, 09:25
#5
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


МишаИнженер, на все Ваши вопросы ответы есть в примере кода из help'a в моем предыдущем посте, ещё раз с комментариями:

Код:
[Выделить все]
Sub MLS()

    Dim oDict As AcadDictionary
    ' получаем словарь "ACAD_MLEADERSTYLE" где храняться данные о всех стилях мультивыносок для данного чертежа
    ' сравните с получение данных о размерных стилях
    ' Dim dimStyle As AcadDimStyle
    ' Set dimStyle = ThisDrawing.DimStyles.Add("TEST") добавляем новый размерный стиль "TEST"
    ' здесь идет обращение не к таблице как для размерного стиля, а к словарю Dictionaries
    Set oDict = ThisDrawing.Dictionaries.Item("ACAD_MLEADERSTYLE")

    Dim i As Long
    ' перебираем все стили мультивыносок
    For i = 0 To oDict.Count - 1
      Dim oObj As AcadObject
      Set oObj = oDict.Item(i) ' очередной стиль
      If oObj.ObjectName = "AcDbMLeaderStyle" Then
          Dim oMLS As AcadMLeaderStyle
          Set oMLS = oObj
          MsgBox "Name = " & oMLS.Name & vbCrLf & _
          "Annotative = " & oMLS.Annotative & vbCrLf & _
          "ContentType = " & oMLS.ContentType & vbCrLf & _
          "LeaderLineType = " & oMLS.LeaderLineType, vbInformation, "MLeader Styles"
      End If
    Next i
    Dim oNewMLS As AcadMLeaderStyle
    ' создаем новый стиль "TEST"
    Set oNewMLS = oDict.AddObject("TEST", "AcDbMLeaderStyle")

    ' определам для нового стиля "TEST" какие-то настройки
    oNewMLS.LeaderLineType = acSplineLeader 'задаем тип линии - прямая выноска
    Dim oCol As New AcadAcCmColor
    oCol.ColorIndex = acBlue ' задаем цвет выноски
    oNewMLS.LeaderLineColor = oCol ' устанавливаем цвет выноски

    ' устанавливаем значение системной переменной "CMLEADERSTYLE", тем самым делаем стиль "TEST" текущим
    Call ThisDrawing.SetVariable("CMLEADERSTYLE", "TEST")
    Dim points(0 To 5) As Double
    ' задаем точки вставки для мультивыноски
    points(0) = 1: points(1) = 1: points(2) = 0
    points(3) = 2: points(4) = 2: points(5) = 0
    Dim oML As AcadMLeader
    ' рисуем на чертеже мультивыноску с использованием нового стиля "TEST"
    Set oML = ThisDrawing.ModelSpace.AddMLeader(points, i)
    oML.TextString = "mleader created with " & vbCrLf & "style ""TEST"""

End Sub
__________________
cadtools

Последний раз редактировалось TararykovDG, 29.09.2010 в 15:11.
TararykovDG вне форума  
 
Непрочитано 29.09.2010, 12:14
#6
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
почему разработчики AutoCAD не сделали семейство LeaderStyles если есть семействa DimStiles, LineTypes, TextStyles и т.д.?
1. "Шибко быстро делали". Каждая версия AutoCAD выпускается "на год раньше срока".

2. Чтобы сделать в едином стиле (как и должно бы быть) надо время. А манагеры давят на "яйцеголовых" программистов.

3. Для VBA и LISP доступ, в отличие от ObjectARX, осуществляется только через объектную модель. Даже если внутри AutoCAD есть какие-то объекты, то для COM-доступа к ним нужна дополнительная работа по изменению библиотеки типов. А это время. Да и индусы должны же когда-то медитировать, они же не негры...

Вот и делается временная затычка в виде словаря.

В общем, всё, как у нас...

Когда-нибудь все "устаканится". Когда VBA не будет. Подобное ведь уже было в предыдущих версиях с другими объектами - сколько приходилось извращаться со словарями.

Возможно это всего лишь мои ложные измышления.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 01.10.2010, 06:25
#7
МишаИнженер


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


TararykovDG! Попробовал применить код для изменения цвета текста всех стилей мультивыносок:
Код:
[Выделить все]
'Переменные для изменения свойств мультивыносок
Dim oDict As AcadDictionary, oObj As ACADObject, oMLS As AcadMLeaderStyle
'Заменим во всех стилях выносок цвет текста на белый
'получаем словарь "ACAD_MLEADERSTYLE" где храняться данные о всех стилях мультивыносок для данного чертежа
   Set oDict = ThisDrawing.Dictionaries.Item("ACAD_MLEADERSTYLE")
   For intНомОбъекта = 0 To oDict.Count - 1
      Set oObj = oDict.Item(intНомОбъекта) ' очередной стиль
      If oObj.ObjectName = "AcDbMLeaderStyle" Then
          Set oMLS = oObj
          oMLS.TextColor.ColorIndex = acWhite
      End If
   Next intНомОбъекта
Но ничего не меняется! цвет текста во всех стилях мультивносок остаётся без изменений. Почему этот код не работает? Как сделать так чтобы этот код работал?
МишаИнженер вне форума  
 
Непрочитано 01.10.2010, 08:30
#8
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


МишаИнженер, попробуй так. Красным выделены изменения.
Код:
[Выделить все]
'Переменные для изменения свойств мультивыносок
Dim oDict As AcadDictionary, oObj As ACADObject, oMLS As AcadMLeaderStyle, oCol As New AcadAcCmColor
'Заменим во всех стилях выносок цвет текста на белый
'получаем словарь "ACAD_MLEADERSTYLE" где храняться данные о всех стилях мультивыносок для данного чертежа
   Set oDict = ThisDrawing.Dictionaries.Item("ACAD_MLEADERSTYLE")
   For intНомОбъекта = 0 To oDict.Count - 1
      Set oObj = oDict.Item(intНомОбъекта) ' очередной стиль
      If oObj.ObjectName = "AcDbMLeaderStyle" Then
          Set oMLS = oObj
          'oMLS.TextColor.ColorIndex = acWhite
          oCol.ColorIndex = acWhite
          oMLS.TextColor = oCol 
      End If
   Next intНомОбъекта
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 01.10.2010, 08:44
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Попробовал применить код для изменения цвета текста всех стилей мультивыносок... Но ничего не меняется! цвет текста во всех стилях мультивносок остаётся без изменений. Почему этот код не работает? Как сделать так чтобы этот код работал?
Предлагаемые выше варианты я не читал (лень разбираться с чужим кодом).
Это работает 100% (правда это .Net, но алгоритм должен быть ясен):
Код:
[Выделить все]
        [CommandMethod(ns, "cmd", CommandFlags.Modal)]
        public void Cmd()
        {
            using (Transaction t = dwg.TransactionManager.StartTransaction())//dwg - экземпляр класса Document
            {
                DBDictionary x = (DBDictionary) t.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForRead);
                foreach (DBDictionaryEntry item in x)
                {
                    MLeaderStyle y = (MLeaderStyle) t.GetObject(item.Value, OpenMode.ForWrite);
                    y.TextColor = Color.FromColor(System.Drawing.Color.Red);
                }
                t.Commit();                
            }
        }
>TararykovDG
Глянул по диагонали твой вариант...
Я не вижу в твоём коде, чтобы ты открыл стиль для изменения. Да и транзакции не видать с сохранением изменений (у себя в коде я подсветил красным цветом то, что отсутствует у тебя ). Х.з. может в бэйсике оно по другому пишется...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 01.10.2010 в 08:57. Причина: дописал замечание для TararykovDG
hwd вне форума  
 
Автор темы   Непрочитано 06.10.2010, 12:46
#10
МишаИнженер


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


TararykovDG> Спасибо! Всё работает!
hwd> Наверное функция SET в VBA выполняет функцию трансакции
МишаИнженер вне форума  
 
Непрочитано 06.10.2010, 12:55
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
TararykovDG> Спасибо! Всё работает!
hwd> Наверное функция SET в VBA выполняет функцию трансакции
Это ты неделю над ним корпел?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 06.10.2010, 13:31
#12
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
TararykovDG> Спасибо! Всё работает!
МишаИнженер, не за что, и сейчас объясню почему. Но сначала для hwd

Цитата:
Сообщение от hwd
Я не вижу в твоём коде, чтобы ты открыл стиль для изменения. Да и транзакции не видать с сохранением изменений (у себя в коде я подсветил красным цветом то, что отсутствует у тебя ). Х.з. может в бэйсике оно по другому пишется...
hwd, я сам х.з. как оно пишется в бейсике, потому что никогда не писал прог. на VBA. Раньше писал на C'ях и Delphi, потом, когда пришлось работать с ACad стал разбираться с lisp'ом, а про VBA прочитав, что он уже можно сказать "труп" не стал в нем разбираться. А приведенный мной код - это код из справки (Справка по AutoCAD 2008 для разработчиков приложений -> ActiveX and VBA Reference (ActiveX и VBA: Справочник) -> Code Examples -> MLeaderStyle Example) с небольшими изменениями, которые сможет сделать любой адекватный программер. Теперь посмотрев это http://sites.google.com/site/bushmansnetlaboratory/home стал задумываться о .Net
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 06.10.2010, 13:49
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Теперь посмотрев это http://sites.google.com/site/bushmansnetlaboratory/home стал задумываться о .Net
В недалёком будущем, на сайте останется только перевод офиц. мануала - всё остальное будет снесено.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 28.01.2016, 10:52 МишаИнженер
#14
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 810
<phrase 1= Отправить сообщение для perpetule с помощью Skype™


Цитата:
TararykovDG> Спасибо! Всё работает!
hwd> Наверное функция SET в VBA выполняет функцию трансакции
Простите за глупый вопрос, как это запустить, сам VBA установлен акад 2014?
__________________
tc71
perpetule вне форума  
 
Непрочитано 30.01.2016, 01:48
#15
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Команда VBAIDE, при условии установленного VBA enabler'а для AutoCAD 2014. Если не установлен, то нужно установить. Брать здесь: https://knowledge.autodesk.com/suppo...odule-vba.html
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему нет семейства LeaderStyles?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему дорожные люки круглые? (стресс-собеседование) smile157 Разное 403 14.12.2015 09:06
Почему при расчёте в Robote простой схемы эпюра My получается неправильной? МишаИнженер Robot 13 02.03.2010 12:26
Объясните почему такая разница в подобранной арматуре МишаИнженер Расчетные программы 14 26.02.2010 23:15
Почему пр армировании ригеля в Robote получается арматуры в 2-6 раз больше? МишаИнженер Robot 1 21.02.2010 12:54
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16