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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменение свойств объекта через системные переменные средствами VBA

Изменение свойств объекта через системные переменные средствами VBA

Ответ
Поиск в этой теме
Непрочитано 13.04.2015, 11:26 #1
Изменение свойств объекта через системные переменные средствами VBA
Arturich
 
Проектировщик
 
Иркутск
Регистрация: 13.04.2015
Сообщений: 12

Всем доброго времени суток!
Недавно занялся направлением VBA + AUTOCAD, написал функцию ставящую Размер Угла в заданную точку, функция работает как надо, но хочу изменить свойства - поменять засечки на концах размера на стрелки или кружочки. Почитал источник http://exchange.autodesk.com/autocad...0acaf-5077.htm
потыкал Help в автокаде, понял что есть системные переменные, отвечающие за этот параметр, в данном случае DIMBLK, и в неё нужно заталкать значение, например - "_DOTSMALL" (малая точка). Обнаружил некий метод .SetVariable который этим и занимается. Не могу догнать как применить этот метод и к какому объекту, что бы он заработал

Код:
[Выделить все]
Sub Set_Angel_Dim(X As Double, Y As Double, Optional a As Double, Optional Dir As Integer)
Call Check_doc    '<----проверяет все ли нормально с acadDoc.ModelSpace. что бы работать с ним

Dim AngelVertex(0 To 2) As Double
Dim FstEndPnt(0 To 2) As Double
Dim SndendPnt(0 To 2) As Double
Dim TextPnt(0 To 2) As Double
Dim DimPointAngularObj As AcadDim3PointAngular
AngelVertex(0) = X: AngelVertex(1) = Y

    Select Case BlockName
        Case 1
        FstEndPnt(0) = X - FullWidthTK: FstEndPnt(1) = Y
        SndendPnt(0) = X + FullWidthTK: SndendPnt(1) = Y
        Case Else
        FstEndPnt(0) = X + FullWidthTK: FstEndPnt(1) = Y
        SndendPnt(0) = X - FullWidthTK: SndendPnt(1) = Y
    End Select

Set AngObj = acadDoc.ModelSpace.AddDimAngular(AngelVertex, FstEndPnt, SndendPnt, TextPnt)
With AngObj
    .ScaleFactor = ScaleFactorTabPipeDimOdj
    .TextOverride = a       'Round(L, Round_2)
End With

'AngObj.SetVariable "DIMBLK", "_DOTSMALL" 'special arrow blk    'пробовал так, ругается на неприменимость данного метода к объекту
'acadDoc.ModelSpace.SetVariable "DIMBLK2", "_DOTSMALL" 'special arrow blk  'так пробовал, та же история с "неприменимостью"

End Sub
Пожалуйста, может кто показать, как применить данный метод правильно?
P.S. Автокад стоит 2013

Последний раз редактировалось Arturich, 13.04.2015 в 14:04. Причина: Модератор поправил
Просмотров: 4284
 
Непрочитано 13.04.2015, 11:37
#2
Кулик Алексей aka kpblc
Moderator

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


Ну, во-первых, не "глобальные переменные", а "системные переменные". Во-вторых, попробуй посмотреть свойства своего объекта размера - и для него уже устанавливать DIMBLK. Если такое невозможно, то перед созданием объекта размера задаешь системную переменную DIMBLK в то значение, которое тебе надо, потом (по окончании работы программы) верни его назад.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.04.2015, 12:44
#3
Arturich

Проектировщик
 
Регистрация: 13.04.2015
Иркутск
Сообщений: 12
Отправить сообщение для Arturich с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну, во-первых, не "глобальные переменные", а "системные переменные". Во-вторых, попробуй посмотреть свойства своего объекта размера - и для него уже устанавливать DIMBLK. Если такое невозможно, то перед созданием объекта размера задаешь системную переменную DIMBLK в то значение, которое тебе надо, потом (по окончании работы программы) верни его назад.
Сложность вызывает СИНТАКИС (как это написать) я ведь как это все понимаю:
1) установить DIMBLK для своего объекта, пробую так

Set AngObj = acadDoc.ModelSpace.SetVariable("DIMBLK2", "_DOTSMALL")

но вылазит все та же ошибка "объект не поддерживает данный метод"

2) А установить значение переменной DIMBLK в нужное _DOTSMALL

acadDoc.ModelSpace.SetVariable "DIMBLK", "_DOTSMALL"

и та же ошибка, вот и пытаюсь понять к чему прикрутить этот .SetVariable "DIMBLK", "_DOTSMALL" или .SetVariable("DIMBLK2", "_DOTSMALL")
и как это сделать синтаксически
Arturich вне форума  
 
Непрочитано 13.04.2015, 15:09
#4
Кулик Алексей aka kpblc
Moderator

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


Я на VBA не пишу, поэтому критика кода не принимается.
Код:
[Выделить все]
Option Explicit

Public Sub test()
Dim sysVarDimBlk As String

  sysVarDimBlk = ThisDrawing.GetVariable("dimblk")
  If sysVarDimBlk = "" Then sysVarDimBlk = "."
  ThisDrawing.Utility.Prompt "Current value ""dimblk"" is " + sysVarDimBlk + vbCrLf
  ThisDrawing.SetVariable "dimblk", "_dotsmall"
  ThisDrawing.Utility.Prompt "Current value ""dimblk"" is " + ThisDrawing.GetVariable("dimblk") + vbCrLf
  ThisDrawing.SetVariable "dimblk", sysVarDimBlk
  ThisDrawing.Utility.Prompt "Current value ""dimblk"" is " + sysVarDimBlk + vbCrLf
End Sub
----- добавлено через 46 сек. -----
Советую внимательнее читать документацию и примеры использования методов и свойств. А также справку по соответствующим возможным значениям системных переменных
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.04.2015, 07:52
#5
Arturich

Проектировщик
 
Регистрация: 13.04.2015
Иркутск
Сообщений: 12
Отправить сообщение для Arturich с помощью Skype™


Ура, разобрался, не получилось у меня напрямую ковырять системные переменные, да может оно и не надо, когда все более элегантно вырисовывается.
Для данного класса AcadDimAngular есть ряд свойств в т.ч. Arrowhead1Type и Arrowhead2Type каждое из которых отвечает за соответствующую "стрелку" на размере.
Это свойство отменяет значение системной переменной DIMBLK1 для данного измерения.
И уже каждому из этих свойств можно присваивать нужные значения

acArrowDefault
acArrowDot
acArrowDotSmall
acArrowDotBlank
acArrowOrigin
acArrowOrigin2
acArrowOpen
acArrowOpen90
acArrowOpen30
acArrowClosed
acArrowSmall
acArrowNone
acArrowOblique
acArrowBoxFilled
acArrowBoxBlank
acArrowClosedBlank
acArrowDatumFilled
acArrowDatumBlank
acArrowIntegral
acArrowArchTick

рабочий синтаксис выглядит так:

Код:
[Выделить все]
 With AngObj
    .Arrowhead1Type = acArrowDotSmall
    .Arrowhead2Type = acArrowDotSmall
End With
Arturich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменение свойств объекта через системные переменные средствами VBA



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Текущий ремонт, капитальный ремонт, техническое обслуживание. Через сколько лет наступает после сдачи объекта? Red_line Архитектура 12 12.09.2018 14:52
Аттестация в Минрегионе по негосударственной экспертизе Людмила Охр Прочее. Архитектура и строительство 350 14.02.2015 17:50
Ввод в эксплуатацию салона красоты - нужно ли (и в какой форме) согласование с пожарниками ? drill_man Прочее. Архитектура и строительство 4 20.09.2013 12:03
AutoCAD 2011 и ошибка при изменении Z координаты 3D полилинии, через палитру свойств gomer8 AutoCAD 9 16.12.2010 13:12