Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
1

Почему так работает "_line" ?

25.02.2016, 20:50. Показов 1453. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем времени суток!

Код
(defun c:my_point ()
  (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
  (setq p2 (polar p1 pi 100))		; Çàäàåì êîîðäèíàòû òî÷êè p2
  (setq p3 (polar p2 (/ (- pi) 2) 100))	;
  (command "_line" p1 p2 "")		; ðèñóåì ëèíèþ 1
  (setq line1 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
  (command "_line" p2 p3 "")		; ðèñóåì ëèíèþ 2
  (setq line2 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
  (setvar "FILLETRAD" 10)		; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà

  ;(command "_Fillet" line1 line2)	; Ñîïðÿæåíèå		


)
Если я пишу (command "_line" p1 p2 p3 "") то проблем нет, рисует горизонталь и далее перпендикулярно вниз. Все логично и как нужно, но если я рисую линии отдельно:
(command "_line" p1 p2 "")
(command "_line" p2 p3 "")
то вторая (перпендикулярная) линия начинается из середины горизонтальной и идет под углом к точке p3.


Что не так?

Добавлено через 1 час 12 минут
Решил эту проблему переставлением координат местами, в итоге с сопряжением снова не то что то..
Не могу понять почему?
Код
(defun c:my_point ()
  (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
  (setq p2 (polar p1 pi 100))		; Çàäàåì êîîðäèíàòû òî÷êè p2
  (setq p3 (polar p2 (/ (- pi) 2) 100))	; Çàäàåì êîîðäèíàòû òî÷êè p3
  (setq p4 (polar p3 0 100))		; Çàäàåì êîîðäèíàòû òî÷êè p3  
  (command "_line" p1 p2 "")		; ðèñóåì ëèíèþ 1
  (setq line1 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
  (command "_line" p3 p2 "")		; ðèñóåì ëèíèþ 2
  (setq line2 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà


  (command "_line" p4 p1 "")		; ðèñóåì ëèíèþ 1
  (setq line3 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
  (command "_line" p4 p3 "")		; ðèñóåì ëèíèþ 2
  (setq line4 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà

  (setvar "FILLETRAD" 10)		; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà

  (command "_Fillet" line1 line2)	; Ñîïðÿæåíèå
  (command "_Fillet" line3 line4)	; Ñîïðÿæåíèå
  (command "_Fillet" line2 line3)	; Ñîïðÿæåíèå
  (command "_Fillet" line1 line4)	; Ñîïðÿæåíèå	


)
Задача нарисовать квадрат с сопряжением в углах =5
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2016, 20:50
Ответы с готовыми решениями:

Объясните, пожалуйста, почему так происходит в первом варианте и почему второй вариант работает корректно?
Я сидел и изучал списки и операции над ними. И написал вот такой простенький код: ...

Почему так работает, а так нет?
так работает // Возведение b в степень s по модулю m float powmod(float b, long s) { ...

Aa, bb, cc = [map(int, line) for line in lines] - генератор не работает
Ребят всем здрасте! Хочу присвоить переменным ,через генератор, int значения, но с генераторами...

Глобальные и локальные переменные, одна и та же прога в процедуре Не работает, а просто так работает. Почему?
Здравствуйте, есть программка которая переводит из 2-ной системы в 10-ную. Она работает. А вот...

В С++ так не работает, объясните пожалуйста, почему в Pythone работает
Здравствуйте! Помогите пожалуйста новичку, объясните почему так! Помнится, когда то решал такую...

10
1018 / 964 / 151
Регистрация: 10.08.2015
Сообщений: 5,168
25.02.2016, 21:32 2
при рисовании командным методом необходимо обнулять переменные osmode, blipmode и cmdecho. Первые две влияют на результат, третья на скорость
1
2 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
26.02.2016, 09:10  [ТС] 3
т.е. просто присвоив "" (пустую строку) или nill ?

Добавлено через 40 минут
Код
(defun c:my_point ()
  (setq p1 (getpoint "\nвведите базовую точку:")) ;
  (setq p2 (polar p1 pi 100))		; Задаем координаты точки p2
  (setq p3 (polar p2 (/ (- pi) 2) 100))	; Задаем координаты точки p3
  (setq p4 (polar p3 0 100))		; Задаем координаты точки p3  
  (command "_line" p1 p2 "")		; рисуем линию 1
  (setq line1 (entlast))		; Записываем имя объекта
  (command "_line" p3 p2 "")		; рисуем линию 2
  (setq line2 (entlast))		; Записываем имя объекта


  (command "_line" p4 p1 "")		; рисуем линию 1
  ; (((
  (setq osmode ""
	blipmode ""
	cmdecho "");
  (setq line3 (entlast))		; Записываем имя объекта
  (command "_line" p4 p3 "")		; рисуем линию 2
    ; (((
  (setq osmode ""
	blipmode ""
	cmdecho "");
  (setq line4 (entlast))		; Записываем имя объекта

  (setvar "FILLETRAD" 10)		; устанавливаем системную переменную радиуса

  (command "_Fillet" line1 line2)	; Сопряжение
    ; (((
  (setq osmode ""
	blipmode ""
	cmdecho "");
  (command "_Fillet" line3 line4)	; Сопряжение
    ; (((
  (setq osmode ""
	blipmode ""
	cmdecho "");
  (command "_Fillet" line2 line3)	; Сопряжение
    ; (((
  (setq osmode ""
	blipmode ""
	cmdecho "");
  (command "_Fillet" line1 line4)	; Сопряжение
    ; (((
  (setq osmode ""
	blipmode ""
	cmdecho "");


)
Так ничего не меняется...
0
1018 / 964 / 151
Регистрация: 10.08.2015
Сообщений: 5,168
26.02.2016, 11:15 4
osmode, blipmode и cmdecho - это системные переменные автокада, для них есть функции setvar и getvar
Lisp
1
2
3
4
5
6
7
8
9
10
11
;; Запоминаем переменную osmode
(setq osm (getvar 'osmode))
 
;; Обнуляем переменную osmode
(setvar 'osmode 0))
 
;; Рисуем что-либо
;; ...
 
Восстанавливаем переменную osmode
(setvar 'osmode osm)
То же самое касается и остальных переменных. В вашем случае переменную FilletRad тоже нужно запомнить и восстановить
1
2 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
26.02.2016, 20:08  [ТС] 5
Цитата Сообщение от vlisp Посмотреть сообщение
;; Обнуляем переменную osmode
(setvar 'osmode 0))
Т.е. ей нужно присвоить нуль перед каждым вызовом command("_line" ....); а после окончания рисования восстановить ее? или как?

Добавлено через 7 минут
Код
(defun c:my_point ()
  (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
  (setq p2 (polar p1 pi 100))		; Çàäàåì êîîðäèíàòû òî÷êè p2
  (setq p3 (polar p2 (/ (- pi) 2) 100))	; Çàäàåì êîîðäèíàòû òî÷êè p3
  (setq p4 (polar p3 0 100))		; Çàäàåì êîîðäèíàòû òî÷êè p3

  (setq osm (getvar 'osmode))		; çàïîìèíàåì ñèñòåìíóþ ïåðåìåííóþ
  (setvar 'osmode 0)
					; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ


  (command "_line" p1 p2 "")		; ðèñóåì ëèíèþ 1
  (setq line1 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
  (command "_line" p3 p2 "")		; ðèñóåì ëèíèþ 2
  (setq line2 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
   (setvar 'osmode 0)


  (command "_line" p4 p1 "")		; ðèñóåì ëèíèþ 1
  (setq line3 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
   (setvar 'osmode 0)
  (command "_line" p4 p3 "")		; ðèñóåì ëèíèþ 2
  (setq line4 (entlast))		; Çàïèñûâàåì èìÿ îáúåêòà
   (setvar 'osmode 0)

  (setvar "FILLETRAD" 10)		; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà

  (command "_Fillet" line1 line2)	; Ñîïðÿæåíèå
  (setvar "FILLETRAD" 10)
  (command "_Fillet" line3 line4)	; Ñîïðÿæåíèå
  (setvar "FILLETRAD" 10)
  (command "_Fillet" line2 line3)	; Ñîïðÿæåíèå
  (setvar "FILLETRAD" 10)
  (command "_Fillet" line1 line4)	; Ñîïðÿæåíèå


)
Изменил код таким образом, ничего не изменилось
0
1018 / 964 / 151
Регистрация: 10.08.2015
Сообщений: 5,168
27.02.2016, 10:52 6
Цитата Сообщение от lestat89 Посмотреть сообщение
Изменил код таким образом, ничего не изменилось
а что должно было получиться?
Цитата Сообщение от lestat89 Посмотреть сообщение
нужно присвоить нуль перед каждым вызовом command("_line" ....);
Нет, достаточно один раз перед всеми вызовами command
0
2 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
27.02.2016, 13:24  [ТС] 7
Все равно ничего. Проблема похоже не в этом, а в Enlast либо чем то еще.
Задача:
Нарисовать квадрат 100 x 100 , с сопряжением в углах R=5
Код:
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
42
43
44
45
(defun c:my_point ()
 
  (setq p1 (getpoint "\nВведите базовую точку:"))
                    ; Задаем координаты точки p1
  (setq p2 (polar p1 pi 100))       ; Задаем координаты точки p2
  (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Задаем координаты точки p3
  (setq p4 (polar p3 0 100))        ; Задаем координаты точки p3
 
                    ; Запоминаем и обнуляем системные переменные osmode , blipmode , cmdecho
  (setq osm (getvar 'osmode))
  (setvar 'osmode 0)
  (setq blm (getvar 'blipmode))
  (setvar 'blipmode 0)
  (setq cme (getvar 'cmdecho))
  (setvar 'cmdecho 0)
 
  (command "_line" p1 p2 "")        ; рисуем линию 1
  (setq line1 (entlast))        ; Записываем имя объекта
  (command "_line" p3 p2 "")        ; рисуем линию 2
  (setq line2 (entlast))        ; Записываем имя объекта
 
 
 
  (command "_line" p4 p1 "")        ; рисуем линию 1
  (setq line3 (entlast))        ; Записываем имя объекта
  (setvar 'osmode 0)
  (command "_line" p4 p3 "")        ; рисуем линию 2
  (setq line4 (entlast))        ; Записываем имя объекта
  (setvar 'osmode 0)
 
  (setvar "FILLETRAD" 10)       ; устанавливаем системную переменную радиуса
 
  (command "_Fillet" line1 line2)   ; Сопряжение
  (setvar "FILLETRAD" 10)
  (command "_Fillet" line3 line4)   ; Сопряжение
  (setvar "FILLETRAD" 10)
  (command "_Fillet" line2 line3)   ; Сопряжение
  (setvar "FILLETRAD" 10)
  (command "_Fillet" line1 line4)   ; Сопряжение
 
                    ; Восстанавливаем системные переменные osmode , blipmode , cmdecho
  (setvar 'osmode osm)
  (setvar 'blipmode blm)
  (setvar 'cmdecho cme)
)
Результат:
Почему так работает "_line" ?


т.е. в двух углах сопряжение нормальное, в двух других происходит что то не то...
0
1018 / 964 / 151
Регистрация: 10.08.2015
Сообщений: 5,168
27.02.2016, 14:28 8
Цитата Сообщение от lestat89 Посмотреть сообщение
в двух углах сопряжение нормальное, в двух других происходит что то не то...
Так наверное не те отрезки сопрягаются... Внимательнее надо быть...

Lisp
1
2
3
4
5
6
(command "_line" p4 p1 "")        ; рисуем линию 1
  (setq line3 (entlast))        ; Записываем имя объекта
  (setvar 'osmode 0)
  (command "_line" p4 p3 "")        ; рисуем линию 2
  (setq line4 (entlast))        ; Записываем имя объекта
  (setvar 'osmode 0)
вот тут ошибка... и дело явно не в ентсел
0
2 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
27.02.2016, 14:34  [ТС] 9
Убрал все системные переменные, поменял координаты на начальный вид заработало
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
(defun c:my_point ()
 
  (setq p1 (getpoint "\nÂâåäèòå áàçîâóþ òî÷êó:"))
                    ; Çàäàåì êîîðäèíàòû òî÷êè p1
  (setq p2 (polar p1 pi 100))       ; Çàäàåì êîîðäèíàòû òî÷êè p2
  (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p3
  (setq p4 (polar p3 0 100))        ; Çàäàåì êîîðäèíàòû òî÷êè p3
 
 
  (command "_line" p1 p2 "")        ; ðèñóåì ëèíèþ 1
  (setq line1 (entlast))        ; Çàïèñûâàåì èìÿ îáúåêòà
  (command "_line" p2 p3 "")        ; ðèñóåì ëèíèþ 2
  (setq line2 (entlast))        ; Çàïèñûâàåì èìÿ îáúåêòà
 
 
 
  (command "_line" p3 p4 "")        ; ðèñóåì ëèíèþ 3
  (setq line3 (entlast))        ; Çàïèñûâàåì èìÿ îáúåêòà
 
  (command "_line" p4 p1 "")        ; ðèñóåì ëèíèþ 4
  (setq line4 (entlast))        ; Çàïèñûâàåì èìÿ îáúåêòà
 
 
  (setvar "FILLETRAD" 10)       ; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà
 
  (command "_Fillet" line1 line2)   ; Ñîïðÿæåíèå
 
  (command "_Fillet" line2 line3)   ; Ñîïðÿæåíèå
 
  (command "_Fillet" line3 line4)   ; Ñîïðÿæåíèå
 
  (command "_Fillet" line4 line1)   ; Ñîïðÿæåíèå
 
 
)
0
1018 / 964 / 151
Регистрация: 10.08.2015
Сообщений: 5,168
27.02.2016, 14:43 10
Лучший ответ Сообщение было отмечено lestat89 как решение

Решение

переключайте расккладку на русский перед копированием кириллицы из влиде
Вот то, о чем я говорил
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
42
43
44
45
46
47
48
49
50
51
(defun C:MYPOINT ( / *error* osm blm cme flt p1 p2 p3 p4 )
 
  (defun *error* (msg)
   ; Восстанавливаем системные переменные osmode , blipmode , cmdecho
    (setvar 'osmode osm)
    (setvar 'blipmode blm)
    (setvar 'cmdecho cme)
    (setvar 'filletrad flt)
    (princ)
  )
  
  ;; Запоминаем и обнуляем системные переменные osmode , blipmode , cmdecho
  (setq osm (getvar 'osmode))
  (setq blm (getvar 'blipmode))
  (setq cme (getvar 'cmdecho))
  (setq flt (getvar 'filletrad))
  
  ;; Задаем координаты точки p1
  (setq p1 (getpoint "\nВведите базовую точку:"))
                   
  (setq p2 (polar p1 pi 100))           ; Задаем координаты точки p2
  (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Задаем координаты точки p3
  (setq p4 (polar p3 0 100))            ; Задаем координаты точки p3
 
  (setvar 'cmdecho  0) 
  (setvar 'osmode   0)
  (setvar 'blipmode 0)
 
  (command "_line" p1 p2 "")        ; рисуем линию 1
  (setq line1 (entlast))        ; Записываем имя объекта
 
  (command "_line" p2 p3 "")        ; рисуем линию 2
  (setq line2 (entlast))        ; Записываем имя объекта
 
  (command "_line" p3 p4 "")        ; рисуем линию 3
  (setq line3 (entlast))        ; Записываем имя объекта 
 
  (command "_line" p4 p1 "")        ; рисуем линию 4
  (setq line4 (entlast))        ; Записываем имя объекта
 
  (setvar 'filletrad 10)       ; устанавливаем системную переменную радиуса
 
  (command "_Fillet" line1 line2)   ; Сопряжение
  (command "_Fillet" line2 line3)   ; Сопряжение
  (command "_Fillet" line3 line4)   ; Сопряжение
  (command "_Fillet" line4 line1)   ; Сопряжение
 
 
 (*error* nil)
 
)
2
2 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
27.02.2016, 15:15  [ТС] 11
Благодарю! Вопрос решен! Сейчас создам новый
0
27.02.2016, 15:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2016, 15:15
Помогаю со студенческими работами здесь

Почему работает не так?
Есть код для активации программы <?php error_reporting(0); if (isset($_GET)) { $mode = $_GET;...

Почему так не работает?
Привет всем я делаю программу для построения блок схем из .cpp файла но у меня не правильно...

Почему так не работает
День добрый. Получаю значение с формы от пользователя и вывожу его. Интересует почему не работает...

Почему так работает?
Связал данные с сайта и поставил таймер на проверку. Вот почему так работает? Когда на сайте в...

Почему так не работает?
Почему не срабатывает передача строки в функцию? $(document).ready(function(){ function...

почему это так работает
по заданию надо создать два одинаковых массива с случайными числами от 0 до 99 for (i = 0; i <...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru