Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: Vladimir от 16-05-2015, 20:16:30

Название: Выноска MLeader
Отправлено: Vladimir от 16-05-2015, 20:16:30
Добрый день!
Александр Ривилис, просьба, подробнее об BlockPosition...
Сыллка или пример.
Название: Re: Выноска MLeader
Отправлено: Александр Ривилис от 16-05-2015, 20:19:36
Сыллка или пример.
Пример: Как создать мультивыноску в .NET? (http://adn-cis.org/kak-sozdat-multivyinosku-v-.net.html)
Название: Re: Выноска MLeader
Отправлено: Vladimir от 16-05-2015, 21:56:34
 Александр Ривилис, я правильно понимаю, что задать смещение выноски можно только если она содержит блок?
Название: Re: Выноска MLeader
Отправлено: Александр Ривилис от 16-05-2015, 22:01:53
Нет. Если выноска содержит MText, то нужно использовать MLeader.TextLocation
Название: Re: Выноска MLeader
Отправлено: Vladimir от 16-05-2015, 22:11:01
Да, выноска содержит Mtext
А каким параметром задать лев.\прав смещение
MLeader.TextLocation = ? (vba)
Название: Re: Выноска MLeader
Отправлено: Александр Ривилис от 16-05-2015, 22:20:11
(vba)
А причем здесь VBA? Этот раздел как называется?
В ActiveX/COM модели AutoCAD (и соотвественно в VBA) у MLeader нет свойства TextLocation.
Название: Re: Выноска MLeader
Отправлено: Vladimir от 16-05-2015, 22:34:44
Не хотел создавать похожую тему...
Если возможно изменить смещение выноски на vba, то я создам новую тему В ActiveX/COM модели AutoCAD (и соотвественно в VBA)
Если нет, то поставлю точку.
Название: Re: Выноска MLeader
Отправлено: Александр Ривилис от 16-05-2015, 22:40:37
В VBA для MLeader есть свойство TextJustify. Пример из документации:
Код - Visual Basic [Выбрать]
  1. Sub Example_TextManipulation()
  2.     Dim oML As AcadMLeader
  3.     Dim points(0 To 14) As Double
  4.  
  5.     ' Define the leader points
  6.    points(0) = 1: points(1) = 1: points(2) = 0
  7.     points(3) = 1: points(4) = 2: points(5) = 0
  8.     points(6) = 2: points(7) = 2: points(8) = 0
  9.     points(9) = 3: points(10) = 2: points(11) = 0
  10.     points(12) = 4: points(13) = 4: points(14) = 0
  11.     Dim i As Long
  12.     Set oML = ThisDrawing.ModelSpace.AddMLeader(points, i)
  13.    
  14.     oML.TextLeftAttachmentType = acAttachmentBottomLine
  15.     oML.TextRightAttachmentType = acAttachmentMiddleOfBottom
  16.     oML.TextBackgroundFill = False
  17.     oML.TextDirection = acLeftToRight
  18.     oML.TextHeight = 2.3
  19.     oML.TextJustify = acAttachmentPointMiddleLeft
  20.     oML.TextLineSpacingDistance = 2.4
  21.     oML.TextLineSpacingFactor = 1.2
  22.     oML.TextLineSpacingStyle = acLineSpacingStyleExactly
  23.     oML.TextWidth = 7.4
  24.  
  25. End Sub

Варианты значений TextJustify: http://help.autodesk.com/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-FB4F61A2-86F9-4174-8B4B-29E8DF255CE7.htm
Название: Re: Выноска MLeader
Отправлено: Vladimir от 17-05-2015, 06:36:22
В моем случае свойство TextJustify работает на выравнивание текста, на полке выноски, по лев.\прав.\центр
эксперементировал с выноской созданой кадом и смотрел в Watches на свойства см. скриншот
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs14.postimg.org%2F6g4143rpp%2F2015_05_17_08_16_31.jpg&hash=b984643d7f8cd4903674c74a10a2dbd9) (http://postimg.org/image/6g4143rpp/)

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs14.postimg.org%2Fnkgqt1a8d%2F2015_05_17_08_17_11.jpg&hash=8dee0a6074767ccc969ce54d8073e6f5) (http://postimg.org/image/nkgqt1a8d/)

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs14.postimg.org%2Fqc00jn8r1%2F2015_05_17_08_21_54.jpg&hash=0d103f730ca0fb3e2ca50d81e26e9198) (http://postimg.org/image/qc00jn8r1/)

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs14.postimg.org%2Ffqg57n2fh%2F2015_05_17_08_22_58.jpg&hash=094d5f74699719352eac5434377c003f) (http://postimg.org/image/fqg57n2fh/)
Текст выноски всегда находится с лева от выноски.
Мне нужно управлять расположением текста относительно самой выноски
Название: Re: Выноска MLeader
Отправлено: Александр Ривилис от 17-05-2015, 13:48:22
Похоже это единственное, чего можно добиться:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F9801%2F7842324.3%2F0_feb68_91f0024f_orig.png&hash=c2ea8077a6489291721d43c8cfab6afa)

Управляется при помощи метода MLeader.SetDoglegDirection:

Код - Visual Basic [Выбрать]
  1. Sub MLeader_TextDirection()
  2.     Dim oML As AcadMLeader
  3.     Dim points(0 To 5) As Double
  4.     points(0) = 0: points(1) = 0: points(2) = 0
  5.     points(3) = 10: points(4) = 20: points(5) = 0
  6.     Dim i As Long
  7.     Set oML = ThisDrawing.ModelSpace.AddMLeader(points, i)
  8.     oML.TextString = "12345"
  9.     oML.TextLeftAttachmentType = acAttachmentMiddle
  10.     oML.TextRightAttachmentType = acAttachmentMiddle
  11.     oML.TextBackgroundFill = False
  12.     oML.TextDirection = acLeftToRight
  13.     oML.TextHeight = 2.3
  14.     oML.TextJustify = acAttachmentPointMiddleCenter
  15.     oML.TextLineSpacingDistance = 2.4
  16.     oML.TextLineSpacingFactor = 1.2
  17.     oML.TextLineSpacingStyle = acLineSpacingStyleExactly
  18.     oML.TextWidth = 7.4
  19.     oML.DogLegged = True
  20.     oML.DoglegLength = 1.3
  21.     ' Управляем тем, с какой стороны будет текст
  22.    Dim vector(2) As Double
  23.     vector(0) = -1 ' 1 - текст справа, -1 - текст слева
  24.    oML.SetDoglegDirection 0, vector
  25. End Sub
Название: Re: Выноска MLeader
Отправлено: Александр Ривилис от 17-05-2015, 14:40:09
Один вопрос - одна тема. Второй вопрос здесь: Добавление к MLeader еще одной выноски (http://adn-cis.org/forum/index.php?topic=2711.0)