| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
То есть ты имеешь ввиду фактически линию сделать наклонной? Хотелось бы, чтобы геометрия вертикальной линии была идеальной, т.е. без сдвигов даже на 0.001.
|
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Я бы написал, если бы понимал как заставить полку рисоваться слева от последней точки выноски.
Попутно возник еще один вопрос. Я реализую указание параметров выноски через диалоговое окно. Сначала использовал в качестве кнопок выхода из диалога стандартную пару ok_cancel. Но эти кнопки разной ширины, захотел немного подравнять это дело. Пишу такой код вместо ok_cancel: Код:
|
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
не знаю как это делается на лисп, но в C# направление выноски устанавливается как то так:
Код:
mLandingLocation - положение текста mArrowLocation - положение указателя Возможно вам это поможет. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Я уже пытался с этими Dogleg'ами что-то сделать - ничего путного не получается, да и смысл этого свойства не очень понятен. Я задаю это свойство в двух вариантах:
Код:
Во втором случае выносная линия отклоняется от вертикали вправо, полка находится слева. ----- добавлено через ~13 мин. ----- По второму варианту верх выносной линии уходит вправо визуально на ширину мультитекста. С помощью ручки выносную линию можно вернуть в вертикальное положение, при этом полка остается слева, как мне и нужно. Вопрос - каким образом получить доступ к этой точке мультивыноски, чтобы переместить ее программно? |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Для лучшего понимания добавлю картинку. Первая выноска - это при вставке. Вторая - вручную отредактированная с помощью ручки (та, которая в красном кружке). Вот ее-то и нужно программно сдвинуть.
----- добавлено через ~3 ч. ----- Я попробовал этот способ - он не работает. Смещал точку даже на 1000 влево - все равно полка рисуется справа. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Была такая мысль, но отзеркаливание годится только для простых выносок, как на картинке. Если же выноска многосегментная (я усложнил себе задачу), то отзеркаливание не годится, так как отзеркалится вся геометрия сложной выноски.
Сейчас размышляю над двумя возможностями. 1. Использовать как-то SetLeaderLineVertices, но пока ничего дельного не выходит. 2. Выяснить координаты последней точки выноски (которая автоматически смещается, она в красном кружке на картинке) через GetLeaderLineVertices и с помощью команды РАСТЯНУТЬ сдвинуть ее на необходимую величину влево. Во всяком случае вручную этот способ работает, но как это сделать программно - пока не понимаю. ----- добавлено через ~24 мин. ----- Кажется разобрался с первым способом. работает вот такая конструкция: Код:
0 - индекс выносной линии (у меня предусмотрена всего одна выносная линия, значит 0) mleader_points - массив safearray из вариантов с типа vbDouble с координатами вершин мультивыноски |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Ну что ж, вот что у меня получилось.
Код:
Код:
Выноска корректно работает в прилагаемом чертеже, только в файле cs_leader.lsp нужно поправить путь к файлу cs_leader.dcl, в соответствии с тем местом, где вы его разместите. Для использования функции в своем чертеже нужно учесть следующее: 1. Выноска строится с текущим стилем мультивыносок, поэтому нужно создать у себя такой же стиль мультивыносок, как в прилагаемом чертеже, ну или подкорректировать cs_leader.lsp. 2. В моем чертеже установлен масштаб 100 и если вы хотите использовать функцию в чертеже с другим масштабом - нужно будет подкорректировать cs_leader.lsp в месте, где задается DoglegLength (это размер полки от выносной линии до текста). Как работать с функцией: 1. Активируем функцию командой cs_leader. 2. В появившемся диалоге устанавливаем необходимые параметры и жмем ОК. 3. Указываем точки выносной линии, которых должно быть не менее двух. Ввод точек завершаем нажатием Enter или ПКМ. 4. Идет запрос указания крайней точки полки. Возможны варианты: 4а. Указываем эту точку ЛКМ. 4б. Перемещаем курсор в ту сторону (относительно последней точки), куда хотим, чтобы откладывалась полка, жмем Enter или ПКМ. Осталось нереализованным, но вроде как не сложным: 1. Автовключение режима ОРТО (я еще думаю, надо ли это). 2. Сохранение значений по умолчанию в файле, а не глобальных переменных. Осталось нереализованным, но пока не особо понятным: 1. Обработка всевозможных нештатных ситуаций. 1а. Выход из программы по Esc - у меня остается временная линия, надо бы ее программно удалять. Разметка диалога какая-то странная. Некоторые элементы при одинаковой длине почему-то занимают разную по размерам область на экране. Ну с этим-то я справился методом тыка, а вот с чем пока не справился, но хотелось бы: 1. Свободное пространство слева от элементов управления и справа почему-то разное. Хотелось бы, чтобы справа расстояние до края формы было такое же, как и слева (красные прямоугольники). 2. Две кнопки OK и Cancel заданы кодом ok_cancel и имеют разную ширину (синий прямоугольник). Хотелось бы их сделать одинаковыми. Но при замене ok_cancel на два button'а с именами "accept" и "cancel" почему-то приводит к сообщению Автокада об ошибке - ему нужно, чтобы в диалоге обязательно присутствовала кнопка выхода OK или Cancel. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Цитата:
А на тему смещения.... если я правильно помню, это зависит от выравнивания текста.Т.е. для правильного отображения не достаточно назначить правильный вектор, нужно еще и выравнивание текста поменять и будет как то так:Видяшка |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Для тестирования эффекта.
В итоге вопрос решен. ----- добавлено через ~38 мин. ----- Появились новые "хотелки" 1. Как все-таки можно решить вопрос визуализации будущего текста мультивыноски? Устроил бы вариант хотя бы прямоугольником описывающим каким или другим примитивом, дающим представление о длине и высоте текста. 2. Можно ли при активации редактирования текста выноски двойным кликом автоматически выделять содержимое? |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Цитата:
Не знаю, меня не напрягает нажать ctrl+A, хотя я стараюсь формировать содержание ДО того как делать выноску... |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Комрады, не работает простой лисп по копированию отрезка. | MegaMost | LISP | 10 | 07.09.2015 00:23 |
Как визуализировать создаваемый объект? | Glorius | Программирование | 27 | 08.08.2015 22:59 |
мой первый лисп, выноска, пинайте! | baaba | LISP | 17 | 20.10.2009 15:42 |
Помогите продумать поворот части выноски! | Tonic | Программирование | 40 | 02.07.2007 20:21 |
Сброс связи линии выноски и MTEXTа выноски | kabzzz | AutoCAD | 3 | 19.04.2006 12:57 |