|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Подскажите, существуют ли практические руководства по Lisp?
Регистрация: 10.02.2006
Сообщений: 373
|
||
Просмотров: 76547
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Так а что конкретно надо сделать? Пока не будет реальной задачи, боюсь, изучить язык практически нереально.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Java/Kotlin/Go Регистрация: 03.02.2006
Сообщений: 5,786
|
Великолепный сайт по Лиспу:
http://www.afralisp.co.za/index.htm |
|||
![]() |
|
||||
Регистрация: 10.02.2006
Сообщений: 373
|
Началось с того, что нужно было нарисовать в трехмерке змеевик для цистерны. Скачал программку Спираль называется и со скрипом изобразил змеевик. И тут обнаружил, что начало змеевика не совпадает ни с одной плоскостью мировой системы координат, да еще и развернуто на какой-то угол вдоль оси. Крутил , вертел пока не соединил змеевик с магистралью, и доращивал кусочки. Короче, употел. Это было два года назад. И тогда пришла мысль начинать учить Lisp самому. Но не тут то было. Ни книг, ни учебников, ни пособий. Говорят, во ВТУЗах уже есть какие-то методички, но я их не видел.
|
|||
![]() |
|
||||
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,296
|
Я постоянно использую в работе чужие ЛИСПы.
Из за отсутствия времени сам на пути изучения AutoLISP сделал только 3 первых шага: 1) Заказал книжку "Autocad: разработка приложений, настройка и адаптация" БХВ-Петербург, 2006 серия "В подлиннике" 2) Заглядываю на русский сайт - http://aco.ifmo.ru/~nadinet/html/alisp.phtml (кстати на сайте есть справочник команд LISP) 3) Скачал две главы из книги "Эффективная работа: AutoCAD 2005" Тику Ш. http://dwg.ru/forum/viewtopic.php?t=6353 Много вариантов перебрал (в том числе и сайты на английском), но перечисленные источники мне показались более подходящими.имхо |
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
Цитата:
(defun add10 (x)(+ 10 x); возвращает ADD10 Вот что выдаёт ком.стр. моего 2007-го: Command: (defun add10 (x)(+ 10 x) (_> Вот это что? (_> Что он хочет? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Чтобы закрыли скобку.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Руководства здесь Ссылки на LISP и не только
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Цитата:
![]() ![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Теоретически можно. Как на практике - не знаю. Но то, что e-mail отправить с использованием Outlook'a можно - это точно. Разбор был то ли на augi.com, то ли на theswamp.org - не помню.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 27.12.2007
Сообщений: 132
![]() |
Простите, за глуппый вопрос:
Но с какой именно книги начать изучения лиспа? Конкретная задача тут: http://dwg.ru/f/showthread.php?t=20756 |
|||
![]() |
|
||||
Регистрация: 27.12.2007
Сообщений: 132
![]() |
Может кому интересно, ИМХО для начинающих то что надо:
http://aco.ifmo.ru/~nadinet/html/lec...ect_lsp.html#5 |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Смесь жуткая...
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
(test радиус_закругления_пути радиус_трубы)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
А значения кто будет задавать, Пушкин?
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan,
Команда OTVOD Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
А я думаю, откуда 75 берется?
Код:
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Цитата:
Правда, после VVA на мое "творчество" лучше не смотреть )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ну ты говоришь, что диаметр 100 рисуется. Я специально проверил - диаметр 114, как и должно быть при радиусе 57.
Ну тогда не знаю... Если бы использовались только командные методы, я б мог еще кивнуть на Osmode, но у меня-то их нет вообще.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Извини, запутался. Исправленный вариант (хотя кому он теперь будет нужен?)
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Расширение языка AutoLISP, использующее объектную модель Автокада или любого другого com сервера - Visual LISP
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 02.06.2008 в 10:30. Причина: Орфография |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Я ж говорил, что смесь жуткая
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
См. форматирование, комментарии и описание функции (initget)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Привет! Я тут сегодня практикуюсь
![]() ;;;Рисование концентрического перехода по ГОСТ ;;;1. View-->Front ;;;2. Pline" "0,0" "0,R" "L,r" "L,0" "0,0" "_close" ;;;3. Revolve ;;;4. View-->SW Isometric ;;;R- радиус большой ;;;r- радиус маленький ;;;L- длина перехода (defun C:PEREKHOD (Рисование концентрического перехода по ГОСТ) (setq R (getdist "\nРадиус большой:")) ; Задаем большой радиус перехода (setq r (getdist "\nРадиус маленький:")) ; Задаем маленький радиус перехода (setq L (getdist "\nДлина перехода:")) ; Задаем длину перехода (Command "_.View" "_Front") (Command "_.Pline" "0,0" "0,R" "L,r" "L,0" "0,0" "_close") ; Рисуем профиль перехода (Command "_.Revolve" "Objects" "Enter" "X" "Y" "Enter") ; Поворачиваем профиль вокруг выбранной оси (Command "_.View" "_SW") (princ) ; Выход ) |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Вот это по-моему правильно, тока все равно не работает
![]() ;;;Рисование концентрического перехода по ГОСТ ;;;1. View-->Front ;;;2. Pline" "0,0" "0,R" "L,r" "L,0" "0,0" "_close" ;;;3. Revolve ;;;4. View-->SW Isometric ;;;R- радиус большой ;;;r- радиус маленький ;;;L- длина перехода (defun C:PEREKHOD (/R,r,L,Pline); Рисование концентрического перехода по ГОСТ (initget7) (setq R (getdist "\nРадиус большой:")) ; Задаем большой радиус перехода (initget7) (setq r (getdist "\nРадиус маленький:")) ; Задаем маленький радиус перехода (initget7) (setq L (getdist "\nДлина перехода:")) ; Задаем длину перехода (Command "_.View" "_Front") (Command "_.Pline" "0,0" "0,R" "L,r" "L,0" "0,0" "_close") ; Рисуем профиль перехода (setq Pline (entlast)) (Command "_.Revolve" "Pline" "Enter" "X" "Y" "Enter") ; Поворачиваем профиль вокруг выбранной оси (Command "_.View" "_SW") (princ) ; Выход ) |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
не смотрите, тут все неправильно. единственно сегодня что получилось, так это трапецию сделал по точкам (профиль перехода), только мне так не нравится, аж 5 точек вводить надо. будем думать дальше как ввести только 2 диаметра и длину перехода.
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Вот это работает, но вводить столько точек запаришься!
(defun C:Profile (/ pt1 pt2 pt3 pt4 pt5 ) (setq pt1 (getpoint "\nПервая точка:")) ; Задаем первую точку профиля (setq pt2 (getpoint "\nВторая точка:")) ; Задаем вторую точку профиля (setq pt3 (getpoint "\nТретья точка:")) ; Задаем третью точку профиля (setq pt4 (getpoint "\nЧетвертая точка:")) ; Задаем четвертую точку профиля (setq pt5 (getpoint "\nПятая точка:")) ; Задаем пятую точку профиля (Command "_.Pline" pt1 pt2 pt3 pt4 pt5) (Command "close") (princ) ) А вот эта не хочет никак работать! (defun C:PEREKHOD (/ R r L ) (setq R (getdist "\nРадиус большой:")) ; Задаем большой радиус перехода (setq r (getdist "\nРадиус маленький:")) ; Задаем маленький радиус перехода (setq L (getdist "\nДлина перехода:")) ; Задаем длину перехода (Command "_.Pline" '(0 0) '(0 D) '(L d) '(L 0) '(0 0)) (Command "close") (princ) ) Пишет неизвестная команда С ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Pyslan, если хочешь научиться программировать, придется много работать самому. Иначе все время будешь спрашивать про "три точки с запятыми" и удивляться - "Вот это по-моему правильно, тока все равно не работает ". Это обычное дело, когда автор думает, что "все правильно".
Вот пишешь "Читаю САПР как это делается, там ваще ж-а AutoLisp, VisualLisp, VBA, ActiveX, ObjectARX". Это про книгу "САПР на базе AutoCAD - как это делается"? Если это так, то хоть название пиши правильно - а не "и так сойдет". Иначе "и так сойдет" будет и в програмах. А тыкать носом в каждую мелочь желающих мало будет. Но книгу надо прочитать, и прочитать внимательно. Тема-то ветки про практические руководства, а не про то, как переход нарисовать. Это твое частное дело. Если уж начал с элементов трубопроводов, прочитай главу 29. Там как раз эти задачи описаны, а в примерах кода прямо решены. Например, листинг 29.15 - рисование вообще любого 2D-элемента (прямой участок, переход и т.п.). А в листинге 29.17 - рисование как раз концентричного перехода в 2D. В результате в меню конкретный переход с заданными размерами записывается очень просто: Код:
Можешь обернуть это в программу (команду), назвав ее, например Код:
просто отображались в иллюстрированном меню. В книге полно иллюстраций, в частности, рис. 29.13. За 3D сразу лучше не браться. Научись сначала самое простое делать. Попытка просто сделать revolve наивна. Да и элементарной техники пока у тебя нет, даже в написании команд - отсюда и вопросы. Читай упомянутую книгу - там все расписано. Особенно главу 10 - там самые основы. Следуя принципам, изложенным в книге, можно и к 3D перейти. Сформировав библиотеку функций, в которым самым основным является ввод точек в пространстве и вычисление координат в пространстве, можно и 3D-переходы (и всё прочее) делать. Концентрический 3D-переход на уровне меню может быть описан так: Код:
несуществующий переход 3000х50 длиной 6м, он может вписать Код:
От примера для 2D он отличается используемыми функциями. Например, ru-3d-pipe-draw-any делает твердотельную модель любого "трубоподобного" элемента, а ru-3d-pipe-reducer-concentr - конкретно перехода. Могу её и привести: Код:
Это именно для примера, чтобы показать "как это делается". Внутри используется множество дополнительных библиотечных функций. Как их делать и зачем нужны - тоже в упомянутой книге. Так как тема всё-таки про литературу, рекомендую обзавестись и книгой "AutoLISP и Visual LISP в среде AutoCAD" Петра Лоскутова и Николая Полещука. Это лучшее в настоящее время справочное пособие. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
спасибо конечно, за науку. я и не собираюсь дергать народ все время, только я про свой "шедевр" спрашивал (последний). А книга у меня есть. Вот скажи мне, зачем ты мне свой код написал? Я хочу чтобы прога вырисовывала переход как я его рисую. То есть профиль, потом повернуть и создать тело и все. Задавать всего три размера, 2 диаметра и длину. Вот ты говоришь что надо с простого начинать с 2D, а я что делаю!? Профиль перехода то двухмерный, это ж прост четырехугольник.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Рyslan, найди отличия
![]() Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Попробуй заменить "_close" на "_c".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ну я что, обманывать буду? Ты на какой раскладке _c вводил, не на русской ли случайно? Только что специально прогнал - код работает:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Тогда создавай полилинию через dxf
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Точно! Блин, надо же было так облажаться...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Не-а, не до того. У меня в ADT до дури муторной работы, горит.
По-быстрому, создание примитива через DXF: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
конструктор Регистрация: 29.08.2007
Москва
Сообщений: 55
|
Цитата:
Код:
__________________
Продумано до мелочей |
|||
![]() |
|
||||
Цитата:
![]() |
||||
![]() |
|
||||
конструктор Регистрация: 29.08.2007
Москва
Сообщений: 55
|
Я знаю, что подчёркивание актуально только в локолизованом AutoCad, а у меня родной, и всем советую пользоваться родным, гемора меньше будет.
__________________
Продумано до мелочей |
|||
![]() |
|
||||
конструктор Регистрация: 29.08.2007
Москва
Сообщений: 55
|
Локализваный - любой кроме инглиша (казахский, русский, украинский). Если кад не локализован, смело убирай все подчёркивания.
__________________
Продумано до мелочей |
|||
![]() |
|
||||
> Скулачёв А.
Ну раз сказал "А" (т.е. используешь подчеркивание в именах команд), то нужно говорить и "Б" (т.е. использовать и в именах опций, функциях initget, ssget и т.д.) И кроме того на нелокализованном AutoCAD твоя программа просто не будет работать, т.е. она очень не универсальна. А это плохой стиль программирования. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ага, объясни это пяти десяткам коллег околопенсионного возраста.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Гуру, зацените, у меня получилось! Программка рисует тройники! Ураа!
![]() (defun C:TROYNIK() (initget 7) (setq R1 (getdist "\nБольшой радиус:")) (setq r2 (getdist "\nМалый радиус:")) (setq L (getdist "\nДлина тройника:")) (setq H (getdist "\nВысота тройника:")) (Command "_.View" "_Front") (Command "_.Pline" "0,0" (list 0 R1) (list (* 2 L) R1) (list (* 2 L) 0) "C") (setq Pline (entlast)) (Command "_.Revolve" Pline "" "X" "") (command "_.UCS" "_New" (list L 0)) (Command "_.Pline" "0,0" (list 0 H) (list r2 H) (list r2 0) "C") (setq Pline (entlast)) (Command "_.Revolve" Pline "" "Y" "") (Command "_.Union" "ALL" "") (command "_.UCS" "_World") (Command "_.View" "_SWISO") (princ) ) Нормально, как считаете? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Туда же: а что с привязками?
P.S. Загружаются точно так же, как и в обычный AutoCAD
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Вот, проверил, у меня работала
(defun C:TROYNIK() (initget 7) (setq R1 (getdist "\nБольшой радиус:")) (setq r2 (getdist "\nМалый радиус:")) (setq L (getdist "\nДлина тройника:")) (setq H (getdist "\nВысота тройника:")) (Command "_.View" "_Front") (Command "_.Pline" "0,0" (list 0 R1) (list (* 2 L) R1) (list (* 2 L) 0) "_C") (setq Pline (entlast)) (Command "_.Revolve" Pline "" "X" "") (command "_.UCS" "_New" (list L 0)) (Command "_.Pline" "0,0" (list 0 H) (list r2 H) (list r2 0) "_C") (setq Pline (entlast)) (Command "_.Revolve" Pline "" "Y" "") (Command "_.Union" "_ALL" "") (command "_.UCS" "_World") (Command "_.View" "_SWISO") (princ) ) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Пару замечаний:
1. В command используй и команды и их опции на английском языке с префиксом _ (почитай начало http://dwg.ru/art/11) Код:
Возможны два варианта 2.1 Сброс и восстановление OSMODE Код:
Код:
Библиотечные функции Код:
Код:
Код:
![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Написал еще одну програмку, таким же методом как и предыдущие были, то есть ввод данных и дальше с помощью command какое-либо действие. Хотел спросить, как вы отладку программы делаете? Я через appload, постоянно свой лисп в акад гружу и смотрю что пишет. Еще вопрос, как вы считаете, командой command можно любую программку сделать? Или только такие простенькие как рисование перехода, отвода, тройника
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Честно скажу, (command) стараюсь не пользоваться чуть ли не по (уже) религиозным причинам. А так - в ком.строку, vlide, там открыть файл, установки точку останова ([F9]), и запускать
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
По поводу отладки. Файл программы, во время разработки, должен всегда быть в редакторе Visual LISP. Никакой appload к нему не надо. Там есть значок - загрузить файл в Автокад. Щелкаете, и текущая версия доступна. Можно загружать и отдельно выделенный блок - это чтобы проверить части программы. Здесь надо фантазировать - например, можно где-то в комментариях написать присваивание значений переменным, являющихся аргументами функции, а потом выполнять кусочки кода, отправляя из в Автокад. Результаты также выводятся в окно. И, разумеется, то, про что Алексей написал - штатные средства отладки. Их надо только изучить. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Спасибо! Vlsual Lisp Editor я использую, правда редко еще. Менюшку еще не изучил, а так обычно вставляю туда лисп и кнопкой Check window проверяю. Ну а если лисп можно а акад прямо оттуда грузить то вообще красота, а то я запарился каждый раз его в автокад подругажть через аплоад.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Тебе видео снять, как я "программирую" (если это можно программированием назвать) ?
![]() Написание, отладка, пошаговое выполнение... Только задачку поставь ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Покритикую немного.
В предложенном варианте, перед началом выполнения действий, привязка выключается, а по окончании работы программы принудительно включается, что не есть хорошо. Правильно восстанавливать состояние среды на выходе таким, какое оно было до работы программы. Потому, если вообще отключать, всёж рекомендую связку: Код:
|
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Alaspher, Наверное все правильно. Я просто ими уже со времен 14 или 2000 Автокада не пользуюсь
![]() Почему я оставил твой вариант закоментированным уже не помню. Наверное потому что сейчас делаю по другому. Цитата:
![]()
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 23.06.2008 в 15:14. Причина: Орфография |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Леша, вот задача
![]() (defun C:VALVE (/ D1 L D2 H1 D3 D4 Pline) (initget 7) (setq D1 (getdist "\Диаметр задвижки:")) (setq L (getdist "\Длина задвижки:")) (setq D2 (getdist "\Диаметр шпинделя:")) (setq H1 (getdist "\Высота шпинделя:")) (setq D3 (getdist "\Диаметр маховика:")) (setq D4 (getdist "\Диаметр поперечного сечения маховика:")) (Command "_.View" "_Front") (Command "_.Pline" "0,0" (list 0 (* 0.5 D1)) (list (* 0.5 L) (* 0.25 D1)) (list L (* 0.5 D1)) (list L 0) "_C") (setq Pline (entlast)) (Command "_.Revolve" Pline "" "X" "") (command "_.UCS" "_New" (list (* 0.5 L) 0)) (command "_.UCS" "_X" -90) (command "_.Cylinder" "0,0" (* 0.5 D2) H1) (command "_.UCS" "_New" (list 0 0 H1)) (command "_.Torus" "0,0" (* 0.5 D3) D4) (Command "_.Union" "_ALL" "") (command "_.UCS" "_World") (Command "_.View" "_SWISO") (princ) ) Здесь слишком много задавать размеров для задвижки. А можно сформировать таблицу значений, чтобы чтобы не вводить кучу значений а ввести одно, обозначение изделия. Допустим ЗКЛ2-50-16 (обозначение изделия) или обозначение типа, 30с41нж. И еще лучше чтобы по двум этим значениям. Ну как задачка? ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Перед тем, как кидаться "в бой", позволю себе немного побурчать
![]() Есть неписаное правило - если запросов больше чем 2, крайне желательно делать диалог. Соответственно получается dcl. Вдобавок dcl с заполняемыми списками (перечислениями). Да вдобавок еще и согласованными - сильно подозреваю, что назначать числа "от балды" недопустимо. Через полчаса-час попробую сесть ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Не, мне и без каталогов будет некисло
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
И вообще, если уж про задвижку, так не надо у нее ничего запрашивать. Есть изделие определенного Ду, Ру. У них всегда постоянная и известные размеры. Ну, может быть диаметр маховика чуть разный. Значит надо не размеры запрашивать, а выбирать изделие в целом.
А так как задвижка моделируется, то гораздо важнее ее положение в пространстве, например запросом точки начала, направления потока и направления шпинделя. Если всегда от точки 0, так это не програмирование. Начинать надо сразу методически правильно. На рисунках пример выбора изделия и результат. Всё программирование множества задвижек сводится к вызову одной функции с разными аргументами. Например: Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ни секунды не умаляя ruCAD, все же позволю себе порастекаться мыслию по древу:
Сначала анализируем программу. Там получается несколько запросов (если оставлять их в ком.строке, а не выводить в диалог). Почему бы не написать отдельную функцию, заменяющую get*-функции? Обработать там сразу и нажатие пользователем Esc, и преобразования точек в мировую систему координат (буде такое понадобится), и initget там же прошпарить - в общем, выполнить аналог _ru-get. Это часть 1, сервисная. Займет больше всего времени. Часть 2, отрисовка. Тут, казалось бы, все просто, ясно и отлажено. Погоди радоваться! Во-первых, насчет использования (command) уже говорилось. Бог с ним, в некоторых случаях ее можно оставить. Но давай "подумаем вперед". Эти же задвижки потом надо будет считать... То есть надо (как минимум) делать блок, внутрь блока "загонять" всю задвижку (кстати, не забудь - у тебя ни тип линии, ни вес, ни слой - ничего не меняется). А потом уже вставлять сам этот блок (как раз тот случай, когда от команды не уйти) в точку, указанную пользователем, с соответствующими углами поворота и т.п. То есть в принципе код, если его делать "по уму", с нуля может занять несколько дней. === Поскольку задача изначально стояла не написать код, а показать некоторые возможности vlide, так и сделаем (и на этом закруглимся ![]() === P.S. Ох и огребу же я сейчас...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Не знаю, насколько этот релиз уже актруален, но можно кое-что посмотреть здесь:
http://dwg.ru/search.php?zone=1&mod=2&sName=ruCAD
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 24.06.2008 в 00:46. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Откуда я знаю? Продавать-то уже не я буду. Во всяком случае всегда будет и бесплатная.
Что касается программирования. Я ведь картинки показал не для рекламы. Интерфейс можно сделать всякий. Можно, например, в DCL. Разочка и хватит, вволю помучиться и для изучения. А можно и вообще без интерфейса - пункты меню, а к каждому пункту - макрос, вызывающий функцию рисования, задвижки например. Наподобие той, что я привел. А можно с опциями командной строки - в опции значение Ду, а все остальное уже зашито в программу. И запоминать и восстанавливать опции. Ведь если 100 раз за день надо задвижку нарисовать, так замучаетесь 100 раз отвечать на 6 вопросов, причем 90 раз одинаково. Учиться надо от простого к сложному. Интересуют задвижки, например, так начните с простого обозначения "бабочкой". Там всего 4 точки, плюс "перекладина". Да и ее можно не рисовать, а сделать вентиль. Вот и делайте сначала простую функцию рисования. Аргументами в нее можно передать поперечный размер, длину, точку начала и направление конца. Изменяя эти аргументы уже сможете рисовать арматуру и реальных размеров, и в виде условных знаков. Затем осваиваете ввод точек. Не абы как, а безошибочно. Здесь много нюансов. Например, арматура обычно продолжает какой-то предыдущий элемент (патрубок с фланцем, например). Или врезается в трубу. Значит и точки надо хитро запрашивать, например с опцией наподобие Продолжить. То есть автоматически присоединяя точку начала к концу ранее нарисованного элемента. И продолжая изображение в том же направлении. Это второй этап изучения. Еще дальше можно по желанию усложнять само изображение. Уже не просто "бантик", а "черт-те что и сбоку бантик". И делать это будет уже проще, если блок ввода точек отработан. И только потом и к 3D переходить. Там одна геометрия на порядок усложняется. Нельзя ведь заставлять пользователя для каждой арматурины ПСК переносить в её начало. Но и в 3D сначала можно плоские изображения отработать, а уж потом перейти к телам. И, разумеется. первым делом освоить Vlide. А в чем тогда программы-то писать, в Блокноте, что-ли? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Говорят, иногда пишут
![]() Сам иногда таким грешу ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
геологоразведка, строительство Регистрация: 14.10.2003
Магадан
Сообщений: 311
|
Цитата:
Но! Что касается OSNAP предпочитаю оставлять те значения, которые пользователь назначил в программе в функциях get* и пр., поскольку он подсознательно запомнил это значение, и будет уверен, что и в дальнейшем это будет текущеее значение. То есть начальное значение OSNAP, которое будет сохраняться при выходе из программы, будет равно текущему значению (после функции get*).
__________________
Лень - великий двигатель прогресса! |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Зачем в блокноте то? В крайнем случае в Notepad++ - там и подсветка есть, и пары можно отслеживать. В сторонних редакторах работали, пока не появился штатный редактор. Еще в R14 его не было.
|
|||
![]() |
|
||||
Проектировщик СС Регистрация: 24.06.2008
Минск
Сообщений: 134
![]() |
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Всем привет! Подскажите как правильно ввести точку. Никак не могу понять. Лисп прилагаю
(defun C:OTV (/ D Rdug x1 y1) (initget 7) (setq P1 (getpoint '(list x1 y1) "\nНачальная точка:")) (setq D (getdist "\nДиаметр отвода:")) (setq Rdug (getdist "\nРадиус отвода:")) (setq Rv (- Rdug (* 0.5 D))) (setq Rn (+ Rdug (* 0.5 D))) (setq P1 (list x1 y1)) (setq y2 (+ y1 (* 0.5 D))) (setq y4 (- (* 0.5 D) y1)) (setq P2 (list x1 y2)) (setq P3 (list Rv (+ Rv (* 0.5 D)))) (setq P4 (list Rdug (+ Rv (* 0.5 D)))) (setq P5 (list Rn (+ R (* 0.5 D)))) (setq P6 (list x1 y4)) (command "_.Pline" P1 P2 P3 P4 P5 P6 "_cl") (command "_.zoom" "_e") (princ) ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Может, надо как-то так (особо в логику не вникал):
Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
(setq x1 100.0 y1 0.0) И только потом как-то использовать. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
А если я не знаю какими будут координаты? Нужно чтобы они были произвольными, указал точку на поле чертежа, вот и координаты точки P1(x1;y1). Вот я и хочу, указать начальную точку и потом с помощью quote вернуть значения x1;y1. А в твоем выражении (setq x1 100.0 y1 0.0) - 100.0 и 0.0 это координаты x1 и y1?
|
|||
![]() |
|
||||
Проектировщик СС Регистрация: 24.06.2008
Минск
Сообщений: 134
![]() |
Тебе ж писал ShaggyDoc, что переменые до использования должны быть определены.
Функция (getpoint) возвращает кординаты точки, например '(10 10 0), что ты будешь с ними делать зависит от тебя. Если ты имел в виду, что в x1 должна автоматом попасть координата x, а в y1 - y, то это не так. Код:
P.S. И вообще: '(x1 y1)->'(x1 y1), чтобы получить точку надо определить x1 и y1, а затем использовать (list x1 y1). Знак '(...) запрещает вычисление стоящей за ним функции и эквивалентен (quote (...)), см. справку. В свою очередь функция (list [] ...) формирует список из аргументов. Последний раз редактировалось Donhuan, 31.01.2009 в 16:47. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, срочно садись за азбуку. Выделяешь getpoint и жмешь Ctrl+F1. И внимательно изучаешь описание функции.
Если тебе надо получить в переменную с именем P1 значение начальной точки, то надо (setq P1 (getpoint "\nНачальная точка: ")) - без всяких (list x1 y1). Если потом, на кой-то черт, понадобится разделить эту точку (список) на её ординаты, то сделаешь (setq x1 (car p1) y1 (cadr p1)) Но и этого (значений отдельных ординат) в твоей задаче вообще не надо. Любые точки от известной можно получить функцией polar. Жми F1 почаще. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Пробовал я использовать Polar, ничерта не получается, в декартовых координатах проще посчитать. А этот Polar, насколько я понял расстояние между точками задает и угол между расстоянием и проекцией на ось икс. а где я возьму расстояние, тем более оно не точное. ну квадрат я так нарисовал, а дальше чота никак. Да есть у меня книженция, туда и смотрю. примеров маловато только
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Ось трубы, к которой приделывается отвод, может быть направлена под любым углом. Сам отвод может быть направлен влево и вправо, вперед и назад. Может быть с разными центральными углами и с разными радиусами. Да и рисовать его надо полилинией с дугами. Начинать надо на бумажке. Набросай эскиз - под углом, проставь номера точек и прикинь, как высчитать координаты всех точек, если известна координата начальной точки и направление трассы. А вот направление запрашивать надо обязательно. Потом выяснить - в какую сторону направить. Радиус и диаметр как раз спрашивать незачем - это могут быть аргументы функции рисования. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
ShaggyDoc, вроде разобрался с polar. Построил отвод в одном положении. А вот как его сориентировать? И потом, у меня там углы постоянные. Какая то зависимость наверное должна быть от начального угла привязки и углов отвода, хммм
(defun C:OTV (/ P1 P2 P3 P4 P5 P6 D Rdug) (initget 7) (setq P1 (getpoint "\nНачальная точка:")) (setq D (getdist "\nДиаметр отвода:")) (setq Rdug (getdist "\nРадиус отвода:")) (setq Rv (- Rdug (* 0.5 D))) (setq Rn (+ Rdug (* 0.5 D))) (setq Dist1 (sqrt (* 2 Rv Rv))) (setq Dist2 (sqrt (* 2 Rn Rn))) (setq P2 (polar P1 (* 0.5 pi) (* 0.5 D))) (setq P3 (polar P2 (* 0.25 pi) Dist1)) (setq P4 (polar P3 0 (* 0.5 D))) (setq P5 (polar P4 0 (* 0.5 D))) (setq P6 (polar P5 (* 1.25 pi) Dist2)) (Command "_.PLine" P1 P2 "_A" "_R" Rv P3 "_L" P5 "_A" "_R" Rn "_ANG" -90 P6 "_L" P1 "_A" "_R" Rdug P4 "" "_E") (command "_.zoom" "_e") (princ) ) |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, вот я тебе сейчас книгу "САПР на базе AutoCAD - как это делается" буду индивидуально пересказывать?
У тебя ведь программа даже в первом приближении далека от рабочего вида, начиная с первой и заканчивая предпоследней строкой. Может, всё-таки согласишься литературу почитать? Я конечно могу прямо сюда воткнуть рабочий код для рисования любых отводов. Вот в 2D: Код:
Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Заметил на форуме ShaggyDoc
![]() (defun C:OTV (/ ang P1 P2 P3 P4 P5 P6 D Rdug) (initget 1) (setq P1 (getpoint "\nНачальная точка:")) (setq ang (getorient P1 "\nУкажите направление отвода:")) (setq D (getdist "\nДиаметр отвода:")) (setq Rdug (getdist "\nРадиус отвода:")) (setq Rv (- Rdug (* 0.5 D))) (setq Rn (+ Rdug (* 0.5 D))) (setq Dist1 (sqrt (* 2 Rv Rv))) (setq Dist2 (sqrt (* 2 Rn Rn))) (setq P2 (polar P1 (+ ang (* 0.5 pi)) (* 0.5 D))) (setq P3 (polar P2 (+ ang (* 0.25 pi)) Dist1)) (setq P4 (polar P3 ang (* 0.5 D))) (setq P5 (polar P4 ang (* 0.5 D))) (setq P6 (polar P5 (+ ang (* 1.25 pi)) Dist2)) (Command "_.PLine" P1 P2 "_A" "_R" Rv P3 "_L" P5 "_A" "_R" Rn "_ANG" -90 P6 "_L" P1 "_A" "_R" Rdug P4 "" ) (princ) ) Теперь отвод рисуется по любой оси. Вот как его покрутить вверх вниз? Из функции ввода данных я уже одну использовал, getorient. Осталась getangle.. пойдет? Чота у меня ничерта не получается, отупел совсем ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, книжку-то ты не прочитал... Картинки только посмотрел. Иначе не делал бы подряд 4 незащищенных от ошибок GETxxx... Но это к слову.
Ты же за деревьями леса не видишь. Вот зачем спрашиваешь каждый раз диаметр и радиус? И в "бою" так же будешь, по 100 раз в час? Вынеси их в аргументы функции, не делай её "командой". Например, так: Код:
Теперь легче будет с геометрией. А что для геометрии отвода надо: 1. Начальная точка на оси трубы 2. Направление трубы - точка, а не угол. 3. В какую сторону (влево или вправо от направления) рисовать отвод. Это можно или получить запросом еще одной точки или, более примитивно, нарисовать отвод в любую сторону, а потом спросить "Отзеркалить?" и, если надо, сделать MIRROR для отвода и его оси. Для удобства надо отделить ввод данных от самого рисования. То есть расширить объявление функции рисования наподобие: Код:
Цитата:
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Код:
Shaggy_Doc, ну как? Вот как отзеркалить? после рисования ввести запрос на зеркало? Давай замечания свои, даже если ты уже говорил об этом. До меня пока дойдет ![]() Последний раз редактировалось Кулик Алексей aka kpblc, 21.02.2009 в 11:11. Причина: Code не забывай |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, а программа в таком виде (то, что в закрытой ветке) не может правильно рисовать. Прилагаю картинку - черные отводы. Видишь, что получается? И это на пустом месте, а что будет, если ещё обстановка нарисована. Догадаешься, почему?
Ты тестируешь, чтобы доказать себе - "Ура! Заработало!". А надо в реальных условиях, и тогда оказывается, что не работает. Или работает, но не так. Да и осевая линия тоненькая должна быть, и тип у нее свой должен быть. Мелочь, но радикально изменяет всё рисование Вот попробуй нарисовать, как на второй картинке - красной. Нарисуй как-нибудь прямой участок, а от него построй скобу из своих отводов. Чтоб как на этой картинке. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Offtop: Рyslan, про "кучу балбесов" и прочую муть - пальцем покажи. Точнее, ссылки. В ПМ, чтобы не загрязнять тему.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
1. Почему рисует неправильно? Да ты не то, что в книжке - в этой ветке не прочитал, что при рисовании функцией command надо отключать привязки. А потом восстанавливать. Первая и самая распространенная ошибка. 2. Ты по-прежнему принципиально неверно ввод организуешь. Ну как пользователь может точно указать "направление отвода"? Как он поймет, что это такое? Отвод-то как раз изменяет направление трассы. А как ввести угол? Вот есть конец ранее нарисованной трубы, к середине торца можно привязать начальную точку, а дальше? Как ты укажешь "направление отвода", чтобы потом отвод правильно нарисовался "приварившись" к концу трубы? 3. А разве отводы только 90 градусов бывают? А 30, 45, 60, да и 180 может быть. А разве радиус только 1.5 Д? В данном варианте ты геометрию рассчитываешь под конкретный вариант, а она должна быть функцией от диаметра, центрального угла и радиуса. Тогда и все расчеты точек иначе будут. 4. Осевую линию, конечно надо отдельно делать, всегда тонкую (LWDEFAULT), а "края" - с текущим весом линии. Кстати, никакой гарантии нет, что во время рисования PLINE у неё не будет какая-то ненужная тебе физическая ширина. Значит надо и Width принудительно устанавливать. 5. А попробуй просто вручную нарисовать отвод полилинией - сначала в одну сторону, а потом в другую. Увидишь, что он вообще не нарисуется. Чтобы правильно рисовалась дуга отвода, её надо начинать не от угла, надо сделать маленькое плечико (например 1 ед) и только тогда можно дугу сделать по точкам. Плечики, конечно, на обеих концах, а это точки дополнительные. Всё это должно решаться на этапе постановки задачи. Ты её сам себе ставишь, наверняка знаешь, как отводы рисуются, та подумай немного заранее. А код, кода всё понятно, проще всего написать. Это первый раз кажется сложно. Ты же освоил главную функцию для черчени - polar. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
ShaggyDoc, по-моему, объектными средствами (да и через entmakex) можно создать любую полилинию. Я не работал с отводами, но вот, как вариант (точки жестко заданы, высчитывать их лениво):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Инженеру command понятна, а вот DXF-коды - тёмный лес поначалу. В AddArc(Center, Radius, StartAngle, EndAngle) - замучаешься эти углы вычислять, да еще с учётом ПСК. А так, оно конешно, можно. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
(defun c:OTVOD (/ p1 p2 p3 p4 p5 p6 ang) при таком виде локальных переменных ввод данных появляется в командной строке
(defun c:OTVOD (centr_ang D Rdug / p1 p2 p3 p4 p5 p6 ang) при таком- нет почему? вроде объявляю слева аргументы, справа локальные переменные...хмм и вообще, чем в автолиспе аргументы отличаются от переменных? насколько помню из математики x-аргумент или переменная, y-функция. еще про привязки хотел спросить, зачем их выключать? когда потом точку вводишь приходится снова привязку включать |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
что и где появляется - вообще-то регулируется кодом, прописанным в функции.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ок, расскажу как я сам понимаю. Возможно, это и неверно.
Есть в лиспе "нормальные функции", а есть "оформленные как команды" (с префиксом с:). Первые нормально воспринимают такое понятие, как аргументы. Вторые - не всегда. Если честно, я стараюсь не делать команд с аргументами вызова, хотя и видел корректно работающие коды команд с аргументами. Теперь о вызове. Если есть Код:
Код:
Код:
Код:
Код:
Код:
Для варианта команды Код:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Просто не надо никогда создавать C:-функции (псевдокоманды) с аргументами.
Цитата:
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Привет Алексей и Shaggy_Doc! Да, я читал что defun C: Отвод (), а можно defun Отвод (). Первый вариант удобен для создания кнопки, про второй не знаю, можно ли макрос для него создать. Vlide постоянно мне пишет- maloformed list on input, когда проверяю выделеный фрагмент тела функции с переменными и аргументами. Вчера зашел на сайт Толстобы Н, там прочел, что обычно maloformed list on input озночает, что скобки неправильно расставлены или не хватает. Скобки проверяю, вроде все правильно. Сегодня взял лисп чужой, где-то скачал до этого, так же проверил выделеный фрагмент тела функции с переменными- maloformed list on input. Ну вообщем сегодня весь день туда сюда тасовал и вроде заработало. Правда у меня все равно получается 4 ввода, 1) ввожу центральный угол 45/60/90 2)Ввожу диаметр отвода из списка 3) Начальная точка 4) Точка на оси трубы. Привязки поставил. Осевую на слой 0 не получается подгрузить из linetype, поэтому создал слой Center и после рисования меняю осевую. Shaggy_Doc, будешь опять ругаться
![]() ![]() Код:
Последний раз редактировалось Рyslan, 03.03.2009 в 18:32. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Двойной клик мышой на открывающей (или закрывающей) скобке автоматом выделит весь кусок, заключенный в эти скобки (естественно, если это возможно). Вот его и надо проверять.
Кстати, не maloformed, по-моему, а mailformed. Теперь о вызовах и прочей лабуде. Оформляется всего одна функция, что-то наподобие Код:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Теоретически местоположение функции не важно, по-моему. Но лично я предпочитаю функции описывать до первого их применения (уж не помню, откуда эта рекомендация вылезла).
Н.Н.Полещук, "AutoLISP и VisualLISP в среде AutoCAD" (с некоторыми купюрами): Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ну, если ты будешь передавать корректную строку, то, наверное, можно и ее использовать. Вопрос в скорости выполнения (я - не тестировал, скажу сразу).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Код:
Код:
nil Может не из-за этих функций конечно не работает...честно говоря Vlide не особо помогает выявить ошибки. Пишет то да се, а пальцем ткнуть где неправильно не умеет ![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, С чего это ты переменную centr_ang берешь в кавычки?
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Что ты этим хотел сделать
(Command "_.Arc" P2 "_E" P3 "_R" Rv "_cl") (Command "_.Change" Arc "" "_P" "_la" "Center" "" "") Цитата:
Точно так же распиши про _CHANGE Ответишь - подправлю код.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Я хочу увидеть описение ПОШАГОВЫХ действий
Типа Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Разве рисуя дугу руками после указания радиуса ты жмешь Enter? (Enter которым ты подтверждаешь ввод радиуса в командной строке не считать)
Что здесь не работает? Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Молодца
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
VVA,спасибо! Посмотри теперь мой код, работает. Вот только в конце Mirror не знаю как приспособить, отвод отрисовывается, потом зеракало передается в комстроку, запрашивается выделение объектов, можно все выделить и отзеркалить...но как то не особо красиво. Еще в моем коде плечики в 5 мм отрисовываются, для привязки. Они у меня рисуются отдельно от осевой (пробовал через Pline и дальше используя опции дуги, не получилось).
Код:
Последний раз редактировалось Рyslan, 19.03.2009 в 17:50. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Рyslan, ты вопросы задай по-человечески
![]() Что значит "повтор кода"? И "выбор всех примитивов" - это ты про (ssget "_X") или еще про что-то?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
![]() ![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Собирай по мере отрисовки примитивы в набор
Код:
При отрисовке командными методати перед указанием точки временно отключай привязку с помощью опции "_non" Вместо (Command "_.Arc" pt6 "_E" pt5 "_R" Rn) Нужно (Command "_.Arc" "_non" pt6 "_E" "_non" pt5 "_R" Rn)
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
VVA а ведь вначале мы отключаем все привязки. разве обязательно добавлять non?
(setq pt9 (polar pt1 (+ ang 0) 5)) -->добавил точку, для зеркала--> (Command "_.Mirror" SS "" pt1 pt9) -->сразу сама выбирает ось отражения, остается только выбрать Да\Нет VVA а pause pause что делает? для выхода из программы в комстроку? Последний раз редактировалось Рyslan, 21.03.2009 в 10:39. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
1. Оформляй вызов как (defun c:мойкод() <...>), тогда его можно будет повторно вызвать на выполнение как обычную команду.
2. Либо перед выполнением mirror запоминай последний примитив через (entlast), либо используй (vla-mirror) или что-то такого типа. Сейчас заняться не могу, - уезжаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Всем привет! Есть вопрос. При рисовании вправо ортогонально, программа не работает. Автокад пишет- Укажите направление: <Орто вкл>
Значение должно быть положительным и ненулевым. Как от этого избавиться? Еще вопрос, функция cond только одно условие выполняет? ((= D_nom 80) (= d_nom 65) (setq D1 89 D2 76 L 80 H 70)) два диаметра D1 и D2 возьмет? Последний раз редактировалось Рyslan, 25.03.2009 в 17:30. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Избавиться? По идее надо код перелопачивать. Начинается самое интересное
![]() cond "возьмет", если ты сравнивать будешь корректно. Функция and где?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, "Это же вам не лезгинка, а твист!" (С) Это не бейсик, а LISP.
and - это функция, и надо вызывать функцию and: Код:
Но D_nom и d_nom для LISP - это одна и та же переменная. К регистру он нечувствителен. Сравнения бессмысленные. Думай над логикой. Правильно называй переменные. |
|||
![]() |
|
||||
Помогаю, кому делать нечего. Регистрация: 27.03.2009
Русская деревня
Сообщений: 394
|
Это один из примеров построения отвода трубопровода в "Классическом" AutoLisp-е. В данном примере ПСК привязывается к торцу трубы и вычисление координат точек значительно упрощается. Отзеркаливание в данном случае не требуется.
С уважением, Евгений Дегтярев. Код:
Последний раз редактировалось E-degtyarev, 06.04.2009 в 11:34. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Рyslan, Аккуратней скопируй код из #194. У меня работает
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Не надо приучаться переносить ПСК программно, да ещё на таких детских задачах. Это дорога для множества ошибок в будущем. |
|||
![]() |
|
||||
Помогаю, кому делать нечего. Регистрация: 27.03.2009
Русская деревня
Сообщений: 394
|
Уважаемый ShaggyDoc.
Буду Вам очень признателен, если вы продемонстрируете, как в данной ситуации выполнить вычисление координат точек в мировой ПСК, чтобы получить полный аналог по функционалу моего лиспа. Евгений Дегтярев. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Код:
Код:
А вот последнее (command "_ucs" "_w") не надо вообще делать. До рисования могла быть установлена не мировая ПСК, а ту вдруг принудительный непрошеный возврат. В крайнем случае - (command "_ucs" "_p") Точки в МСК надо передавать при рисовании объектными методами. Тогда надо использовать функцию trans. И, очень редко, при построении 3Д-моделей, может действительно потребоваться временный перенос ПСК, но делать его надо чрезвычайно осторожно. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
E-degtyarev, + ShaggyDoc, Если все же решился что-то делать с ПСК, то отслеживай и изменяй на 0 значение переменной UCSFOLLOW, а то можно получить хороший rock'n'roll на экране
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
В команде tee есть ошибка (сам ищи). И в pipe тоже.
P.S. Я бы делал совершенно не так, если честно. Данные - в отдельный ini- или xml-файл; предварительное чтение данных оттуда; динамическое формирование запросов в ком.строке или dcl-диалога; по максимуму обработку ошибок ввода (нажатия Esc); вставку готовых частей как блоков ну и так далее.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Привет Алексей! Да, сегодня как раз в tee и напоролся на ошибку, там у диаметров 150 скобки лишние.
![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Пока ты только сам с программой работаешь - ошибок не видишь. Потому что делаешь всё правильно, как надо. А ты дай программу "обезьяне с гранатой", и если она у нее будет работать, то в первом приближении (версия 0.1) может считаться сделанной. Потом доводка до версии 1.0. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Проблема в том, что зачастую "обезяной с гранатой" приходится быть самому программисту
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Значит надо делать "всё не так". Озвереть.
Спрашивают "Выбери диаметр", а ты жмешь ESC, Enter, тычешь мышкой в меню. Спрашивают "Направление перехода", а ты не там, где всегда указываешь, а в противоположном месте. То включишь привязки, то отключишь. То ПСК изменишь. То перспективный вид сделаешь. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Offtop: По моему личному опыту (подсчет очень приблизительный):
время на постановку задачи (полностью проработанное ТЗ) - 15% время на написание кода - 5% время на отладку и отлов всяких ситуевин - 80%. Короче, все веселье впереди ![]() - Почему Землю Господь создал за 6 дней? - А ему не надо было беспокоиться о совместимости с предыдущими версиями ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Можно. Команда _-BLOCK
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Одного условного изображения "бабочкой" достаточно на все виды задвижек. Если изображение детальное, реалистичное, да ещё в 3D - тогда может быть. Ну и делай блок с именем, например "30с76нж_100-64" или еще как-то. С учётом, что в чужом чертеже может быть такой же блок, но с другим ихображением. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Чего они драться будут? Как это "имя прописано на блок"? Нарисовано, что-ли, как на настоящей задвижке? Тогда делай много блоков, если это "нарисовано" зачем-то нужно.
Сначала определись, какие именно блоки хочешь иметь - условные или реальные изображения. И вообще почитай - что такое блоки. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, для чего блоки - всем понятно. Это не вопрос. Можно блоки, можно программы использовать. Можно изображения, нарисованные программно, превращать в блоки автоматически. "Единое целое" - это не обязательно блок. Это может быть и группа.
Вопрос в том - зачем именно блоки. Например, отводы можно нарисовать один раз и вставлять блоком. Можно сделать один единичный блок отвода и вставлять, масштабируя по диаметру. Но придется делать единичные блоки на разны углы и средние радиусы. Минус будет в то, что потом непременно когда-то понадобится такой блок "отвода в три линии" расчленять. Блок условного обозначения задвижки можно сделать единичным и вставлять его и в схемы, и в "трехлинейные" чертежи. Но если надо реалистичное изображение, с реальной длиной и высотой шпинделя, то уже единичным блоком не обойтись - длина и высота у задвижек разных диаметров непропорционально соотносятся. Придется делать на все диаметры. А если надо ещё чтобы визуально различались стальные и чугунные задвижки, то придется делать блоки задвижек и разных диаметров, и разных моделей. Вот почему я советую определиться какие именно блоки хочешь иметь. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
я просто хочу, чтобы после рисования чего-либо моим лиспом, изображение было единым целым. "Можно изображения, нарисованные программно, превращать в блоки автоматически" вот это хочу
![]() Последний раз редактировалось Рyslan, 16.04.2009 в 20:32. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Ну так превращай. Потом будешь спрашивать как "разпревратить".
Можно и командой. Только помести созданные примитивы на слой 0. Да другие свойства дай ByBlock. Но не у всех примитивов, а с умом. Например, у отвода вес осевой линии целесообразно сделать Lwdefault, а у кромок - ByBlock. Цвет всех примитивов сделать ByBlock. Да правильно точку вставки назначить. Да правильно, до включения в блок, примитивы разместить. Да включить куда-то блок в файл. Да сделать, чтобы во время рисования определение блока внедрилось в текущий чертеж. Да как-то позаботиться о выборе блоков (желательно визуальном) или "вычислении" их имен. Делов-то. "Уж если я чего задумал - выпью обязательно" (С). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Лично я остерегаюсь использовать LwDefault где бы то ни было... Слишком высока вероятность, что найдется местный кулибин, который установит значение в 211 системной переменной и все построения накроются медным тазом. Дырявым.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Есть 3 варианта.
1. Отрисовывать, постоянно добавляя примитивы в SelectionSet, а затем через комаду _.-block преобразовать отрисованные примитивы в блок. 2. Через entmakex создать начало описания блока; через entmakex, например, создавать примитивы; не забыть создать описание "окончания" блока. См.в справке описание BLOCK. 3. Использовать ActiveX-методы создания блока и добавлять примитивы "прямо в описание блока".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Я (если честно) предпочитаю именно последний
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
пишу- (Command "_.-block" "Переход" pt1 SS ""). Вроде все ок, блок создается...и потом пропадает. не вставляется сразу. Если добавить Insert, то рисуется сам переход и еще блок перехода. Причем если второй раз рисовать другой переход, то требует переопределения блока. кароче муть какая то получается
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Особенность лиспового вызова _.block: после создания блока все примитивы "исчезают" и надо блок принудительно вставлять.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, Алексей правильно написал - "до невозможности". Вообще-то проще только command. Удобна инженерам - они знают команды, знают опции и могут легко применить. Именно функция command сделала программирование в AutoCAD доступным "простым инженерам" - они разработали десятки тысяч больших и маленьких программ.
ActiveX удобен тем, что используются осмысленные имена методов и свойств. Третий метод - через entmake неудобен тем, что надо знать "человекобессмысленные" DXF-коды. Но есть ещё лучший способ - разделение труда. Сложные функции делают "низкоуровневые" программисты и помещают их в библиотеки. А "прикладные" программисты или простые инженеры используют их результаты для создания конечных программ. Например, программа для рисования отвода заключается в таком случае в 1 строчку: Вот крутоизогнутый отвод в 2D - то, что ты делаешь: Код:
А вот вариант, когда тебе надо рисовать отвод от угла поворота трассы (часто так и надо): Код:
Код:
Код:
И задвижку, да ещё в 3D не сложнее заставить моделироваться: Код:
И всё это ты когда-то сможешь сам! |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, все коды, кроме 3D, опубликованы в книге "САПР на базе AutoCAD - как это делается". И приложены на CD.
Уже ссылался на неё. ты писал "листаю". Читать надо. Изучать. Ответы на все твои вопросы там есть, в том числе в виде готового кода, даже набирать не нужно. Здесь публиковать нет возможности, так как любая функция вызывает десяток-другой других, низкоуровневых библиотечных функций. Именно это позволяет делать короткие прикладные программы - в одну строчку. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
в книге написано: "Функция getpoint дает возможность пользователю ввести точку с помощью клавиатуры или мыши. Если задан аргумент <точка1>, то при вводе точки с помощью мыши рисуется резиновая нить, начинающаяся в точке, заданной аргументом <точка1>"
странно, а вот резиновая нить то и не рисуется |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Специально проверил - все отображается (настройки по умолчанию; цвет курсора - стандартный и не меняется в зависимости от цвета рабочего слоя). AA2008Eng+SP1, запущенный как AutoCAD 2008
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Помогаю, кому делать нечего. Регистрация: 27.03.2009
Русская деревня
Сообщений: 394
|
К посту 231.
Уважаемый ShaggyDoc. Для меня почему-то оказались более понятными "человекобессмыссленные" DXF-коды, чем ActiveX. Не лезут в голову эти vl-vla-vlax-реновые функции, хоть тресни. Посоветуйте пожалуйста литературу "для чайников" по этому вопросу. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
E-degtyarev, литература практически единственная - Н.Полещук, П.Лоскутов - "AutoLISP и Visual LISP в среде AutoCAD". Там всё подробно.
А "не лезущие" функции как раз просты - надо только понять объектную модель и принцип формирования имен. В этом поможет acadauto.chm |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Кто хочет написать программу диалоговых окон для имеющих лиспов элементов деталей трубопроводов, по аналогу проката Василия Кондрата? Будет неплохое подспорье для трубопроводчиков
ясно, никто не хочет. как пофлудить так все тут как тут, как лисп написать для непойми чего так пожалуйста..... Последний раз редактировалось Рyslan, 31.07.2009 в 16:11. |
|||
![]() |
|
||||
Регистрация: 12.07.2008
Сообщений: 211
|
Возможно немного не в ту степь, но не охота из-за простого вопроса новую тему создавать....
Кто-нибудь, напомните почему при создании запроса к пользователю выбрать вариант ответа нельзя нажать Enter чтоб выбрать вариант по умолчанию? Поясняю на примере: Изначально было так: Код:
Код:
__________________
Users are not stupid, they are busy. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
А не проще ли будет сделать один блок с атрибутом или несколькими атрибутами и вставлять его, импортируя значения текста?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Разумеется, текст в блок можно "конвертировать". Только лучше, как Кулик Алексей aka kpblc подсказывает - брать "значение" текста и присваивать атрибуту блока, на место текста вставлять блок, а текст убирать.
Смысл в этом есть, например, для высотных отметок, которые были просто текстом написаны. Тогда их можно будет, впоследствии, обрабатывать программно - модель рельефа строить, профили и т.п. Что касается горизонталей, то тут лучше использовать специальный "текстовый" тип линии. В этом случае полилиния, изображающая горизонталь, остается одним объектом, но видны значения отметки. И, при необходимости, можно извлечь значения высотных отметок для каждой горизонтали. Причем извлекать понадобится только одно значение для каждой линии - из имени типа. Разумеется, такие линии должны генерироваться автоматически, при вводе значения отметки. |
|||
![]() |
|
||||
Регистрация: 27.05.2009
Сообщений: 36
|
Во-первых- большое спасибо за реакцию на вопрос. Но к сожалению, я не знаю, как импортировать значение текста в блок. В ручную - тяжело, текстов тысячи пол-тары. При-этом необходимо сохранить точку вставки текста, либо прочесть в блок ( если он общий) его координаты.
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Образец наверняка поможет делу: "что было" и "что должно из этого получиться".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.07.2008
Сообщений: 211
|
Чувак наконец-то переиздал свою книженцию "The Visual LISP Developer's Bible, 2011 Edition"!
Советую к прочтению!
__________________
Users are not stupid, they are busy. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,108
|
|
|||
![]() |