Товарищи! помогите с лиспом
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Товарищи! помогите с лиспом

Товарищи! помогите с лиспом

Закрытая тема
Поиск в этой теме
Непрочитано 13.06.2007, 19:34 #1
Товарищи! помогите с лиспом
САПР
 
волжский
Регистрация: 20.02.2007
Сообщений: 14

доброго времени суток всем присутствующим. очень нужна ваша помощь. задачка по лиспу такова:
нужно написать програмку на лиспе, которая бы строила параболоид, потом делала бы его сечение.
далее мы задаем горизонтальную линию на определенной высоте от начала сечения параболоида (сечение просто в виде параболы - без штриховки), у нас строится горизонтальная линия на заданной высоте,
она пробегает само сечение и возвращает длину между точками, которые являются пересечением параболы и линии.
т.е. нам нужно получить расстояние м/у точками х1 и х2 (см. рисунок).
помогите пожалуйста с этой задачкой :cry: - буду очень признателен .
чтобы показать что я хоть чего то начинал делать-выкладываю лисп-код, который якобы строит сечение параболоида(см. файл)

ps: было бы замечательно построить синусоиду, затем задавать эту горизонтальную линию и получать не только результат м/у точками х1 и х2, но и м/у х3 и х4 и т.д., т.е. накапливать результаты пробега линии по синусоиде.(выводить результаты отдельно каждый требуется). кто сможет-помогите пожалуйста.

[ATTACH]1181748895.rar[/ATTACH]
Просмотров: 7168
 
Автор темы   Непрочитано 14.06.2007, 07:35
#2
САПР


 
Регистрация: 20.02.2007
волжский
Сообщений: 14


неужели никто не поможет? мне к 19-му уже нужно сдать. мож кто поможет,пожалуйста. т.е. такова задача: построить синусоиду с выбором количества витков. затем параллельно оси Х провести линию(как в +, так и -), которая задается с клавы. эта линия пробегает(||-ая х) нашу синусоиду и в местах пересечения синусоиды и линии - возвращает длину отрезка :cry: :cry: :cry: .буду очень признателен кто поможет .
ps: см. рисунок: нужно расстояние м/у х1 и х2; х3 и х4; и т.д.; помогите кто в силах это сделать- у меня к сожаленью ничего не выходит. :cry:
[ATTACH]1181792616.dwg[/ATTACH]
САПР вне форума  
 
Непрочитано 14.06.2007, 08:18
#3
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Классная у тебя синусоида получилась...
Что, обязательно в автокаде это решать?
Система уравнений:
y=sinx
y=0.5 (например для прямой)
Отсюда x=30, следующее пересечение при x=150, отсюда расстояние получается 120.
Цитата:
нужно расстояние м/у х1 и х2; х3 и х4; и т.д.;
Если это синусоида везде будет одинаково.
Krieger вне форума  
 
Непрочитано 14.06.2007, 09:12
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Если это синусоида везде будет одинаково.
Вряд ли...
> Автору: насчет синусоиды попробуй такое:
Код:
[Выделить все]
(defun create-sin (/		  range		 step		x
		   spline_lst	  spline	 xline		gr
		   int		  res		 loc:addxline
		   _kpblc-conv-list-to-3dpoints	 counter
		   )


  (defun _kpblc-conv-list-to-3dpoints (lst / res)
				      ;|
*    Функция конвертации списка чисел в список 3-мерных точек.
*    Параметры вызова:
*	lst	список чисел
*    Примеры вызова:
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5 6)) ;-> ((1 2 3) (4 5 6))
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5))   ;-> ((1 2 3) (4 5 0.))
|;
    (cond
      ((not lst)
       nil
       )
      (t
       (setq res (cons (list (car lst)
			     (if (cadr lst)
			       (cadr lst)
			       0.
			       ) ;_ end of if
			     (if (caddr lst)
			       (caddr lst)
			       0.
			       ) ;_ end of if
			     ) ;_ end of list
		       (_kpblc-conv-list-to-3dpoints (cdddr lst))
		       ) ;_ end of cons
	     ) ;_ end of setq
       )
      ) ;_ end of cond
    res
    ) ;_ end of defun

  (defun loc:addxline (obj pt / res sec)
    (setq sec (list (+ (car pt) 1.) (cadr pt) (caddr pt)))
    (if	obj
      (progn
	(setq res obj)
	(vla-put-basepoint res (vlax-3d-point pt))
	(vla-put-secondpoint
	  res
	  (vlax-3d-point sec)
	  ) ;_ end of vla-put-SecondPoint
	) ;_ end of progn
      (setq res	(vla-addxline
		  (vla-get-modelspace
		    (vla-get-activedocument (vlax-get-acad-object))
		    ) ;_ end of vla-get-ModelSpace
		  (vlax-3d-point pt)
		  (vlax-3d-point sec)
		  ) ;_ end of vla-AddXline
	    ) ;_ end of setq
      ) ;_ end of if
    res
    ) ;_ end of defun

  (vl-load-com)
  (if
    (and
      (not (vl-catch-all-error-p
	     (vl-catch-all-apply
	       '(lambda	()
		  (setq	range (cond
				((getint "\nКоличество циклов <1> : "))
				(t 1)
				) ;_ end of cond
			) ;_ end of setq
		  ) ;_ end of lambda
	       ) ;_ end of vl-catch-all-apply
	     ) ;_ end of vl-catch-all-error-p
	   ) ;_ end of not
      range
      (not (vl-catch-all-error-p
	     (vl-catch-all-apply
	       '(lambda	()
		  (setq
		    step (cond ((getint "\nКоличество вершин на цикл <11> : "))
			       (t 11)
			       ) ;_ end of cond
		    ) ;_ end of setq
		  ) ;_ end of lambda
	       ) ;_ end of vl-catch-all-apply
	     ) ;_ end of vl-catch-all-error-p
	   ) ;_ end of not
      step
      ) ;_ end of and
     (progn
       (setq x 0.)
       (while (<= x (* 2. pi range))
	 (setq spline_lst (append spline_lst (list x (sin x) 0.))
	       x	  (+ x (/ (* 2. pi) step))
	       ) ;_ end of setq
	 ) ;_ end of while
       (setq spline (vla-addspline
		      (vla-get-modelspace
			(vla-get-activedocument (vlax-get-acad-object))
			) ;_ end of vla-get-modelspace
		      (vlax-make-variant
			(vlax-safearray-fill
			  (vlax-make-safearray
			    vlax-vbdouble
			    (cons 0 (1- (length spline_lst)))
			    ) ;_ end of vlax-make-safearray
			  spline_lst
			  ) ;_ end of vlax-safearray-fill
			) ;_ end of vlax-make-variant
		      (vlax-3d-point '(0. 0. 0.))
		      (vlax-3d-point '(0. 0. 0.))
		      ) ;_ end of vla-addspline
	     xline  (loc:addxline nil '(0. 0. 0.))
	     ) ;_ end of setq
       (while (= (car (setq gr (grread t 1 0))) 5)
	 (setq xline (loc:addxline xline (cadr gr)))
	 ) ;_ end of while
       (if (/= (car gr) 3)
	 (mapcar 'vla-erase (list xline spline))
	 (progn
	   (setq int (vlax-variant-value
		       (vla-intersectwith xline spline acextendnone)
		       ) ;_ end of vlax-variant-value
		 ) ;_ end of setq
	   (vla-erase xline)
	   (if (>= (vlax-safearray-get-u-bound int 1) 0)
	     (progn
	       (setq
		 int	 (_kpblc-conv-list-to-3dpoints (vlax-safearray->list int))
		 counter 0
		 ) ;_ end of setq
	       (repeat (1- (length int))
		 (setq res     (cons (distance (nth counter int) (nth (1+ counter) int))
				     res
				     ) ;_ end of cons
		       counter (1+ counter)
		       ) ;_ end of setq
		 ) ;_ end of repeat
	       (reverse res)
	       (mapcar '(lambda	(x)
			  (princ (strcat "\n" (vl-princ-to-string x)))
			  ) ;_ end of lambda
		       res
		       ) ;_ end of mapcar
	       ) ;_ end of progn
	     ) ;_ end of if
	   ) ;_ end of progn
	 ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 10:38
#5
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Кулик Алексей aka kpblc
Цитата:
Если это синусоида везде будет одинаково.
Вряд ли...
[ATTACH]1181803132.jpg[/ATTACH]
Krieger вне форума  
 
Непрочитано 14.06.2007, 10:45
#6
Кулик Алексей aka kpblc
Moderator

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


А, черт... Промежуточные расстояния мерить не надо. Моя ошибка, сорри, недоглядел... Я-то имел в виду, что соседние значения расстояний могут и не совпадать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 15:01
#7
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 327


Здраствуйте уважаемые специалисты.
Помогите, пожалуйста, создать лисп
Дано: ломанная линия, в виде полилинии (LWPOLYLINE) заданна неотрицательной.
На входе: вводить любую координату X
На выходе: получить координату Y этой полилинии в координате X, если в координате X нет полилинии то тихий выход.
vic153 вне форума  
 
Непрочитано 14.06.2007, 15:17
#8
Кулик Алексей aka kpblc
Moderator

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


Ты сам-то понял чо спросил? Я, например, ни фига не понял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 15:27
#9
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 327


Представь у тебя есть график функции в виде ломаной линии y=f(x). Как этот график строится: отмечаются точки вершин и через них проводят прямые y=kx+b.
Полилиния ведь и задается координатами вершин.
А теперь берется любая X и если полилиния проходит через эту X необходимо получить координату Y.
В принципе алгоритм такой: необходимо получить список вершин полилинии и последовательно проверять входит ли X в диапазон абцисс полилинии и если входит получить Y

P.S. упс, нашел ошибку у себя в коде, теперь вроде работает. Но если люди скажут свое решение буду очень благодарен.
vic153 вне форума  
 
Непрочитано 14.06.2007, 15:27
#10
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Если по простому можно так
Код:
[Выделить все]
(defun c:test (/ rec-sin ang_min ang_max step y pt1 pt2)
  (defun rec-sin (x_var)
    (if (< x_var ang_max)
      (cons (list x_var (sin x_var)) (rec-sin (+ x_var step)))
    ) ;_ end of if
  ) ;_ end of defun
  (setq ang_min (/ (* pi (getreal "\nВведите начальный угол (в градусах): ")) 180.))
  (setq ang_max (+ ang_min (* 2 pi (getint "\nКоличество циклов: "))))
  (command "_zoom" "_w" (list ang_min 0.) (list ang_max 0.))
  (setq step (/ pi 20.))
  (command "_spline")
  (apply 'command (rec-sin ang_min))
  (command "" "" "")
  (setq pt1 (getpoint "\nПервая точка линии: "))
  (setvar "ORTHOMODE" 1)
  (setq pt2 (getpoint pt1 "\nВторая точка: "))
  (command "_line" pt1 pt2 "")
  (setq y (caddr (assoc 10 (entget (entlast)))))
  (princ
    (strcat "\nРасстояние: "
	    (rtos (- pi (* 2 (atan (/ y (sqrt (- 1 (* y y))))))) 2 4)
    ) ;_ end of strcat
  ) ;_ end of princ
  (princ)
) ;_ end of defun
Правда рекурсия (rec-sin) не всегда правильно возвращае конечную точку синусоиды, но я пока не соображу какое правильное условие нужно для выхода из рекурсии...
CB вне форума  
 
Непрочитано 14.06.2007, 15:36
#11
Кулик Алексей aka kpblc
Moderator

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


Это как же ты себе представляешь, что полилиния проходит через x? Она по идее проходит через точку, а у точки обязательно и y присутствует... Я вопроса никак понять не могу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 15:45
#12
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 327


Цитата:
Сообщение от Кулик Алексей aka kpblc
Это как же ты себе представляешь, что полилиния проходит через x? Она по идее проходит через точку, а у точки обязательно и y присутствует... Я вопроса никак понять не могу.
Алексей, проходит не реально через точку (x,0), а в смысле имеет эту координату. Ведь может так статься что полилинии задана в интервале по X от 0 до 10, а ты запрашиваешь X=100 естественно никакой Y там не будет.

P.S. ну хоть теперь то понятно :roll:
vic153 вне форума  
 
Автор темы   Непрочитано 16.06.2007, 12:09
#13
САПР


 
Регистрация: 20.02.2007
волжский
Сообщений: 14


всем огромное спасибо. очень благодарен кто откликнулся.
в особенности товарищам Кулик Алексей aka kpblc,CB,Krieger.
САПР вне форума  
 
Непрочитано 25.06.2007, 11:29
#14
sersgey_r

Учусь писать прогри на лиспе
 
Регистрация: 15.06.2007
Таганрог
Сообщений: 8


Народ посмотрите код пожалуйста.
Вопрос такой,в коммандной строке такая команда работает

(setq ss1 (textbox ss)) и следующая за ней
(setq ss2 (car (cadr (ss1))))
а вставляю в ЛИСП и нифига пишет на это (setq ss1 (textbox ss)) nill
Подскажите что надо сделать??


Цитата:
(setq s (getstring (strcat "\nКЛЕММА <Выс " (rtos hg)"; Сж " (rtos scal)">:")))
(print s)
(setq ss (entget (entlast)))
(print ss)
(setq ss1 (textbox ss))
(print ss1)
(setq ss2 (car (cadr (ss1))))
(print ss2)

(setq ss3 10)
(setq deltaH (+ (/ hg 2) 1))
(setq deltaLLeft (+ (/ ss3 2) 2.5))
(setq deltaLRight (+ (/ ss3 2) 2.5))
sersgey_r вне форума  
 
Непрочитано 26.06.2007, 10:13
#15
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Надо бы для полноты знать что возвращает (entlast)
Вы VLisp отладчиком пользоваться научились? Это лучший помошник!
Евгений А. вне форума  
 
Непрочитано 26.06.2007, 10:20
#16
Кулик Алексей aka kpblc
Moderator

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


> Евгений А. : тема продолжилась на http://dwg.ru/forum/viewtopic.php?p=154834#154834
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2007, 10:27
#17
sersgey_r

Учусь писать прогри на лиспе
 
Регистрация: 15.06.2007
Таганрог
Сообщений: 8


Цитата:
Сообщение от Евгений А.
Надо бы для полноты знать что возвращает (entlast)
Вы VLisp отладчиком пользоваться научились? Это лучший помошник!
я стараюсь . а с проблемой данной вроде бы разобрался, но теперь стоит проблема удаления текста чертежа. Текст был введен и должен быть удален. вот не знаю как это сделать
Цитата:
(setq sp (list 10.0 10.0))
(setq ss3 s)
(command "TEXT" "_J" "_M" sp 3.0 0 ss3)
sersgey_r вне форума  
 
Непрочитано 26.06.2007, 10:39
#18
Кулик Алексей aka kpblc
Moderator

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


Так, sersgey_r, хорош скакать по темам! Давай уж определись - где продолжается разговор - здесь или в параллельной теме.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2007, 16:36
#19
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Кулик Алексей aka kpblc
> Евгений А. : тема продолжилась на http://dwg.ru/forum/viewtopic.php?p=154834#154834
Специально не смотрел эту тему из-за названия - Я в ЛИПАХ и прочих деревьях ничем помочь не могу!
Евгений А. вне форума  
 
Непрочитано 26.06.2007, 16:47
#20
Кулик Алексей aka kpblc
Moderator

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


А я даже и не заметил. Все подряд посты править я точно не буду
Кстати, sersgey_r, это намек
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2007, 17:15
#21
sersgey_r

Учусь писать прогри на лиспе
 
Регистрация: 15.06.2007
Таганрог
Сообщений: 8


Цитата:
Сообщение от Кулик Алексей aka kpblc
А я даже и не заметил. Все подряд посты править я точно не буду
Кстати, sersgey_r, это намек
это быстрые пальцы и плохое внимание
а потом прикольно так )
пусть думают что хотят
но за помощь спасибо, очень помог
sersgey_r вне форума  
 
Непрочитано 26.06.2007, 17:59
#22
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


забавная ориентация у вас в профиле
Цитата:
Учусь писать прогри на лиспе
это про грибы или про быстрые грипсы?
про удаление текста можно сделать так:
сразу после (command "TEXT" "_J" "_M" sp 3.0 0 ss3)
написать (setq doomed_text_ename (entlast))
после чего в нужном месте программы (entdel doomed_text_ename)
Zouss вне форума  
 
Непрочитано 27.06.2007, 07:21
#23
sersgey_r

Учусь писать прогри на лиспе
 
Регистрация: 15.06.2007
Таганрог
Сообщений: 8


Цитата:
Сообщение от Zouss
забавная ориентация у вас в профиле
Цитата:
Учусь писать прогри на лиспе
это про грибы или про быстрые грипсы?
про удаление текста можно сделать так:
сразу после (command "TEXT" "_J" "_M" sp 3.0 0 ss3)
написать (setq doomed_text_ename (entlast))
после чего в нужном месте программы (entdel doomed_text_ename)
Хорошо когда есть люди умные вот подскажут, поддержат, так и писать на лиспе писать не страшно станет )
sersgey_r вне форума  
 
Непрочитано 27.06.2008, 18:20
#24
Говард Тич

конструктор
 
Регистрация: 18.07.2007
Москва
Сообщений: 161


сделал макрос для рисования линии на определенном слое
^C^C(setq CL (Getvar "Clayer"));_-la;_set;Wall;^C;;;^C^C_line;\\;(setvar "clayer" CL)-все прекрасно работает

Пробую такое же сделать в лисп-файле-не получается
(defun C:fw ()
(setq CL (Getvar "Clayer"))
(command "_layer" "_set" "Wall" "")
(command "_line")
(setvar "clayer" CL)
)

Слой не нужно создавать.
Автокад 2004
Говард Тич вне форума  
 
Непрочитано 27.06.2008, 19:39
#25
stroygeodezia


 
Регистрация: 03.06.2008
Сообщений: 43


У Вас в макросе стоят два "слэша" "\\", это пауза для ввода данных.
Попробуйте добавить две "pause" в (command "_line")

Пробуйте!!!
stroygeodezia вне форума  
 
Непрочитано 11.02.2019, 08:38
#26
Зодчий1989


 
Регистрация: 09.01.2013
Сообщений: 127


Добрый день всем. Дабы не плодить темы прошу помощи тут.
Необходим Лисп для облегчения жизни архитекторов.
Исходные данные:
1) Полилинии и площади проставленные в них полями ACADa.
2) Блок с атрибутами для вписывания жилой и общей площади.
Задача.
Просуммировать поля уже непосредственно в блоке с последующей связью и изменением значений автоматически.

Как я это вижу.
1) Запуск LISPa.
2) Выбор блока, в который будет суммироваться площадь\ Enter
3) Выбор площадей жилой части помещения\ Enter
4) Выбор площадей(оставшихся) нежилой части\ Enter
5) Завершение работы LISPa с записью в атрибуты блока сумм площадей.
P.S. еще бы всем выделенным объектам назначать цвет индивидуальный, дабы видеть связь. или другой вид визуального контроля

Конечно же не за спасибо.

ACAD 2016. Пример.dwg

Последний раз редактировалось Зодчий1989, 11.02.2019 в 08:59.
Зодчий1989 вне форума  
 
Непрочитано 11.02.2019, 08:47
| 1 #27
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616


Цитата:
Сообщение от Зодчий1989 Посмотреть сообщение
Необходим Лисп для облегчения жизни архитекторов
А если точнее, то Вы просите за спасибо написать Вам программу для автоматизации составления квартирографии и эта программа нужна не Вам, а архитекторам и явно нужна не для развлечения, а для зарабатывания денег... Я все правильно понял?
С такой постановкой задачи, вот прямо очень хочется отправить Вас сюда: http://forum.dwg.ru/forumdisplay.php?f=33 , если я ошибся, то показывайте свой код и поясняйте, что именно у Вас не получается и в чем.

ЗЫ.
Рекомендую чистить файлы, прежде чем выкладывать их в доступ, факт наличия штампов и подписей в публичном файле, не выглядит достаточно обоснованным...
Boxa вне форума  
 
Непрочитано 11.02.2019, 09:00
#28
Зодчий1989


 
Регистрация: 09.01.2013
Сообщений: 127


Спасибо.

Цитата:
Сообщение от Boxa Посмотреть сообщение
вот прямо очень хочется отправить Вас сюда
Обязательно схожу туда.
Зодчий1989 вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Товарищи! помогите с лиспом