|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ну примерно так. Хотя я подозреваю, что структуру списка можно сделать более удобной и простой - но для этого надо смотреть, где и как он формируется.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Весь список у меня состоит из пар кода и точки. на стадии получения исходных данных задаются коды 1 2 - начало и конец трубы 0 10 20 30 - уровни размерных линий
далее идет анализ содержимого, и получаем ключ (тип трубы) для дальнейшей работы и в границах cond для каждого случая прописано расширение списка в соответствии с нужными размерами и прочими потребностями. Собственно в #2575 и выложил расширение списка для последнего варианта. Дальше уже по этому списку ведутся построения размеров, а в одном из вариантов и полилиний дополнительных (те самые точки 101-116)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Offtop: Скажу честно: у меня сейчас мозг затрмучен своими задачками, подробно вникнуть не могу
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
И еще хочу попросить критики на такое творчество:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Я бы задавал. Только с "перегрузкой": http://autolisp.ru/2009/10/21/lisp-overloading/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Вот как я рисую полилинию.
Код:
1. Могут быть заданы Ширина, вес, тип линии. Слой всегда текущий, если нужен иной - устанавливается до вызова. 2. Все действия завернуты в ловушку ошибок. При сбое по каким-то причинам вернется NIL и сообщение 3. Список координат "нормализуется". Назначение функций с именами ru-xxx понятно из их названий. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Из-за того, что у меня иногда идет обновление или полное изменение функционала (при условии сохранения, я предпочитаю задавать один-два параметра. Ну, например, для создания той же LWPOLYLINE будет всего 2 параметра: первый - список оординат вершин, второй - список из необязательных параметров типа '(("lw" . <Вес>) ("lt" . <Тип>) ("color" . <ICA-цвет>) ...) Если во втором списке что-то пропущено, берем либо текущее значение, либо "по умолчанию" - зависит от назначения функции.
Но это дело вкуса ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну если критики - уже не раз писал, и "разжевывал", что использование append в цикле - это не православно.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Offtop: Исторически так сложилось, еще с первого курса пошло
![]() Дима_, по поводу append нашел только это: "для добавления одного элемента append, да еще и в цикле логарифмически увеличивает время выполнения". Это все интересно, но... видел еще пяток таких же способов формирования списка и как то альтернативы не попадалось и у самого не придумывается. (Да и не думаю, что придется строить линии больше десятка точек... по крайней мере пока что были максимум по 4) Дочитал там же замечание, что основной инструмент будет cons, но: Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 13.04.2015 в 07:34. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В общем еще раз - список это не изменяемая стуктура. Функция cons не создает новый список а свзязывает "голову" с "хвостом" - то есть просто говорит - за данным элементом идет такой-то - в случае если "такой-то" это список - то мы можем пробежаться по данной цепочки от начала до конца, при том что в разных точках программы мы можем ссылаться на разные начала одного и того-же списка. В конец неизменяемого списка добавить ничего нельзя, функция append, создает новый список пересчитывая тем-же cons'ом свои аргументы. То есть на каждой итерации мы пересчитываем весь список заново, а если у нас программа чуть посложней и хранит ссылки на свои предыдущие шаги - то хранит она и соответственное количество одинаковых списков - да если и не хранит у Вас основное время не программа, а автоматический сборщик мусора работает.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Переработал функцию:
Код:
Алексей, прикрутил список необязательных параметров. Что то мне понравилась эта идея, переписал все три своих функции рисования ![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 14.04.2015 в 15:27. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я пишу несколько в другом стиле - сами судите - лучше Вам такая версия или нет - Вам пользоваться.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Дима_, я о том спрашивал, что исключил append из кода совсем. У меня нет таких глубоких знаний, как у Вас, о внутренностях и механике Лиспа и к советам стараюсь прислушиваться.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Есть вопрос по поводу (sssetfirst nil ss), а именно о подсветке примитивов внешних ссылок/блоков.
Собственно вершинки то показывает, но хочется немного другого. Например, выполняя _trim, при указании примитива внешней ссылки, примитив подсвечивается (становится пунктирным), как сделать так же программно?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
Здравствуйте!
Создаю макрос простановки направлений и длин фрагментов полилиний. Пока сваял вот такое (не без помощи VVA - http://forum.dwg.ru/showthread.php?t=121171 : Код:
1. макрос работает и без объявления переменных. Улучшится ли работа макроса, если их (переменные) объявить в строке "defun ()"? 2. Стоит ли выключать в начале и включать в конце привязки? 3. В М-тексте градусы обозначаются буквой "d". Как сделать замену на значок градуса (верхний кружок)? 4. В функции entmake создания М-текста непонятны строки с dxf-кодом 100. Ну, вторая строчка прямо указывает на М-текст. А первая?Что она означает? И, если это разные понятия, то почему обозначены одним dxf-кодом? 5. Что выполняет строчка (cons 41 19.35)? 6. Как дополнить макрос, чтобы он, кроме полилиний, работал и применительно к отрезкам? 7. Почему-то разные М-тексты получаются разной высоты. У одного фрагмента полилинии, например, высота букв 2.0, у другого 2.2, у третьего - 1.8. Как добиться однообразия? 8. Укажите на явные "ляпы" и потенциальные трудности, чтобы знать, в каком направлении "копать" дальше в освоении AutoLISP. Спасибо. p.s. вдогонку: можно ли что-то добавить, чтобы при указании фрагмента полилинии, он подсвечивался? Последний раз редактировалось MrBrown, 17.04.2015 в 16:01. |
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
gomer,
3. Это сочетание я знаю и часто пользуюсь им в автокаде. Но, как "прикрутить" его в макросе к этой строчке: Код:
5. Это понятие я нашел и перевел. Но не увидел разницы работы макроса при изменении значения (cons 41 ...). Поэтому и спросил. 6. Значит, для линий - отдельный макрос? Или же какая-то отдельная VL- функция, которую можно "прикрутить" к уже существующему макросу? ________________________ через 15 минут: догадываюсь, что по пункту третьему можно сделать функцию замены "d" на значок градуса. И потом, при формировании м-текста её как-то использовать. Или есть способ проще? Последний раз редактировалось MrBrown, 17.04.2015 в 15:53. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
(strcat (rtos (dtr (- (/ pi 2) (angle vx1 vx2)))) "%%d")
не обязательно отдельный, но что такое ветвление, надеюсь не нужно рассказывать. Цитата:
зы неужели так трудно догадаться, что для отрезков "соседние точки" - это начальная и конечная точка отрезка, которые находятся элементарно по кодам 10 и 11??? |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |