|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
21.07.2008, 13:56 | #1 | |
LISP. Простановка площадей внутри полилинии.
Инженер-конструктор
Юбилейный МО
Регистрация: 29.10.2007
Сообщений: 266
|
||
Просмотров: 9736
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
А _.field не пробовал использовать?
Почему все переменные глобальные? Где контроль передаваемых значений? Правильности выбора? "Ручки" (точнее, их размер) регулируется системной переменной APERTURE. То же, без применения команд: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
А так же
http://dwg.ru/f/showthread.php?t=18852 http://dwg.ru/dnl/184 http://dwg.ru/f/showthread.php?t=14528 http://dwg.ru/f/showthread.php?t=13524
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
VVA, эт точно
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
ciril, там к сожалению не только в repeat'е дело. Пока ругается на неверный тип аргумента "неверный тип аргумента: lentityp nil".
Такое ощущение, что я из набора неправильно примитивы извлекаю. Если пользоваться кодом Кулик Алексей aka kpblc с одиночным выбором (car(entsel)), то center находит и entmakex выполняет. А вот с массовкой проблемы. В одной из вариаций она у меня отбивала несколько текстов (площадь первой из набора полилинии) в одну полилинию, игнорируя другие. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Да что ж такое, все же просто, но не работает (
Код:
На вариант ругается : "ошибка: неверный тип аргумента: variantp #<safearray...>" Дополнено: Виноват, дело было в репите, слишком рано скобку закрывал, починил. Последний раз редактировалось megabeton, 06.12.2018 в 15:33. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Такой вопрос.
Если центр тяжести полилинии лежит за пределами контура полилинии (Г-образный контур к примеру), то площадь соответственно отбивается за пределами контура. Посоветуйте, хотя бы на уровне идеи, как принудить текст к смещению в пределы контура? Как вариант, первое что приходит в голову, предварительно разбивать такие полилинии на простые сегменты (прямоугольники, сектора кругов), отбивать в них площадь, суммировать, и потом вставлять текст в самый большой из сегментов. Только вот как заставить программу разделять полилинию на простые сегменты? Ну и может кто предложит более простые решения. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Проверяешь, входит ли точка внутрь контура. Если нет - находишь, к примеру, самую ближайшую точку (или вершину), вычисляешь смещение внутрь и ставишь текст.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Вариант 3:
1. Проверять, находиться ли точка внутри контура. Если нет - запоминать в отдельном списке и пропускать контур. 2. По завершении автоматической расстановки надписей программа сообщает, что не удалось поставить n - надписей, и начинает по списку позиционировать чертеж на контурах из отдельного списка и предлагать пользователю указать месторасположение надписи. Не знаю, есть ли в лиспе возможность "повесить" текст на курсор, чтобы было проще размещать. |
|||
|
||||
Регистрация: 09.11.2017
Сообщений: 28
|
|
|||
|
||||
Инженер-конструктор Регистрация: 25.12.2015
Москва
Сообщений: 77
|
Работает в цикле. После выбора полилинии предлагает выбрать точку, куда поместить текст. Площадь вставляет как текст полем. Если полилиния не замкнута, назначает тексту красный цвет. К сожалению, не знаю, как на entsel прицепить фильтр выбора(((
Код:
Последний раз редактировалось tsetse, 13.12.2018 в 14:15. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
На entsel - никак. Но можешь для ssget использовать конструкцию типа (пишу без ACAD'a, так что последовательность "_", "." и "+" проверяй самостоятельно:
(ssget "_.+:S:E" '((0 . "lwpolyline")))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер-конструктор Регистрация: 25.12.2015
Москва
Сообщений: 77
|
Цитата:
Код:
Убрал progn все заработало) Последний раз редактировалось tsetse, 13.12.2018 в 14:05. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Ну вот, а я уже за код сел
----- добавлено через ~3 мин. ----- Тольк пару замечаний, можно? Если пользователь нажмет Esc в момент запроса, мы получим ошибку. Не есть совсем гуд И второе. Я был вынужден переписать Get-ObjectID-x86-x64 - в каких-то версиях (64-битных) срабатывал vla-objectidtoobject32, в каких-то - vla-objectidtoobject. Поэтому использую конструкцию типа: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
lisp: Длина по полилинии до точки | vosh | LISP | 19 | 15.07.2013 15:10 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |