|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Программное создание мультивыноски
Инженер-строитель
Киров
Регистрация: 15.08.2007
Сообщений: 2,204
|
||
Просмотров: 39405
|
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Мультивыноска через LISP создается функцией
Код:
Код:
Можно мультивыноску и добавить командой, например так (для двух точек): Код:
После того, как объект мультивыноски создан, для него надо установить всё то множество свойств, чтобы он выглядел правильно. И, конечно, установить главное свойство - textstring. Все эти действия спрятать в низкоуровневые функции, а на самом верху сделать 1-2 "конечных" функции, в которые передавать простые аргументы, например строку над выноской и под выноской. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Надо научиться справкой по объектам. Делать надо так:
1. В Vlide вызвать справку 2. Выбрать ActiveX and VBA Reference 3. Выбрать в дереве Objects 4. Выбрать нужный объект, например Mleader object 5. Щелкнуть по нему и посмотреть. Причитать общее описание. Там есть ссылка Цитата:
Посмотреть Methods и Properties. Но сначала перейти на AddMleader. Там есть описание в стиле VBA Код:
1. Должна быть функция с именем vla-AddMleader. 2. Первым аргументом этой функции должно быть рабочее пространство, куда добавлять объект. В сигнатуре VBA нет такого аргумента, но есть object.AddMleader и перечень, чем может быть этот object. 3. Второй аргумент pointsArray (не LISP-список). Как его сделать я показал. 4. Третий загадочный аргумент - leaderLineIndex. Вспоминаем, что у мультивыноски может быть несколько выносных линий. Мы, для начала, делаем одну, а её индекс (номер) как раз и будет 0. 5. И возвратить эта функция должна созданный объект. Его надо запомнить в переменной, чтобы потом применять к нему методы или устанавливать свойства. Например, чтобы занести текст, надо Код:
Код:
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
ShaggyDoc, позволю себе немного уточнить: достаточно набрать в консоли запущенной VLIDE vla-addmleader и тут же нажать Ctrl+F1. В подавляющем большинстве случаев (кроме особо тяжелых) открывается справка с уже открытым указанным методом.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Да, конечно. Можно и так. Но для этого надо написать, то есть знать, что существует метод AddLeader, и к нему надо добавить vla-. Ctrl+F1 очень удобно, когда надо уточнить что-то по известной функции.
Я специально описал самый длительный путь. А до более коротких вариантов уже можно додуматься. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
Я его нашел случайно
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Подскажите, пожалуйста как при создании лиспом мультивыноски, задать в ее содержимом ЗНАЧЕНИЕ переменной, обозначенной в этом же лиспе
Код:
Последний раз редактировалось skkkk, 05.12.2010 в 03:35. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
(command "_mleader" a pause "_e" "0" (strcat "Уголок " b))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Алексей, ком строка ругается
Цитата:
Добавлено: разобрался... (setq b (getstring... Последний раз редактировалось skkkk, 05.12.2010 в 01:26. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
Конвертируй в строку. Либо через rtos, либо через itoa, либо через vl-princ-to-string, либо в местной библиотеке бери соответствующую функцию
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
skkkk, стили мультивыносок хранятся в словаре ACAD_MLEADERSTYLE.
Там храняться объекты AcadMleaderStyle Sub MLS() Dim oDict As AcadDictionary Set oDict = ThisDrawing.Dictionaries.Item("ACAD_MLEADERSTYLE") Dim i As Long For i = 0 To oDict.Count - 1 Dim oObj As AcadObject Set oObj = oDict.Item(i) If oObj.ObjectName = "AcDbMLeaderStyle" Then Dim oMLS As AcadMLeaderStyle Set oMLS = oObj MsgBox "Name = " & oMLS.Name & vbCrLf & _ "Annotative = " & oMLS.Annotative & vbCrLf & _ "ContentType = " & oMLS.ContentType & vbCrLf & _ "LeaderLineType = " & oMLS.LeaderLineType, vbInformation, "MLeader Styles" End If Next i Dim oNewMLS As AcadMLeaderStyle Set oNewMLS = oDict.AddObject("TEST", "AcDbMLeaderStyle") oNewMLS.LeaderLineType = acSplineLeader Dim oCol As New AcadAcCmColor oCol.ColorIndex = acBlue oNewMLS.LeaderLineColor = oCol Call ThisDrawing.SetVariable("CMLEADERSTYLE", "TEST") Dim points(0 To 5) As Double points(0) = 1: points(1) = 1: points(2) = 0 points(3) = 2: points(4) = 2: points(5) = 0 Dim oML As AcadMLeader Set oML = ThisDrawing.ModelSpace.AddMLeader(points, i) oML.TextString = "mleader created with " & vbCrLf & "style ""TEST""" End Sub |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
Пояснения про DImblk Еще один вариант mip-mleader-style-create
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 17.06.2015 в 14:15. Причина: Ссылка на пост #44 |
|||
![]() |
|
||||
Инженер по теплоснабжению Регистрация: 10.04.2010
РБ, г. Могилев
Сообщений: 25
|
может кто подсказать... такое дело... создаю достаточно простую мультивыноску с одной выноской по 2м точкам... она создается все вроде как хочу, только текст всегда оказывается слева от второй точки... а при минимальном движении акад уже меняет выноску с другой стороны... как должно быть... чета я не нашел метода, чтобы этот момент контролировать...
Код:
|
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
Код:
|
|||
![]() |
|
||||
Регистрация: 11.08.2011
Сообщений: 41
|
добрый день. Решил не создавать новую тему, а поднять старую, т.к. по той же проблеме.
Делаю утилитку на дельфи, чтобы можно было создавать мультивыноски. Все вроде бы работает нормально, но есть один вопрос. Подскажите куда копать. В общем, когда я создаю выноску, она по умолчанию имеет линию выноски слева от текста, а иногда мне нужно справа от текста ее крепить? Какой параметр за это отвечает? Код:
|
|||
![]() |
|
||||
Регистрация: 17.03.2009
Сообщений: 114
|
Посоветуйте, как на LISPe создать стиль мультивыноски с помощью entmake?
В посте VVA приведен объектный способ создания стиля мвыноски, но он, на мой взгляд, сложнее программного. Во-вторых, не задает ряд важных свойств стиля мультивыноски: - нельзя отключить "Автоматически добавлять полку", - указать для мтекста некоторые параметры, например, скрытие заднего фона текста. С помощью entget можно извлечь DXF коды для мультивыносок, например программой из справки: Код:
В справке AutoCAD даны перечни кодов для стилей мультивыносок 4 типов (включая общий). Если мвыноска предусматривается с мтекстом, то нужно использовать MLeaderStyle Context Data Group Codes? Настораживает, что некоторые номера кодов для разных стилей имеют разное назначение (например, 90 Property Override Flag для Common MLeaderStyle Group Codes и 90 Text Color для MLeaderStyle Context Data Group Codes). Помогите разобраться. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
Нефтепроводчик, стиль мультивыноски и объект мультивыноски - немного разные вещи. И, откровенно говоря, я бы не стал работать со стилями через DXF - объектная модель все же более удобна во многих случаях.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
Oliver_88, а теперь попробуй промоделировать следующую ситуацию: ты создал стиль, а пользователь взял да и поменял там пару-тройку настроек. Задача - вернуть все в нормальный вид.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
"ценный кадр" Регистрация: 02.12.2010
Сообщений: 115
![]() |
|
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
у меня вопрос, похожий на тот что в #23
модифицирую выноску Код:
__________________
apel.fas |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
у меня получается частично решить проблему с помощью
Код:
Но как и в случае с SetdoglegDirection, это немного не то. Интересует изменение положения полки выноски, относительно выносной линии. То есть если мы задаем точки p1 и p2, то нужно чтобы выносная линия была отрисована как p1-p2, а полка выноски отображалась справа или слева, в зависимости от угла наклона линии выноски. Offtop: Я извиняюсь за, возможно, глупые вопросы по поводу свойств объектов, но у меня не работает нормально справка по объектной модели.
__________________
apel.fas |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Для VVA.
Как с помощью кода, описанного в сообщении #18, создать стиль мультивыноски с символом стрелки "Закрашенная замкнутая" ("Closed filled")? Выражения (mip-mleader-style-create "СТРОЙЗАДАНИЕ" ".") (setvar "CMLEADERSTYLE" (vla-get-name (mip-mleader-style-create "СТРОЙЗАДАНИЕ" "."))) выдают ошибку: Команда: ; ошибка: Ошибка Automation. Ключ не найден |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Profan, Извини, как-то пропустил твой вопрос
Значение dimblk - одно из возможных значений переменной _DIMBLK В твоем случае Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.02.2014
Сообщений: 7
|
Код VVA выдает такую ошибку: "; ошибка: Ошибка Automation. Проблемы при загрузке приложения", причем на домашнем компьютере с автокадом 2014 - всё работает... При этом стиль успевает создать, а настройки стиля - нет. С чем может быть такое связано?
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Alikme, А на какой версии Автокада выдает ошибку?
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Проверь этим вариантом.
Код:
Там в комментариях все что находил в интернете по этой теме. Если не интересует, можно удалить
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.02.2014
Сообщений: 7
|
http://www.arch-pub.com/2016-breaks-2009_10732354.html Такая же проблема походу как у меня, конфликт с AutoCAD 2015, пишет что помогла установка AutoCAD 2016... Код сейчас проверю
----- добавлено через ~10 мин. ----- defun mip-mleader-style-create-dxf - работает, а defun mip-mleader-style-create вылетает на том же месте... Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Я код из #44 проверял на 2015. 2014 у меня нет. 2016 так же стоит, но пока так, для интересу.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 17.03.2009
Сообщений: 114
|
Цитата:
Код:
В общем, через точечную пару (141 ___) |
|||
![]() |
|
||||
Регистрация: 20.05.2017
Сообщений: 1
|
Если кому то интересно, могу показать свое решение для проставления мультивыносок по блокам. Скрипт написан на IronPython в Dynamo, но может работать без Динамо, главное чтобы в системе был установлен АйронПайтон
![]() Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 21.05.2017 в 13:51. Причина: Опечатка |
|||
![]() |
|
||||
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 334
|
Коллеги!
Заморочился с вопросом, можно ли силами VBA создать мультивыноску и задать ей стиль уже имеющийся в чертеже? проверить наличие стиля в чертеже вроде удалось Код:
Вот так создаю: Код:
1. Созданная мультивыноска в принципе не хочет принимать стиль путем банального копирования свойств методами автокад. Следовательно она изначально корявая получается 2. Как программно присвоить существующий стиль к программно (и даже не программно) созданной мультивыноске Что-то внутри меня говорит, что не все просто. Надо отдельно мучать передачу свойств (стиля) многострочного текста и отдельно самой выноске. Ошибаюсь? |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Здравствуйте, может кто-нибудь помочь - не понимаю, как вставить стандартную мультивыноску AutoCAD?
Остановился вот на чём: Код:
Что я делаю не так? Сразу опишу поставленную цель (чтоб было понятнее): мультивыноска должна с блоков из созданного списка извлечь записанное ранее значение атрибута "ПОЗ" и записать его в мультивыноску. И так на все выделенные блоки. Предварительно вижу так, чтобы мультивыноски вставлялись в геометрическую середину блоков. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
Все правильно. Читаем справку: нужно передавать массив точек (начало / конец - как минимум). Поставь вручную мультивыноску и сделай для нее дамп.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Регистрация: 05.04.2012
Сообщений: 8
|
Упрямые ВЫноски!!
заходит свойство AML.TextDirection=5 -"по стилю".. и сменятся на 2=acRightToLeft не хочет? а на 3-без проблем что за стиль мешает этому ? в стилях мультивыносок галочка снята этот вопрос поднимался в посте #23 ☆ и ниже.. но понятного ответа я не узрел.. Код:
Последний раз редактировалось yurms, 16.11.2018 в 13:18. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,430
|
Вручную поменяй выравнивание и посмотри, какие свойства сменились.
ИМХО выравнивание текста (то бишь аннотации) здесь совсем не при делах. Могу ошибаться - давно с мультивыносками не работал...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
Подниму тему.
Товарищи, подскажите, пожалуйста, как на VBA реализовать мультивыноску, чтобы текс в выноске сразу же отображался на экране, а вот конечное положение выноски можно было бы выбрать самому (например, в зависимости от длины текста). Для иллюстрации прилагаю гифку. Требуемый функционал в примере реализован на лисп, но разобраться как именно и как это переложить на VBA никак не могу. |
|||
![]() |
|
||||
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 334
|
Я, что-то, не понял задачи. Описание и гифка точно об одном и том же?
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
чтобы было стандартным методом (точнее, стандартными средствами ЯП) - надо переходить на более "свежие" ЯП. Например, .Net
|
|||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
Theodor, точно об одном и том же. Попробуй нажать на миниатюру, тогда в полном размере будет видно, как текст выноски можно смещать вместе с курсором и выбирать, куда лучше разместить на чертеже.
Сергей812, прогулялся по ссылке, там как раз то, что нужно, но написано, опять же, через функцию. Через отдельную функцию и на лиспе было реализовано. Я то полагал, что это можно просто одним параметром указать при вызове мультивыноски, ну либо какую переменную в автокаде поменять. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
VBA в МС-офисе родной, в акаде он прикручен сбоку через одно место. Даже не загрузить готовый VBA проект в акад без установленной среды разработки VBA - в отличие от остальных ЯП для разработки надстроек. Поэтому ничего удивительного, что в VBA не полный доступ ко всему API акада (хотя лисп тоже не полный доступ дает, но на нем хотя бы имитацию jig можно сделать).
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программное создание размерных стилей | Кулик Алексей aka kpblc | Программирование | 96 | 21.02.2025 13:53 |
Программное создание PlotConfiguration | Sleekka | Программирование | 2 | 17.09.2008 20:48 |
NanoСПДС | gest | Другие CAD системы | 401 | 15.07.2008 14:50 |
Программное создание vport`ов | Ax3 | Программирование | 10 | 29.08.2007 16:02 |