Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 77
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12 1 |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 2049832
 
Непрочитано 27.05.2011, 08:46
#1521
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


Честно Говоря не совсем понятно. "Список команды" - как то в голове не укладывается! Тогда подскажите а вставка на чертеж текста значения какой то переменной тоже будет таким методом? Если да то как?
Ubivec81 вне форума  
 
Непрочитано 27.05.2011, 09:19
#1522
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Для вставки текста значения нужно будет само значение перевести в строку, смотри команды itoa, rtos
Типа так:
(command "_text" точка_вставки_текста "высота_текста" "угол_поворота_текста" (rtos text))
где вместо слов в кавычках подставляешь нужные величины - "100" например для высоты текста, "0" - 0 градусов - угол поворота текста, точка вставки может быть получена так: (getpoint "Укажите точку вставки текста")
alex8888 вне форума  
 
Непрочитано 27.05.2011, 09:28
#1523
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


(command "_.dtext" (list (+ (* (car (car r)) 10) 1.25) -85) 2.5 90 (rtos x 2 0))
не работает. Она просит вводить данные вручную хотя отдельно (rtos x 2 0) выдает правельно. есть ощущение что все это далжно как то делаться через entget и entlast.
Ubivec81 вне форума  
 
Непрочитано 27.05.2011, 10:27
1 | #1524
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Возьми просто команду _text
Она сработает

Вместо (car (car r)) можно (caar r) использовать - эффект тот же

Последний раз редактировалось alex8888, 27.05.2011 в 10:35.
alex8888 вне форума  
 
Непрочитано 27.05.2011, 11:00
#1525
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


Да заработала. А в чем разница между dtext и text? вроде все точно так же рисуется...
Ubivec81 вне форума  
 
Непрочитано 27.05.2011, 11:39
#1526
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


По dtext смотри тут:
http://www.itstan.ru/autocad/sozdani...nde-dtext.html
Как я понял dtext -динамический текст, который может создавать многострочные тексты, но не как mtext. А простой text - он и в Африке текст. Просто примитив типа текст.
alex8888 вне форума  
 
Непрочитано 30.05.2011, 13:17
#1527
mix_75


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


А мне тоже помогите, плиз.
mix_75 вне форума  
 
Непрочитано 30.05.2011, 13:19
#1528
Лиспер


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


В чем помочь-то?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 30.05.2011, 13:30
#1529
mix_75


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


Цитата:
Сообщение от mix_75 Посмотреть сообщение
Здравствуйте! Я профан в ЛИСПЕ. У меня такая проблема: имеются два блока, в виде квадратиков с торчащими навстречу друг другу пририсованными каждому квадратику отрезками. Я рисую линию, либо полилинию от одного конца отрезка первого квадрата к концу отрезка второго. Далее, двигаю один из блоков в вертикальном направлении, причем выделяя его мышкой. Линия должна тянуться вслед блоку. Это для начала. Более сложная задача - линия должна тянуться в режиме "ortho", и "ломаться" с радиусами сама. Причем, изначально вертикальные координаты концов отрезков могут не совпадать.
Просьба: подскажите, пожалуйста, набор и последовательность функций, которыми мне гипотетически надо владеть для этой задачи. Код, пожалуйста, не пишите.
вот в этом. Пост #1496
mix_75 вне форума  
 
Непрочитано 30.05.2011, 13:38
#1530
Лиспер


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


На лиспе замучаешься делать. Бери в руки ElectiCS, или AutoCAD Electrical, или Visio - и вперед. В "чистом" AutoCAD подобное реализовать ИМХО будет весьма трудно.
А так - смотри объектные реакторы, расширенные данные или словари, командные реакторы и т.п.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 31.05.2011, 11:29
#1531
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


А вот еще вопрос с которым никак не могу разобраться!
Код:
[Выделить все]
 

(initget (+ 2 4))
              (setq X (getreal"\nПикет<Пустой ввод конец ввода>-"))
          
          (if (and (/= x nil) (= (car (member x piket)) nil)) (setq piket (cons x piket))
                   ;Если X не равен nil и его значения нет в списке piket то добавить значение X в список PIKET
          );_End IF
          (if (= (car (member x piket)) nil) (***); Если значение X есть в списке PIKET то нужно (***) повторить ввод занова
           )
А вот как это реализовать никак не пойму!!! Прошу помочь!
Ubivec81 вне форума  
 
Непрочитано 31.05.2011, 12:34
1 | #1532
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Код:
[Выделить все]
 
(while (setq X (getreal"\nПикет<Пустой ввод конец ввода>-"))
    (if (not (member x piket))
      (setq piket (cons x piket))
      (princ "Этот пикет уже задан. Повторите ввод!!!")
      )
    )
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 31.05.2011, 13:27
1 | #1533
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


TararykovDG, INITGET потерял
Код:
[Выделить все]
 (while (and (setq X (progn (initget 6 "Выход _Exit")
               (getreal "\nПикет[Выход]:")
            ) ;_ end of progn
        ) ;_ end of setq
        (/= X "Exit")
       ) ;_ end of and
  (if (not (member x piket))
    (setq piket (cons x piket))
    (princ "Этот пикет уже задан. Повторите ввод!!!")
  ) ;_ end of if
) ;_ end of while
Do$ вне форума  
 
Непрочитано 31.05.2011, 13:46
#1534
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


Код:
[Выделить все]
 (while (/= x nil)
	          (setq X (getreal"\nПикет<Пустой ввод: окончание>-"))
		  
                 (while (/= (member x piket) nil)                                 ;Контроль
		            (princ "Этот пикет уже задан. Повторите ввод!!!")     ;ввода
		            (setq X (getreal"\nПикет<Пустой ввод: окончание>-"))  ;
		                                                                 ;
		 );Конец WHILE                                                    ;
		 (if (and (/= x nil) (= (member x piket) nil))                    ;дублирующих
		     (setq piket (cons x piket))                                  ;пикетов
		  );конец IF
Вот что у меня получилось на основе ваших подсказок. ОГРОМНОЕ спасибо!
Ubivec81 вне форума  
 
Непрочитано 31.05.2011, 14:04
#1535
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Жуть
Do$ вне форума  
 
Непрочитано 31.05.2011, 14:05
#1536
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


Почему жуть? может что подскажите?
Ubivec81 вне форума  
 
Непрочитано 31.05.2011, 14:25
#1537
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Do$ Посмотреть сообщение
TararykovDG, INITGET потерял
Do$, спасибо за верное замечание


Цитата:
Сообщение от Ubivec81
Почему жуть? может что подскажите?
Ubivec81, просто раpбери и стравни свой код и код Do$. Задача-то элементарная, я понимаю, что Ты наверное еще не особо усвоил лисп (впрочем как и я), но все-таки посмотри чем оличается Твой вариант решения от других (начни хотябы с того что у Тебя два цикла while, а у других он один + не нужные проверки на равенсто nil и т. д. и т. п.)
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 31.05.2011, 16:45
#1538
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
спасибо за верное замечание
Неверное замечание! Do$, вот если б вы добавили единичку к инитгету... тогда было б верное...
gomer вне форума  
 
Непрочитано 31.05.2011, 16:57
#1539
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от gomer Посмотреть сообщение
если б вы добавили единичку к инитгету...


gomer я не понял, зачем единица в initget, наоборот нужно оставить возможность пустого ввода, по нему и проиходит выход иначе цикл будет быконечным.
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 31.05.2011, 18:08
#1540
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
иначе цикл будет быконечным
вот тогда и нужно выводить выход в опции как у Do$, но это моветон в программировании интерфейсов... По хорошему... сначала (при выборе первого пикета) нужно давать юзеру возможность <Выход>а, при выборе последующих пикетов дать возможность <Завершить> выбор
как-то так:
Код:
[Выделить все]
 (defun GetPiketList ( / piket piket_list)
  (initget (+ 2 6))
  (if (setq piket (getreal "\nУкажите пикет <Выход>: "))
	(progn
	  (setq piket_list (cons piket '()))
	  (while (setq piket (progn (initget (+ 2 6))
							(getreal "\nУкажите пикет <Завершить>: ")))
		(if (member piket piket_list)
		  (princ "\nПикет уже задан!")
		  (setq piket_list (cons piket piket_list)))))
	(princ "\nНе выбрано ни одного пикета!"))
  piket_list)
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46