Подскажите, существуют ли практические руководства по Lisp? - Страница 8
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подскажите, существуют ли практические руководства по Lisp?

Подскажите, существуют ли практические руководства по Lisp?

Ответ
Поиск в этой теме
Непрочитано 07.03.2006, 15:51
Подскажите, существуют ли практические руководства по Lisp?
vn
 
Регистрация: 10.02.2006
Сообщений: 373

Недавно купил книгу. Полный сборник команд Lisp с их описанием.
Но на этом все и кончилось. Никаких примеров для начинающих.
Если кто знает, с чего начинать изучение Lisp медленно и шаг за шагом , подскажите пожалуйста.
Просмотров: 76917
 
Непрочитано 05.02.2009, 14:40
#141
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Рyslan вне форума  
 
Непрочитано 15.02.2009, 19:33
#142
Рyslan


 
Регистрация: 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.. пойдет? Чота у меня ничерта не получается, отупел совсем
Рyslan вне форума  
 
Непрочитано 16.02.2009, 07:29
#143
ShaggyDoc

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 раз в час? Вынеси их в аргументы функции, не делай её "командой". Например, так:
Код:
[Выделить все]
(defun draw_turn (D Rdug /  )
;; Не надо спрашивать
.....

)
Да пусть эта функция не princ вернет (то есть ничего), а последнюю точку на оси отвода - к ней потом можно дальше прицепиться.

Теперь легче будет с геометрией. А что для геометрии отвода надо:

1. Начальная точка на оси трубы
2. Направление трубы - точка, а не угол.
3. В какую сторону (влево или вправо от направления) рисовать отвод.

Это можно или получить запросом еще одной точки или, более примитивно, нарисовать отвод в любую сторону, а потом спросить "Отзеркалить?" и, если надо, сделать MIRROR для отвода и его оси.

Для удобства надо отделить ввод данных от самого рисования. То есть расширить объявление функции рисования наподобие:
Код:
[Выделить все]
(defun draw_turn (D Rdug начальная_точка точка_на оси_трубы рисовать_влево / ....  )
....
)
Повторяю ещё раз:

Цитата:
Начинать надо на бумажке. Набросай эскиз - под углом, проставь номера точек и прикинь, как высчитать координаты всех точек, если известна координата начальной точки и направление трассы. А вот направление запрашивать надо обязательно. Потом выяснить - в какую сторону направить. Радиус и диаметр как раз спрашивать незачем - это могут быть аргументы функции рисования.
ShaggyDoc вне форума  
 
Непрочитано 16.02.2009, 08:42
#144
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Спасибо. будем думать дальше. книгу я листаю
Рyslan вне форума  
 
Непрочитано 20.02.2009, 17:40
#145
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Код:
[Выделить все]
(defun c:OTVOD (/ p1 p2 p3 p4 p5 p6 DN_otv)
(initget 7)
(setq DN_otv (getint (strcat "\nДиаметр отвода 50/65/80/100:")))

(cond
	((= DN_otv 50) (setq D 57 Rdug 75))
	((= DN_otv 65) (setq D 76 Rdug 100))
	((= DN_otv 80) (setq D 89 Rdug 120))
	((= DN_otv 100) (setq D 114 Rdug 150))
)

	(setq P1 (getpoint "\nНачальная точка:"))
	(setq ang (getorient P1 "\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)
)

Shaggy_Doc, ну как? Вот как отзеркалить? после рисования ввести запрос на зеркало? Давай замечания свои, даже если ты уже говорил об этом. До меня пока дойдет ....еще осевую как-то надо сделать, вместо простой дуги, хмм

Последний раз редактировалось Кулик Алексей aka kpblc, 21.02.2009 в 11:11. Причина: Code не забывай
Рyslan вне форума  
 
Непрочитано 24.02.2009, 20:32
#146
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Кулик Алексей aka kpblc, ну спасибо тебе. полдня никто не реагировал. периодически просматривал новую тему и на тебе, зашел ты и все удалил. Куча балбесов кучу тем создают про всякую муть... а тут в кои веки тему создал и на тебе...
Рyslan вне форума  
 
Непрочитано 24.02.2009, 20:38
#147
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Рyslan, а программа в таком виде (то, что в закрытой ветке) не может правильно рисовать. Прилагаю картинку - черные отводы. Видишь, что получается? И это на пустом месте, а что будет, если ещё обстановка нарисована. Догадаешься, почему?

Ты тестируешь, чтобы доказать себе - "Ура! Заработало!". А надо в реальных условиях, и тогда оказывается, что не работает. Или работает, но не так.

Да и осевая линия тоненькая должна быть, и тип у нее свой должен быть. Мелочь, но радикально изменяет всё рисование

Вот попробуй нарисовать, как на второй картинке - красной. Нарисуй как-нибудь прямой участок, а от него построй скобу из своих отводов. Чтоб как на этой картинке.
Миниатюры
Нажмите на изображение для увеличения
Название: otvod_01.png
Просмотров: 160
Размер:	4.4 Кб
ID:	16541  Нажмите на изображение для увеличения
Название: otvod_02.png
Просмотров: 169
Размер:	2.1 Кб
ID:	16542  
ShaggyDoc вне форума  
 
Непрочитано 24.02.2009, 20:52
#148
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Offtop: Рyslan, про "кучу балбесов" и прочую муть - пальцем покажи. Точнее, ссылки. В ПМ, чтобы не загрязнять тему.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.02.2009, 21:20
#149
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Прошу всех прощения за свое поведение. Злой был, никто в моей новой теме не ответил. Так всегда, сначала скажу сделаю, потом думаю..а зачем. Алексей, без обид. Shaggy_Doc, наверное лисп это не мое.
Рyslan вне форума  
 
Непрочитано 24.02.2009, 22:10
#150
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Shaggy_Doc, наверное лисп это не мое
Не отчаивайся раньше времени.

1. Почему рисует неправильно? Да ты не то, что в книжке - в этой ветке не прочитал, что при рисовании функцией command надо отключать привязки. А потом восстанавливать. Первая и самая распространенная ошибка.

2. Ты по-прежнему принципиально неверно ввод организуешь. Ну как пользователь может точно указать "направление отвода"? Как он поймет, что это такое? Отвод-то как раз изменяет направление трассы. А как ввести угол? Вот есть конец ранее нарисованной трубы, к середине торца можно привязать начальную точку, а дальше? Как ты укажешь "направление отвода", чтобы потом отвод правильно нарисовался "приварившись" к концу трубы?

3. А разве отводы только 90 градусов бывают? А 30, 45, 60, да и 180 может быть. А разве радиус только 1.5 Д? В данном варианте ты геометрию рассчитываешь под конкретный вариант, а она должна быть функцией от диаметра, центрального угла и радиуса. Тогда и все расчеты точек иначе будут.

4. Осевую линию, конечно надо отдельно делать, всегда тонкую (LWDEFAULT), а "края" - с текущим весом линии. Кстати, никакой гарантии нет, что во время рисования PLINE у неё не будет какая-то ненужная тебе физическая ширина. Значит надо и Width принудительно устанавливать.

5. А попробуй просто вручную нарисовать отвод полилинией - сначала в одну сторону, а потом в другую. Увидишь, что он вообще не нарисуется. Чтобы правильно рисовалась дуга отвода, её надо начинать не от угла, надо сделать маленькое плечико (например 1 ед) и только тогда можно дугу сделать по точкам. Плечики, конечно, на обеих концах, а это точки дополнительные.

Всё это должно решаться на этапе постановки задачи. Ты её сам себе ставишь, наверняка знаешь, как отводы рисуются, та подумай немного заранее. А код, кода всё понятно, проще всего написать. Это первый раз кажется сложно. Ты же освоил главную функцию для черчени - polar.
ShaggyDoc вне форума  
 
Непрочитано 24.02.2009, 22:50
#151
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


ShaggyDoc, по-моему, объектными средствами (да и через entmakex) можно создать любую полилинию. Я не работал с отводами, но вот, как вариант (точки жестко заданы, высчитывать их лениво):
Код:
[Выделить все]
(defun test1 (/ ang)
  (setq ang (/ pi 2.)
        ang (/ (sin (/ ang 4.)) (cos (/ ang 4.)))
        ) ;_ end of setq

     ;(  (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 1759.05 391.658) (40 . 0.0) (41 . 0.0) (42 . 0.598714) (10 1842.48 475.979) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 1806.86 475.979) (40 . 0.0) (41 . 0.0) (42 . -0.557142) (10 1755.3 421.639) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
  (entmakex (list
              '(0 . "LWPOLYLINE")
              '(100 . "AcDbEntity")
              '(100 . "AcDbPolyline")
              (cons 90 4) ; количество вершин
              '(70 . 1) ; признак замкнутости
              '(43 . 0.) ; постоянная ширина
              '(38 . 0.) ; elevation
              '(39 . 0.) ; thickness
              '(10 0. -10.)
              (cons 42 ang)
              '(10 50. 40.)
              '(42 . 0.)
              '(10 30. 40.)
              (cons 42 (- ang))
              '(10 0. 10.)
              '(42 . 0.)
              ) ;_ end of list
            ) ;_ end of entmakex
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.02.2009, 06:55
#152
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
объектными средствами (да и через entmakex) можно создать любую полилинию
Конечно можно. А полилинию с дугами? Тоже можно, но геометрию надо совсем другую высчитывать. В данном случае использование command оправданно, особенно для изучения программирования. Человек может наглядно проверить, как это должно работать. Вот для построения дуги в command можно знать точки начала и конца дуги, они легко вычисляются и их легко передать. Центр даже не обязательно знать.

Инженеру command понятна, а вот DXF-коды - тёмный лес поначалу.

В AddArc(Center, Radius, StartAngle, EndAngle) - замучаешься эти углы вычислять, да еще с учётом ПСК.

А так, оно конешно, можно.
ShaggyDoc вне форума  
 
Непрочитано 25.02.2009, 07:26
#153
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


ShaggyDoc, Кулик Алексей aka kpblc спасибо за советы!
Рyslan вне форума  
 
Непрочитано 25.02.2009, 23:48
#154
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Вот для примера, как по минимуму можно это
решить если твой чертеж в миоровой системе
координат (без излишеств)
Тестировал только в A2008(en)

Код:
[Выделить все]
(vl-load-com)
(defun C:RR ()
(setvar "osmode" 514)
(initget 1)
(setq pt1 (getpoint "\nУказать точку, затем перпендикуляр от магистрали >>> "))
(setq liness (ssget "C" pt1 pt1)
      ename (ssname liness 0)
      )  
(setq pick nil)
(setq input 5)
(while (not (equal input 3))
(setq temp (grread T 4 4))
(redraw)
(setq input (car temp))
(setq pick (cadr temp))
(setq near  (vlax-curve-getclosestpointto ename pick )) 
(grdraw point near 4)
)
(redraw)
(setvar "lastpoint" pick)
(if (not (tblsearch "ltype" "Center"))
	   (command "-linetype" "_L" "Center" "" "")
	   )
(initget "50 65 80 100")
(setq dia (getreal "\nВведите диаметр (Right Click to choice)[50/65/80/100]: "))
(setq ang1  (angle  near pick)
      ang2  (- ang1 (/ pi 2))
      crp (polar pt1 ang2 (* dia 1.5))
      p1 (polar pt1 (+ ang2 pi) (/ dia 2))
      p2 (polar pt1 ang2 (/ dia 2))
      p3 (polar crp ang1 dia)
      p4 (polar crp ang1 (* dia 2))
      mp1 p1
      mp2 (polar crp ang1 (* dia 1.5))
      pn pt1
      pv (polar pt1 ang1 1000.)
      )
(setq ss (ssadd))
(command "._pline" "_non" p2 "_non" p1 "_a" "_d" (angtos ang1) "_non" p4
	   "_l" "_non" p3 "_a" "_d" (angtos (+ ang1 (/ pi 2))) "_non" p2 "cl")
(command "._pedit" (setq pl (entlast)) "_w" "5.000" "")
(command "._matchprop" en "_L" "")
(ssadd (entlast) ss)
(command "._arc" "C" "_non" crp "_non" mp2 "_non" mp1)	      
(command "._chprop" "_L" "" "_LT" "Center" "_S" "2.000" "")
(ssadd (entlast) ss)  
  (initget "Отразить Нет")
  (setq ans (getkword "\nИзменить положение? (Right Click to choice)[Отразить/Нет]"))
  (if (eq "Отразить" ans)
      (command "._mirror" ss "" "_non" pv "_non" pn "_Y")
    )
(princ)
)
~'J'~
Олег (jr.) вне форума  
 
Непрочитано 02.03.2009, 19:35
#155
Рyslan


 
Регистрация: 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-функция. еще про привязки хотел спросить, зачем их выключать? когда потом точку вводишь приходится снова привязку включать
Рyslan вне форума  
 
Непрочитано 02.03.2009, 19:46
#156
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


что и где появляется - вообще-то регулируется кодом, прописанным в функции.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.03.2009, 19:56
#157
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


ну не знаю, тебе может понятно, а мне непонятно, почему при одном задании лисп грузится в автокад и появляется ввод данных, а при другом задании автокад пишет- слишком мало аргументов
Рyslan вне форума  
 
Непрочитано 02.03.2009, 23:38
#158
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Ок, расскажу как я сам понимаю. Возможно, это и неверно.
Есть в лиспе "нормальные функции", а есть "оформленные как команды" (с префиксом с:). Первые нормально воспринимают такое понятие, как аргументы. Вторые - не всегда. Если честно, я стараюсь не делать команд с аргументами вызова, хотя и видел корректно работающие коды команд с аргументами.
Теперь о вызове.
Если есть
Код:
[Выделить все]
(defun c:mycommand1() ;|<...>|;)
то mycommand1 вызывается с ком.строки как
Код:
[Выделить все]
Command: mycommand1
Если есть
Код:
[Выделить все]
(defun myfunc1() ;|<...>|;)
то вызываем соответственно как
Код:
[Выделить все]
Command: (myfunc1)
А вот теперь приступаем к аргументам:
Код:
[Выделить все]
(defun myfunc2 (arg1 arg2) ;|<...>|;)
будет вызываться только как
Код:
[Выделить все]
Command: (myfunc2 x y)
Естественно, что в х и в у хранятся какие-то значения.
Для варианта команды
Код:
[Выделить все]
(defun c:mycommand2(arg1 arg2) ;|<...>|;)
вызов, по идее, должен быть наподобие
Код:
[Выделить все]
Command: mycommand2 x y
Но! Пробел AutoCAD воспринимает как окончание ввода. Поэтому (опять же теоретически - я не проверял, сам понимаешь) вызов должен быть оформлен примерно как
Код:
[Выделить все]
Command: (c:mycommand2 x y)
Но я в этом не уверен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.03.2009, 07:00
#159
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Просто не надо никогда создавать C:-функции (псевдокоманды) с аргументами.

Цитата:
To use functions as AutoCAD commands, be sure they adhere to the following rules:

- The function name must use the form C:XXX (upper- or lowercase characters). The C: portion of the name must always be present; the XXX portion is a command name of your choice. C:XXX functions can be used to override built-in AutoCAD commands. (See Redefining AutoCAD Commands.)

- The function must be defined with no arguments. However, local variables are permitted and it is a good programming practice to use them.
ShaggyDoc вне форума  
 
Непрочитано 03.03.2009, 18:22
#160
Рyslan


 
Регистрация: 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, будешь опять ругаться Вправо влево не осуществил, не пойму каким макаром это ввести, еще не понимаю как осуществить после рисования отражение Mirror и чтобы еще и точка привязки осталась. Лисп в 2006 акаде англ работает. в 2008 руском нет
Код:
[Выделить все]
(defun c:OTV (/ p1 p2 p3 p4 p5 p6 centr_ang ang D Rdug Rv Rn Dist1 Dist2 Dist3)
(defun dtr (centr_ang)
	(* pi (/ centr_ang 180.0)
	)
(setq osm (getvar "OSMODE"))
(setvar "osmode" (logior osm 16384))

						
(initget 7)																	
(setq centr_ang (getaint (strcat "\nЦентральный угол отвода 45/60/90:")))
	(initget 7)
(setq D_nominal (getdist (strcat "\nУсловный диаметр отвода 40/50/65/80/100:")))			
(cond
	((= D_nominal 40 ) (setq D 45 Rdug 60))				
	((= D_nominal 50 ) (setq D 75 Rdug 75))
	((= D_nominal 65) (setq D 76 Rdug 100))
	((= D_nominal 80) (setq D 89 Rdug 120))
	((= D_nominal 100) (setq D 108 Rdug 150))
)
  				
  (setq Rv (- Rdug (* 0.5 D)))							
  (setq Rn (+ Rdug (* 0.5 D)))							
  (setq Dist1 (* 2 Rv (sin (* 0.5 (dtr centr_ang)))))					
  (setq Dist2 (* 2 Rdug (sin (* 0.5 (dtr centr_ang)))))				
  (setq Dist3 (* 2 Rn (sin (* 0.5 (dtr centr_ang)))))					

	(setq P1 (getpoint "\nУкажите начальную точку отвода:"))	
	(setq ang (getorient P1 "\nУкажите точку на оси трубы:"))

  (setq P2 (polar P1 (+ ang (* 0.5 pi)) (* 0.5 D)))			
  (setq P3 (polar P2 (+ ang (* 0.5 (dtr centr_ang))) Dist1))
  (setq P4 (polar P1 (+ ang (* 0.5 (dtr centr_ang))) Dist2))
  (setq P6 (polar P1 (+ ang (* 1.5 pi)) (* 0.5 D)))
  (setq P5 (polar P6 (+ ang (* 0.5 (dtr centr_ang))) Dist3))
  
  (Command "_.PLine" P6 P2 "_cl")
  (Command "_.Pline" P3 P5 "_cl")
  (Command "_.Arc" P2 "_E" P3 "_R" Rv "_cl")
  (Command "_.Arc" P6 "_E" P5 "_R" Rn "_cl")
  	 
  (Command "_.Arc" P1 "_E" P4 "_R" Rdug "_cl")
(setq Arc (entlast))
(Command "_.Change" Arc "" "_P" "_la" "Center" "" "")

(setvar "OSMODE" osm)

  
  (princ)								
)

Последний раз редактировалось Рyslan, 03.03.2009 в 18:32.
Рyslan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подскажите, существуют ли практические руководства по Lisp?