Убрать зазор в выноске

Автор Тема: Убрать зазор в выноске  (Прочитано 9141 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Убрать зазор в выноске
« : 19-11-2020, 14:47:57 »
Здравствуйте!

Никак не могу убрать пространство перед текстом у мультивыноски. Как его отключить? Landing установлен в false.
Код - C# [Выбрать]
  1.      private void CreateMultileaderStyle(string styleName)
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             Editor ed = doc.Editor;
  6.             Transaction tr = db.TransactionManager.StartTransaction();
  7.  
  8.             using ( tr )
  9.             {
  10.                 DBDictionary styles = (DBDictionary) tr.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForWrite);
  11.                 MLeaderStyle style;
  12.  
  13.                 if ( styles.Contains(styleName) )
  14.                 {
  15.                     ObjectId styleId = (ObjectId) styles[ styleName ];
  16.                     style = (MLeaderStyle) tr.GetObject(styleId, OpenMode.ForWrite);
  17.                 }
  18.                 else
  19.  
  20.                 {
  21.                     style = new MLeaderStyle();
  22.                     style.PostMLeaderStyleToDb(db, styleName);
  23.                     tr.AddNewlyCreatedDBObject(style, true);
  24.                 }
  25.  
  26.                 ObjectId ts = db.Textstyle;
  27.                 style.Name = styleName;
  28.                 style.ContentType = ContentType.MTextContent;
  29.                 MText defaultText = new MText();
  30.                 defaultText.Contents = styleName;
  31.                 style.TextStyleId = ts;
  32.                 style.DefaultMText = defaultText;
  33.                 style.TextAlignmentType = TextAlignmentType.LeftAlignment;
  34.  
  35.                 style.FirstSegmentAngleConstraint = AngleConstraint.DegreesAny;
  36.                 style.SecondSegmentAngleConstraint = AngleConstraint.DegreesHorz;
  37.  
  38.                 style.LeaderLineColor = Color.FromColorIndex(ColorMethod.ByAci, 101);
  39.  
  40.                 BlockTable blockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  41.                 if ( !blockTable.Has("_NONE") )
  42.                 {
  43.                     Application.SetSystemVariable("DIMBLK", "_NONE");
  44.                 }
  45.  
  46.                 style.ArrowSymbolId = blockTable[ "_NONE" ];
  47.                 style.TextAlignAlwaysLeft = true;
  48.                 style.TextAttachmentType = TextAttachmentType.AttachmentBottomOfTopLine;
  49.                 style.EnableDogleg = true;
  50.                 style.EnableLanding = false;
  51.                // style.LandingGap = 0;
  52.  
  53.                 tr.Commit();
  54.             }
  55.         }


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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Убрать зазор в выноске
« Ответ #1 : 19-11-2020, 15:04:53 »
Попробуй:
Код - C# [Выбрать]
  1. style.DoglegLength = 0;


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Убрать зазор в выноске
« Ответ #2 : 19-11-2020, 15:55:48 »
Не помогает, в свойствах по прежнему включен зазор.


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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Убрать зазор в выноске
« Ответ #3 : 19-11-2020, 16:05:01 »
У меня такое в библиотечном методе:
Код - C# [Выбрать]
  1. leader.EnableDogleg = true;
  2. leader.EnableLanding = true;
  3. leader.SetDogleg(i, mLeaderTextDoglegDirection);
  4. leader.DoglegLength = 0.05 * mLeaderTextHeight;

Оффлайн Judas

  • ADN OPEN
  • **
  • Сообщений: 80
  • Карма: 0
Re: Убрать зазор в выноске
« Ответ #4 : 19-11-2020, 16:07:41 »
Вот мои настройки, может поможет, отображается без смещения.
Код - C# [Выбрать]
  1. using (Transaction tr = db.TransactionManager.StartTransaction())
  2.             {
  3.                 //Открывает таблицу стилей
  4.                 DBDictionary mlStyles = (DBDictionary)tr.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForWrite);
  5.                 //Таблицы блоков
  6.                 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  7.                 //Переменная стиля
  8.                 MLeaderStyle mleaderStyle;
  9.                 //Проверка есть ли такой размерный стиль или нет
  10.                 if (mlStyles.Contains(NameMLeaderStyle))
  11.                 {
  12.                     //MessageBox.Show($"Размерный стиль ({NameMLeaderStyle}) уже существует", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  13.                     mleaderStyle = (MLeaderStyle)tr.GetObject((ObjectId)mlStyles[NameMLeaderStyle], OpenMode.ForWrite);
  14.                 }
  15.                 else
  16.                 {
  17.                     mleaderStyle = new MLeaderStyle();
  18.                     ObjectId mleaderStyleId = mleaderStyle.PostMLeaderStyleToDb(db, NameMLeaderStyle);
  19.                     tr.AddNewlyCreatedDBObject(mleaderStyle, true);
  20.                 }
  21.                 #region ПАРАМЕТРЫ ВЫНОСКИ
  22.                 // группа "General" - ОБЩИЕ
  23.                 mleaderStyle.LeaderLineType = LeaderType.StraightLeader;    // Тип выноски - прямая
  24.                 mleaderStyle.LeaderLineColor = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByLayer, 256); //Цвет
  25.                 mleaderStyle.LeaderLineTypeId = db.ByBlockLinetype;         // тип линии выноски
  26.                 mleaderStyle.LeaderLineWeight = LineWeight.LineWeight025;   // толщина выноски
  27.                    
  28.                 // Группа "Arrowhead" - СТЕРЕЛКА
  29.                 if (!bt.Has("_DOT")) { GetArrowObjectId("DIMBLK", "_DOT"); }    // Загружаем определение блока "_DOT"
  30.                 mleaderStyle.ArrowSymbolId = bt["_DOT"];                        // Устанавливаем блок точки на указатель выноски
  31.                 mleaderStyle.ArrowSize = 0.5;                                     // Размер блока "точки"
  32.  
  33.                 // Группа "Leader break" - Разрыв выноски
  34.                 mleaderStyle.BreakSize = 0;                                     // Размер размера
  35.  
  36.                 // Группа "Constrains" - Зависимости и ограничения
  37.                 mleaderStyle.MaxLeaderSegmentsPoints = 2; // Максимальное количество точек выноски
  38.                 mleaderStyle.FirstSegmentAngleConstraint =AngleConstraint.DegreesAny;   // Угол выноски первого сегмента - любой
  39.                 mleaderStyle.SecondSegmentAngleConstraint = AngleConstraint.DegreesAny; // Угол выноски второго сегмента - любой
  40.                 mleaderStyle.EnableDogleg = false;          //выключаем полку - смещение текста на полке
  41.                 mleaderStyle.DoglegLength = 0;              // само смещение полки
  42.                 mleaderStyle.EnableFrameText = false;       // наличии рамки
  43.  
  44.                 // Группа "Scale"- масштабы
  45.                 mleaderStyle.Annotative = AnnotativeStates.False; // аннотативный
  46.                 mleaderStyle.Scale = 1; // масштаб
  47.  
  48.                 // Вкладка "Content" - СОДЕРЖАНИЕ        
  49.                 mleaderStyle.ContentType = ContentType.MTextContent; //
  50.                
  51.                 // Присвоим стиль текста
  52.                 mleaderStyle.TextStyleId = GetTextStyleObjectId(TextStyle);
  53.  
  54.                 // Группа "Text options"
  55.                 mleaderStyle.TextAngleType = TextAngleType.HorizontalAngle; //Угол строки текста
  56.                 mleaderStyle.TextColor = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByLayer, 256);
  57.                 mleaderStyle.TextHeight = text025;
  58.                 mleaderStyle.TextAlignAlwaysLeft = false;   // выравнивание всегда налево
  59.  
  60.                 //Привязка текста
  61.                 mleaderStyle.TextAttachmentType = TextAttachmentType.AttachmentBottomLine;
  62.                 mleaderStyle.SetTextAttachmentType(TextAttachmentType.AttachmentBottomLine, LeaderDirectionType.LeftLeader);       // Привязка слева
  63.                 mleaderStyle.SetTextAttachmentType(TextAttachmentType.AttachmentBottomLine, LeaderDirectionType.RightLeader);   // Привязка справа
  64.  
  65.                 #endregion ПАРАМЕТРЫ ВЫНОСКИ
  66.                 tr.Commit();
  67.             }
  68.  

Отмечено как Решение Atomohod 02-12-2020, 23:40:56

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Убрать зазор в выноске
« Ответ #5 : 19-11-2020, 16:08:28 »
Atomohod,
Я использовал такой код, по которому картинка выше:

Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.Colors;
  7. using System;
  8.  
  9. // This line is not mandatory, but improves loading performances
  10. [assembly: CommandClass(typeof(SetMLeaderStyle.MyCommands))]
  11.  
  12. namespace SetMLeaderStyle
  13. {
  14.   public class MyCommands
  15.   {
  16.     [CommandMethod("CMS")]
  17.     public void MyCommand() // This method can have any name
  18.     {
  19.       Document doc = Application.DocumentManager.MdiActiveDocument;
  20.       Editor ed = doc.Editor;
  21.       PromptStringOptions opts = new PromptStringOptions("\nName of MLeaderStyle: ");
  22.       opts.AllowSpaces = true;
  23.       PromptResult res = ed.GetString(opts);
  24.       if (res.Status == PromptStatus.OK) {
  25.         CreateMultileaderStyle(res.StringResult);
  26.       }
  27.     }
  28.     private void CreateMultileaderStyle(string styleName)
  29.     {
  30.       Document doc = Application.DocumentManager.MdiActiveDocument;
  31.       Database db = doc.Database;
  32.       Editor ed = doc.Editor;
  33.       Transaction tr = db.TransactionManager.StartTransaction();
  34.  
  35.       using (tr)
  36.       {
  37.         DBDictionary styles = (DBDictionary)tr.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForWrite);
  38.         MLeaderStyle style;
  39.  
  40.         if (styles.Contains(styleName))
  41.         {
  42.           ObjectId styleId = (ObjectId)styles[styleName];
  43.           style = (MLeaderStyle)tr.GetObject(styleId, OpenMode.ForWrite);
  44.         }
  45.         else
  46.         {
  47.           style = new MLeaderStyle();
  48.           style.PostMLeaderStyleToDb(db, styleName);
  49.           tr.AddNewlyCreatedDBObject(style, true);
  50.         }
  51.  
  52.         ObjectId ts = db.Textstyle;
  53.         style.Name = styleName;
  54.         style.ContentType = ContentType.MTextContent;
  55.         MText defaultText = new MText();
  56.         defaultText.Contents = styleName;
  57.         style.TextStyleId = ts;
  58.         style.DefaultMText = defaultText;
  59.         style.TextAlignmentType = TextAlignmentType.LeftAlignment;
  60.  
  61.         style.FirstSegmentAngleConstraint = AngleConstraint.DegreesAny;
  62.         style.SecondSegmentAngleConstraint = AngleConstraint.DegreesHorz;
  63.  
  64.         style.LeaderLineColor = Color.FromColorIndex(ColorMethod.ByAci, 101);
  65.  
  66.         BlockTable blockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  67.         if (!blockTable.Has("_NONE"))
  68.         {
  69.           Application.SetSystemVariable("DIMBLK", "_NONE");
  70.         }
  71.  
  72.         style.ArrowSymbolId = blockTable["_NONE"];
  73.         style.TextAlignAlwaysLeft = true;
  74.         style.TextAttachmentType = TextAttachmentType.AttachmentBottomOfTopLine;
  75.         style.EnableDogleg = true;
  76.         style.EnableLanding = false;
  77.         style.DoglegLength = 0;
  78.         style.LandingGap = 0;
  79.  
  80.         tr.Commit();
  81.       }
  82.     }
  83.   }
  84. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Убрать зазор в выноске
« Ответ #6 : 19-11-2020, 19:08:09 »
Странное дело - если раскомментировать строчку  // style.LandingGap = 0; то тогда зазор пропадает. Но тогда вопрос к логике  - если style.EnableLanding = false; то для чего landing gap?