Создать мультивыноску по заданной позиции полочки

Автор Тема: Создать мультивыноску по заданной позиции полочки  (Прочитано 1534 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1182
  • Карма: 8
    • idea-soft.ru
  • Skype: makar_govorun
Создаю мультивынску
Как мне выставить позицию начала полочки?
Код - vb.net [Выбрать]
  1.      
  2. Const ContentType_MTextContent = 2
  3. Const TextAttachmentType_AttachmentBottomLine = 5
  4. Const LeaderDirectionType_LeftLeader = 1
  5. Const LeaderDirectionType_RightLeader = 2
  6.  
  7.                     Dim leader As MLeader = New MLeader
  8.  
  9.                     leader.ContentType = ContentType_MTextContent
  10.                     ' установка стиля размещения текста для правосторонней выноски
  11.                     leader.SetTextAttachmentType(TextAttachmentType_AttachmentBottomLine, _
  12.                                                  LeaderDirectionType_RightLeader)
  13.                     ' установка стиля размещение текста для левосторонней выноски
  14.                     leader.SetTextAttachmentType(TextAttachmentType_AttachmentBottomLine, _
  15.                                                  LeaderDirectionType_LeftLeader)
  16.                     ' полочка подчеркивает первую строку
  17.                     leader.TextAttachmentType = TextAttachmentType.AttachmentBottomOfTopLine
  18.  
  19.                     leader.MText = ' тут я присваиваю объект MTEXT
  20.                     ' получается, то когда я задаю позицию Mtext, то позиция полочки другая, а мне нужно чтобы Mtext относительно заданной мною позиции (см. картинку)
  21.  
  22.                     leader.AddLeaderLine(New Point3d(...))  ' точку передаю для позиции стрелки выноски


Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1596
  • Карма: 350
  • Отец modplus.org
    • ModPlus
Нужно задать свойство Location для MText

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1182
  • Карма: 8
    • idea-soft.ru
  • Skype: makar_govorun
Нужно задать свойство Location для MText
Так я и задаю объекту Mtext location, но когда это Mtext присваиваешь контексту мультивыноски,
то саму позицию начала полочки у меня не получается контролировать.
 

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1182
  • Карма: 8
    • idea-soft.ru
  • Skype: makar_govorun
Моя цель выставить все полочки вдоль зеленой линии (см картинку) с заданным шагом.
Когда создаю обычные Mtext, то их Location получаются вдоль зелёной линии,
а когда это Mtext присваивается контексту MLader, то почему-то у MText,
который становится составной частью MLeader, смещается на постоянную величину по X и Y.


Цель такова, чтобы позиция полочки 2 была в нужной позиции 1 на зеленой линии (см поясн-ю картинку)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12984
  • Карма: 1669
  • Рыцарь ObjectARX
  • Skype: rivilis
почему-то у MText,
который становится составной частью MLeader, смещается на постоянную величину по X и Y.
Ну так и смести MText на это значение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 946
  • Карма: 154
Если я не ошибаюсь, то смещение MText от полки по вертикали и горизонтали регулируются системными переменными, относящимися к размерным стилям. По крайней мере я бы сначала копал в этом направлении.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2457
  • Карма: 692
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Если я правильно понял вопрос, надо задать с помощью AddLastVertex. См. пример:
Код - C# [Выбрать]
  1. private static MLeader CreateMLeader(
  2.     Point3d mLeaderArrowPoint,
  3.     Point3d mLeaderPosition,
  4.     ObjectId mLeaderTextStyleId,
  5.     Vector3d mLeaderTextDoglegDirection,
  6.     double mLeaderTextHeight,
  7.     LineWeight mLeaderLineWeight,
  8.     ObjectId mLeaderLayerId,
  9.     Color mLeaderColor,
  10.     LineWeight mLeaderTextLineWeight,
  11.     string mLeaderTextContent,
  12.     double mLeaderTextRotation,
  13.     bool useTextMask,
  14.     TextAlignmentType mLeaderTextAlignment,
  15.     Color mLeaderTextColor)
  16. {
  17.     var leader = new MLeader();
  18.     leader.SetDatabaseDefaults();
  19.     var i = leader.AddLeader();
  20.     leader.AddLeaderLine(i);
  21.     leader.AddFirstVertex(i, mLeaderArrowPoint);
  22.     leader.AddLastVertex(i, mLeaderPosition);
  23.     leader.SetTextAttachmentType(
  24.         TextAttachmentType.AttachmentBottomOfTopLine,
  25.         LeaderDirectionType.LeftLeader);
  26.     leader.SetTextAttachmentType(
  27.         TextAttachmentType.AttachmentBottomOfTopLine,
  28.         LeaderDirectionType.RightLeader);
  29.     leader.ContentType = ContentType.MTextContent;
  30.     leader.TextStyleId = mLeaderTextStyleId;
  31.     leader.EnableDogleg = true;
  32.     leader.EnableLanding = true;
  33.     leader.SetDogleg(i, mLeaderTextDoglegDirection);
  34.     leader.DoglegLength = 0.05 * mLeaderTextHeight;
  35.     leader.LineWeight = mLeaderLineWeight;
  36.     leader.LayerId = mLeaderLayerId;
  37.     leader.Color = mLeaderColor;
  38.     using (var mText = new MText())
  39.     {
  40.         mText.TextStyleId = mLeaderTextStyleId;
  41.         mText.LineWeight = mLeaderTextLineWeight;
  42.         mText.Contents = mLeaderTextContent;
  43.         mText.TextHeight = mLeaderTextHeight;
  44.         mText.Rotation = mLeaderTextRotation;
  45.         mText.LineSpacingFactor = 0.9;
  46.         mText.Color = mLeaderTextColor;
  47.         if (useTextMask)
  48.         {
  49.             mText.BackgroundFill = true;
  50.             mText.BackgroundScaleFactor = 1.1;
  51.             mText.UseBackgroundColor = true;
  52.         }
  53.         else
  54.         {
  55.             mText.BackgroundFill = false;
  56.         }
  57.         leader.MText = mText;
  58.     }
  59.     // Выравнивание работает только
  60.     // после присваивания выноске текста
  61.     leader.TextAlignmentType = mLeaderTextAlignment;
  62.     leader.ArrowSymbolId = ObjectId.Null;
  63.     leader.SetArrowSize(i, 0.0);
  64.     leader.SetArrowSymbolId(i, ObjectId.Null);
  65.     return leader;
  66. }