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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 21-07-2021, 09:01:17

Название: Создать мультивыноску по заданной позиции полочки
Отправлено: Алексей (IdeaSoft) от 21-07-2021, 09:01:17
Создаю мультивынску
Как мне выставить позицию начала полочки?
Код - 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(...))  ' точку передаю для позиции стрелки выноски

Название: Re: Создать мультивыноску по заданной позиции полочки
Отправлено: Александр Пекшев aka Modis от 21-07-2021, 09:15:54
Нужно задать свойство Location для MText
Название: Re: Создать мультивыноску по заданной позиции полочки
Отправлено: Алексей (IdeaSoft) от 21-07-2021, 09:39:31
Нужно задать свойство Location для MText
Так я и задаю объекту Mtext location, но когда это Mtext присваиваешь контексту мультивыноски,
то саму позицию начала полочки у меня не получается контролировать.
 
Название: Re: Создать мультивыноску по заданной позиции полочки
Отправлено: Алексей (IdeaSoft) от 21-07-2021, 09:51:55
Моя цель выставить все полочки вдоль зеленой линии (см картинку) с заданным шагом.
Когда создаю обычные Mtext, то их Location получаются вдоль зелёной линии,
а когда это Mtext присваивается контексту MLader, то почему-то у MText,
который становится составной частью MLeader, смещается на постоянную величину по X и Y.


Цель такова, чтобы позиция полочки 2 была в нужной позиции 1 на зеленой линии (см поясн-ю картинку)
Название: Re: Создать мультивыноску по заданной позиции полочки
Отправлено: Александр Ривилис от 21-07-2021, 14:32:36
почему-то у MText,
который становится составной частью MLeader, смещается на постоянную величину по X и Y.
Ну так и смести MText на это значение.
Название: Re: Создать мультивыноску по заданной позиции полочки
Отправлено: Алексей Кулик от 21-07-2021, 19:57:02
Если я не ошибаюсь, то смещение MText от полки по вертикали и горизонтали регулируются системными переменными, относящимися к размерным стилям. По крайней мере я бы сначала копал в этом направлении.
Название: Re: Создать мультивыноску по заданной позиции полочки
Отправлено: Дмитрий Загорулькин от 23-07-2021, 13:17:00
Если я правильно понял вопрос, надо задать с помощью 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. }