|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Растягивание Mtext по контуру замкнутой области
Регистрация: 20.05.2009
Сообщений: 7
|
||
Просмотров: 3940
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Есть пара вариантов другого характера.
1. Попытаться сделать нормальную таблицу (AutoCAD'овскую имею в виду). 2. Предварительно выбрать тексты и отрезки (полилинии), отсортировать их по координатам и после этого уже анализировать расположение ближайших вертикальных отрезков. Оба варианта породят проблемы для "таблиц" с объединенными по горизонтали ячейками. Хотя, в download не далее как вчера был выложен архив программ Alaspher'a с сайта uniip.ru - там был код, позволяющий выполнять экспорт подобных "таблиц" в файлы Excel'a.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.05.2009
Сообщений: 7
![]() |
Спасибо за ответ, мне он очень нравится, но не совсем подходит, на это есть несколько причин, одна из которых в том, что не только таблицы определяют область применения данного лиспа, очень часто необходимо обрабатывать всевозможные чертежи с множеством диаграм, структурных схем и др.
И данные там(текст) находятся не в таблице, но в рамке, да и много всякого другого где необходимо пользоваться именно этим лиспом. Да и кроме того для простых таблиц я сделал лисп для простого экспорта(в три действия) текста из "псевдотаблиц" в Автокадовскую нормальную предварительно созданную таблицу(хотя программно создать новую по ходу экпорта тоже конечно не проблема), но это, как говорится, другая история. Что касается моих вопросов, то мне просто интересно, так сказать для общего развития. Угробил несколько дней на поиск ответа, но так ничего и не нашел. Пришел к выводу что реально сделать заливку в лиспе, указав только точку лежащую внутри замкнутого контура, практически не возможно. Насколько я понял заливка средствами AutoLISP выполняется, если указать примитивы допустимого типа, образующие замкнутый контур, а вот если указывать только координаты точки, то нужно самому определить эти самые примитивы, что в принципе довольно легко решаемо при не сложной конфигурации такой области, но вот если это сложная область, возникает довольно не тривиальная задача, реализовать которую, в принципе, возможно, но это будет гораздо больше по коду(да наверно и по времени выполнения) чем заливка средствами Автокад, в которой, как я понимаю, все это уже реализовано. Если я не прав (кстати надеюсь на это), то ОЧЕНЬ хотел бы увидеть описание способа реализации всего этого в LISP-е. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Лично я в первую очередь все же разделил бы задачи. То есть таблицы обрабатывать одним лиспом, диаграммы - другим и т.д. Ну да ладно, это я опять "вперед паровоза" рванул
![]() Ну вот, например, вариант установки ширины многострочникам по 2 ближайшим вертикальным отрезкам. Учитывает варианты вертикальных кусков полилиний. Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.05.2009
Сообщений: 7
![]() |
Хм.. Спасибо. Только сразу не разобрался, потому что смутило такое количество "защит от ошибок", тут и повсеместная проверка типа, и обработчик прерываний и другое, запутался сперва. Конечно если рассматривать этот код как код для отдельной конкретной задачи, то мне кажется, что это все немного за лишнее, но если использовать части функций отдельно в других задачах, то конечно да, залишним никогда не бывает.
Смущает правда один момент(по незнанию): переопределение *error*. Насколько я понял, все функции загружаются сразу, еще до их вызова т.е. я не использовал вызов данного конкретного лиспа, но в памяти АвтоКада уже эта функция (*error*) переопределена и для других лиспов, или она действует только локально, только для этого? Если у меня уже существует переопределение этой функции, не изменит ли она эти переопределения? Честно признаюсь поиск не мучал, а в книге Полещука ответ не нашел(кроме того что надо сохранять и восстанавливать "прошлое" состояние для этой функции). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.05.2009
Сообщений: 7
![]() |
Посмотрел.
Все встало на свои места, кроме того, еще посмотрел вот это: http://geol-dh.narod.ru/spds/func-is-in-contour.html В связи с этим я уже знаю что и как буду делать. Спасибо тебе за помощь, а то мне чего-то очень не нравиться использовать команды АвтоКада в лиспах. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
И правильно "не нравится"
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
изменить стиль MTEXT | Redya | AutoCAD | 31 | 20.10.2019 10:44 |
Требуется помощь,что бы Mleader не опускался | Composter | Программирование | 79 | 04.12.2018 18:03 |
Возникла необходимость в суммировании большого количества чисел и забивать каждое число в формулу очень нудно и долго | Макс Тал. | LISP | 77 | 21.12.2016 18:27 |
Увеличение всех отметок на определенную величину | Drweb | Программирование | 103 | 22.01.2016 13:52 |
Требуется помощь с циклом в лиспе | Composter | LISP | 28 | 13.05.2009 11:14 |