|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Сначала добейся, чтобы vla-offset (или что там на самом деле, не помню) нормально срабатывала. А потом уже можно хоть entlast сравнивать с предыдущим примитивом.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Хочу отбить площадь полилинии в "идеальном" месте внутри полилинии. Методом лучевого траассирования точка внутри не всегда получается в "идеальном" месте, может оказаться близко к краю. Если реализовать идею с подобием, неважно, какой изначальной формы полилиния, после подобия внутрь она будет стремится к упрощению формы и одновременно будет стремиться к "идеальному" центру. Иногда, после подобия это будут несколько полилиний, соответственно нам надо только выбрать наибольшую по площади и дальше офсетить.
Вот в конце получается ситуация, при которой офсет невозможен, и при этом программа не возвратила ни nil, ни T. Хотел понять, как это обойти, чтобы продолжить выполнения кода. Я так понимаю vl-catch поможет, пока правда не пробовал, руки не дошли. Сама конструкция кода неверная, привел для простого примера, такую вещь через while, а не через if надо реализовывать, но конечный затык в виде сообщения об ошибке идентичен. Если не лень, буду благодарен за любую посильную помощь в достройке кода ----- добавлено через ~22 мин. ----- Стоп, или это был философский вопрос, примерно как про смысл жизни?) |
|||
|
||||
нет, это был не философский вопрос))))
а если по-простецки, через штриховку? |
||||
|
||||
может. это я видимо не догнал. автоматом "отбить" площадь?
|
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Да, автоматом. В смысле извлечения площади полилинии и отбивки ее автоматом проблемы нет. Тут именно реализация определения точки вставки через офсет интересна.
----- добавлено через ~11 мин. ----- Нечто такое (while (vla-offset (vlax-ename->vla-object (entlast)) -50) (добавить в набор (entlast)) (после сообщения об ошибке в центре последней полилинии отбей точку) ) (удалить элементы набора) Последний раз редактировалось megabeton, 14.10.2021 в 15:31. |
|||
|
||||
офсет внутрь (отрицательное смещение) определяется ещё и направлением следования вершин плинии. против часовой - внутрь, по часовой - наружу.
|
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Да да, я в курсе, направление изменяемо, это не проблема. Плтуллс от VVA тут очень помогает, спасибо ему
----- добавлено через ~12 мин. ----- Собственно вопрос, while реагирует на nil, однако (vla-offset (vlax-ename->vla-object (entlast)) -50) на последней стадии выдаст ошибку и остановит дальнейшее выполнение всего кода. Как правильно и во что обернуть (vla-offset (vlax-ename->vla-object (entlast)) -50), чтобы выдало в конце nil, а не ошибку? Последний раз редактировалось megabeton, 14.10.2021 в 16:09. |
|||
|
||||
Код:
Последний раз редактировалось koMon, 14.10.2021 в 16:57. |
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Вопрос про отличие блоков, созданных разными способами.
Ситуация №1: Создал блок с помощью Код:
Код:
Код:
Создал блок через vla-copyobjects (взято отсюда https://forum.dwg.ru/showthread.php?t=76304) Код:
Код:
Результат – точка вставилась на чертеже в начало координат, а не в место вставки блока. Почему в одном случае (vlax-3d-point 0. 0. 0.) вставляет точку в точку вставки блока, а в другом в начало координат? Что нужно добавить в код к vla-copyobjects, чтобы он вел себя как при "_pasteblock" Заметил, что у первого блока в свойствах указано "Единицы блока - миллиметры", у второго "Единицы блока - безразмерный". |
|||
|
||||
немного к предыдущей теме.
Цитата:
В результате я определял положение точки относительно оси (криволинейной) таким куском кода: Код:
По текущему вопросу: Цитата:
Может, каким то невероятным образом, во втором случае базовая точка блока отличается от начала координат блока?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Регистрация: 20.04.2011
Сообщений: 402
|
Подскажите, есть ли изящный способ понять направление обхода по трём точкам? Пользователь указывает три точки на плоскости. Мне нужно понимать направление, - по часовой или против?.
Стоит задача вычислить точки Ферма-Торричелли в произвольном треугольнике. Алгоритм довольно простой и тестовый алгоритм у меня работает, но только в тех случаях когда точки указываются по часовой стрелке. Код пока такой: Код:
-------------- update сделал через скалярное произведение Код:
Последний раз редактировалось gumel, 22.10.2021 в 07:27. |
|||
|
||||
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 107
|
Что-то под конец рабочей недели запутался с формированием списков
Допустим есть список (setq A '("1A" "2A")) и на на выходе получаем ("1A" "2A") есть другой список (setq B '("1B" "2B")) и на на выходе получаем ("1B" "2B") Есть промежуточная итерация объединения списков (setq nabor (list A B)), на выходе получаем (("1A" "2A") ("1B" "2B")) Далее нужно в уже сформированный список nabor добавить дополнительное значение из новой переменной (setq С '("3A" "3B")) (setq nabor (list nabor C)) но на выходе получаем вложенный список ((("1А" "1B") ("2A" "2B")) ("3A" "3B")) Как сделать чтобы получился список для переменной nabor без учета вложенности (("1A" "1B") ("2A" "2B") ("3A" "3B")) Последний раз редактировалось Sege, 11.11.2021 в 15:35. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
(append (list a b) (list c))
(cons c (list a b))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,039
|
Цитата:
----- добавлено через ~10 мин. ----- в том же ObjectArx/.Net есть метод RemoveVertexAt, но в ActiveX его решили не "вытаскивать" в публичные методы, видимо |
|||
|
||||
Регистрация: 23.01.2005
spb
Сообщений: 120
|
всех с новым годом однако!
теперь вопрос. хочу ткнуть мышкой в экран и получить простенький текст с координатами ткнутой точки. соорудил следующее: (command "text" (setq TT (getpoint)) 1 0 TT) получаю: 205.385389406629,27.86316521445838 по-моему первый раз, когда акад по доброй воле показал ТОЧНЫЕ координаты ))), но мне столько не надо! Есть ли какая (не)общая переменная, определяющая точность вещ.чисел? (я верну!) -- мне 1-2 цифры после запятой хватило бы. -- просто не хочется rtos-ить, разбивать список на части и клеить обратно... хоцца както шоб логичнее было, стройнее... (искал-ненашол )) Последний раз редактировалось shishoq, 05.01.2022 в 22:17. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
luprec ?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |