Форум программистов, компьютерный форум, киберфорум
Наши страницы
AutoLISP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Excalion
0 / 0 / 1
Регистрация: 14.12.2010
Сообщений: 13
1

Autolisp Полилиния-дуга

19.01.2013, 19:59. Просмотров 3997. Ответов 4
Метки нет (Все метки)

Доброго времени суток.
Нужно в автокаде с помощью автолиспа нарисовать фигуру полилиниями. Вроде бы понял как саму дугу нарисовать, но не могу задать угол. На картинке выделил дугу, которую нужно получить.
Вот код
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
      (defun dtr (a)
             (* pi (/ a 180.0))
       )
 
(defun drawout()
  (setq sp(getpoint "\nВведите начальную точку: "))
  (setq ep (getpoint "\nВведите конечную точку: ")) 
  (setq a (dtr 0))
  (setq angp90 (+ a (dtr 90)))   ;Path angle + 90 deg
  (setq angm90 (- a (dtr 90)))   ;Path angle - 90 deg
  (setq plength (distance sp ep))
 
  
   (command "Pline"
        (setq p1 (polar sp (dtr 180) plength))
        (setq p2 (polar p1 (dtr 90) (* 0.2 plength)))
        "arc" (setq p3 (polar sp (dtr 90) ( * 0.4 plength)))       
        "line" (setq p4(polar p3 (dtr 270) (* 0.4 plength)))     
        "close"
  )
   (command "arc" p2 "e" p3 "a" 30 )
  )
 
(defun C:lab ()
       (command "erase" "all" "")      
       (drawout)
  )
и еще вопросец - как залить цветом область внутри полилинии?
0
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 19:59
Ответы с готовыми решениями:

полилиния AutoCAD
как начертить полилинию для n-го количества точек?

Дуга в autolispe
Как задать дугу в autolispe?

Программа в AutoLISP
Известна длинна окружности. Найти площадь круга, ограниченного этой окружностью.

Запуск AutoLISP
Как запустить AutoLISP в AutoCad"e. Я выбираю Сервис=Приложения=... и в...

Программа в AUTOLISP
Здравствуйте,не могли бы вы мне помочь вот с таким заданием для AutoLisp ...

4
Catstail
Модератор
24154 / 12143 / 2178
Регистрация: 12.02.2012
Сообщений: 19,722
19.01.2013, 22:10 2
В HomeLisp можно рисовать кривые Безье:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(prog (w x0 y0 x1 y1 x2 y2 x3 y3 xx0 xx1 xx2 xx3 yy0 yy1
         yy2 yy3 ff fi sinfi cosfi)
      (grwCreate 'w 400 400 "Набор кривых Безье" _WHITE)
      (grwScale 'w -120 120 -120 120)
      (grwSetParm 'w 2 7 _GREEN _BLUE)
      (grwShow 'w)
      (setq x0 10)
      (setq y0 10)
      (setq x1 -20)
      (setq y1 20)
      (setq x2 70)
      (setq y2 -70)
      (setq x3 80)
      (setq y3 80)
      (dolist (ff '(0 45 90 135 180 225 270 315) T)
                   (setq fi (* _Pi (/ ff 180.)))
                   (setq sinfi (sin fi))
                   (setq cosfi (cos fi))
                   (setq xx0 (+ (* x0 cosfi) (* y0 sinfi)))
                   (setq yy0 (- (* y0 cosfi) (* x0 sinfi)))
                   (setq xx1 (+ (* x1 cosfi) (* y1 sinfi)))
                   (setq yy1 (- (* y1 cosfi) (* x1 sinfi)))
                   (setq xx2 (+ (* x2 cosfi) (* y2 sinfi)))
                   (setq yy2 (- (* y2 cosfi) (* x2 sinfi)))
                   (setq xx3 (+ (* x3 cosfi) (* y3 sinfi)))
                   (setq yy3 (- (* y3 cosfi) (* x3 sinfi)))
                   (grwBezier 'w (list xx0 yy0 xx1 yy1 xx2 yy2 xx3 yy3))
                   (setq xx1 (+ (* (- x1) cosfi) (* (- y1) sinfi)))
                   (setq yy1 (- (* (- y1) cosfi) (* (- x1) sinfi)))
                   (setq xx2 (+ (* (- x2) cosfi) (* (- y2) sinfi)))
                   (setq yy2 (- (* (- y2) cosfi) (* (- x2) sinfi)))
                   (grwBezier 'w (list xx0 yy0 xx1 yy1 xx2 yy2 xx3 yy3))
      )
  @Ink  
   (if (= (grwInkey 'w 100) 0) (go @Ink) nil)
   (grwHide 'w)
   (grwDestroy 'w)
   (return 'Ok)
)
0
Миниатюры
Autolisp Полилиния-дуга  
Excalion
0 / 0 / 1
Регистрация: 14.12.2010
Сообщений: 13
19.01.2013, 22:23  [ТС] 3
Это, конечно, прекрасно, но мне в автокаде сделать нужно)
Кривых Безье я там не нашел вообще.
0
Catstail
Модератор
24154 / 12143 / 2178
Регистрация: 12.02.2012
Сообщений: 19,722
19.01.2013, 22:26 4
По автокаду советую обратиться к Lambdik
1
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
25.01.2013, 00:15 5
Давайте лучше кое-что по-интересней нарисуем.
Например дугу полилиниями.
Ввести: дугу по 3-м точкам, и кол-во линий.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(defun C:Duga-Pline (/ t-dug-1 t-dug-2 t-dug-3 a b c p S radius L h
                        y x angle-rad duga zenter-rad kolvo-line
                        ygol coord spisok)
 (setq t-dug-1 (getpoint "\nVvod: Na4al'naja to4ka: ")
       t-dug-2 (getpoint "\nVvod: Sredn'aja to4ka: ")
       t-dug-3 (getpoint "\nVvod: Kone4naja to4ka: "))
;Стороны треугольника.
 (setq a (distance t-dug-1 t-dug-3)
       b (distance t-dug-1 t-dug-2)
       c (distance t-dug-2 t-dug-3))
;Полупериметр, площадь, радиус и высота дуги.
 (setq p (/ (+ a b c) 2)
       S (sqrt (* p (- p a) (- p b) (- p c)))
       radius (/ (* a b c) (* 4 S))
       L a
       h (- radius (sqrt (- (* radius radius) (expt (/ L 2) 2)))))
;Угол, через степенные ряды.
 (setq y (- (sqrt (+ 1 (/ (* L L) (* 4 (* h h))))) (/ L (* h 2)))
       x (- (sqrt (+ 1 (/ 1 (* y y)))) (/ 1 y))
       angle-rad (* 16 (+ (- (+ (- x (/ (expt x 3) 3))
           (/ (expt x 5) 5)) (/ (expt x 7) 7)) (/ (expt x 9) 9))))
;Центр радиуса.
 (command "_.arc" t-dug-1 t-dug-2 t-dug-3)
 (setq duga (entlast))
 (setq zenter-rad (cdr (assoc 10 (entget duga))))
 (entdel duga)
 (command  "_.ucs" "_3" zenter-rad t-dug-1 t-dug-3)
;Поделить угол в зависимости от количества линий.
 (setq kolvo-line (fix (getreal "\nVvod: Koli4estvo linij: "))
       ygol (/ angle-rad kolvo-line))
;Список координат.
 (while (/= kolvo-line -1)
  (setq coord (list (polar '(0.0 0.0 0.0) (* ygol kolvo-line) radius)))
  (setq spisok (append spisok coord))
  (setq kolvo-line (- kolvo-line 1)))
  (setq spisok (reverse spisok))
;Начертить полилинию.
 (command "_.pline")
 (foreach draw spisok (vl-cmdf draw))
 (command)
 (command "_.-view" "_top"))
Lisp
1
2
Вызов:
_Duga-Pline
На 4 части.
0
Миниатюры
Autolisp Полилиния-дуга  
25.01.2013, 00:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2013, 00:15

Способ изучения autolisp
Привет. Посоветуйте пожалуйста, как бы мне к зверю(авто лисп) этому найти...

Autolisp. Построении дуги
Пробовал сам, искал, но не выходит. Только начал изучать и тут уже такое...

AutoLISP работа с файлом
Здравствуйте! Необходимо реализовать вывод и ввод в файлы. Программа чертит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru