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

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 1966003
 
Непрочитано 17.12.2019, 13:31
1 | #3881
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (setq a '((1 2) (3 5) (6 7) (3 4))
      b '((5 6))
      c '((-5 -7 -15) (20 10 0))
      ) ;_ end of setq

(apply (function mapcar) (cons (function min) (append a b c)))
(apply (function mapcar) (cons (function max) (append a b c)))
----- добавлено через 36 сек. -----
так?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.12.2019, 14:11
1 | #3882
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Код:
[Выделить все]
 
(caddar (vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (< (caddr m1) (caddr m2)))))
(caddar(vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (> (caddr m1) (caddr m2)))))
koMon вне форума  
 
Непрочитано 17.12.2019, 14:27
#3883
hroost

Проектирование
 
Регистрация: 01.09.2009
Сообщений: 19


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
 (setq a '((1 2) (3 5) (6 7) (3 4))
      b '((5 6))
      c '((-5 -7 -15) (20 10 0))
      ) ;_ end of setq

(apply (function mapcar) (cons (function min) (append a b c)))
(apply (function mapcar) (cons (function max) (append a b c)))
----- добавлено через 36 сек. -----
так?
Эх, что-то не сработало,
Код:
[Выделить все]
 (setq ptLst1_min(apply (function mapcar) (cons (function min) (append ptLst1))))
Цитата:
Сообщение от koMon Посмотреть сообщение
Код:
[Выделить все]
 
(caddar (vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (< (caddr m1) (caddr m2)))))
(caddar(vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (> (caddr m1) (caddr m2)))))
А вот здесь есть какой-то результат, но похоже не то.
(setq ptLst1_min (caddar (vl-sort ptLst1 '(lambda (m1 m2) (< (caddr m1) (caddr m2)))))).

Я похоже в своем запросе неверно выразился, min/max это либо минимум/максимум среди всех Х (Х1, Х2...Хn) или У (У1, У2...Уn) или Z (Z1, Z2...Zn) в общем случае. Список точечных пар (ptLst1) содержит координаты полилинии, т.е. цель вычислить min/max точку

Последний раз редактировалось hroost, 17.12.2019 в 14:43.
hroost вне форума  
 
Непрочитано 17.12.2019, 14:35
1 | 1 #3884
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


min X
Код:
[Выделить все]
 
(apply 'min (mapcar 'car '(( 1 1 3) (2 2 4) (3 3 5) (4 4 10))))
min Y
Код:
[Выделить все]
 
(apply 'min (mapcar 'cadr '(( 1 1 3) (2 2 4) (3 3 5) (4 4 10))))
min Z
Код:
[Выделить все]
 
(apply 'min (mapcar 'caddr '(( 1 1 3) (2 2 4) (3 3 5) (4 4 10))))
точка с мин X
Код:
[Выделить все]
 (car (vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (< (car m1) (car m2)))))
точка с мин Y
Код:
[Выделить все]
 (car (vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (< (cadr m1) (cadr m2)))))
точка с мин Z
Код:
[Выделить все]
 (car (vl-sort '(( 1 1 3) (2 2 4) (3 3 5)) '(lambda (m1 m2) (< (caddr m1) (caddr m2)))))

Последний раз редактировалось koMon, 17.12.2019 в 14:49.
koMon вне форума  
 
Непрочитано 17.12.2019, 14:45
#3885
hroost

Проектирование
 
Регистрация: 01.09.2009
Сообщений: 19


Большое спасибо! Сработало
Код:
[Выделить все]
 (setq ptLst1_Y_min (apply 'min (mapcar 'cadr ptLst1)))

Последний раз редактировалось hroost, 17.12.2019 в 14:53.
hroost вне форума  
 
Непрочитано 17.12.2019, 14:53
1 | 1 #3886
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


см. выше
koMon вне форума  
 
Непрочитано 17.12.2019, 15:12
1 | 1 #3887
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
 (setq a '((1 2) (3 5) (6 7) (3 4))
      b '((5 6))
      c '((-5 -7 -15) (20 10 0))
      ) ;_ end of setq

(apply (function mapcar) (cons (function min) (append a b c)))
(apply (function mapcar) (cons (function max) (append a b c)))
----- добавлено через 36 сек. -----
так?
Код:
[Выделить все]
 (setq lst_mi (apply (function mapcar) (cons (function min) (append a b c)))
         lst_ma (apply (function mapcar) (cons (function max) (append a b c))))
(car lst_mi) ; min X
(cadr lst_mi) ; min Y
(caddr lst_mi) ; min Z
Аналогично с маскимальными значениями.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.01.2020, 12:50
#3888
mindchamber


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


Лисп AreaText. Подскажите что нужно подредактировать чтобы сделать точность до 2х знаков после запятой?
edit: и как можно добавить приписку "м2"?

Код:
[Выделить все]
 ;;; AreaText.LSP ver 3.0
;;; Command name is AT
;;; Select a polyline and where to place the text
;;; Sample result: 2888.89 SQ. FT.
;;; As this is a FIELD it is updated based on the FIELDEVAL
;;; or the settings found in the OPTIONS dialog box

;;; By Jimmy Bergmark
;;; Copyright (C) 2007-2010 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: [email protected]
;;; 2007-09-05 - First release
;;; 2009-08-02 - Updated to work in both modelspace and paperspace
;;; 2010-10-29 - Updated to work also on 64-bit AutoCAD

;;; Uses TEXTSIZE for the text height

(defun Get-ObjectIDx64 (obj / util)
  (setq util (vla-get-Utility (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
  (if (= (type obj) 'VLA-OBJECT)
    (if (> (vl-string-search "x64" (getvar "platform")) 0)
      (vlax-invoke-method util "GetObjectIdString" obj :vlax-False)
      (rtos (vla-get-objectid obj) 2 0)
    )
  )
)

(defun c:AT (/ entObject entObjectID InsertionPoint ad)
  (vl-load-com)
  (setq entObject (vlax-ename->vla-object(car (entsel)))
        entObjectID (Get-ObjectIDx64 entObject)
        InsertionPoint (vlax-3D-Point (getpoint "Select point: "))
        ad (vla-get-ActiveDocument (vlax-get-acad-object))
  )
  (vla-addMText (if (= 1 (vla-get-activespace ad))
    (vla-get-modelspace ad)
    (if (= (vla-get-mspace ad) :vlax-true)
      (vla-get-modelspace ad)
      (vla-get-paperspace ad)
    )
  )
  InsertionPoint 0.0 (strcat
  "%<\\AcObjProp Object(%<\\_ObjId "
  entObjectID
  ">%).Area \\f \"%lu2\">%"
  ))
)
mindchamber вне форума  
 
Непрочитано 15.01.2020, 12:57
1 | #3889
Кулик Алексей aka kpblc
Moderator

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


Ну сделай руками, а потом посмотри код поля и форматирование, делов-то:
Код:
[Выделить все]
 ;;; AreaText.LSP ver 3.0
;;; Command name is AT
;;; Select a polyline and where to place the text
;;; Sample result: 2888.89 SQ. FT.
;;; As this is a FIELD it is updated based on the FIELDEVAL
;;; or the settings found in the OPTIONS dialog box

;;; By Jimmy Bergmark
;;; Copyright (C) 2007-2010 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: [email protected]
;;; 2007-09-05 - First release
;;; 2009-08-02 - Updated to work in both modelspace and paperspace
;;; 2010-10-29 - Updated to work also on 64-bit AutoCAD

;;; Uses TEXTSIZE for the text height

(defun get-objectidx64 (obj / util)
  (setq util (vla-get-utility (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (type obj) 'ename)
    (setq obj (vlax-ename->vla-object obj))
    ) ;_ end of if
  (if (= (type obj) 'vla-object)
    (if (> (vl-string-search "x64" (getvar "platform")) 0)
      (vlax-invoke-method util "GetObjectIdString" obj :vlax-false)
      (rtos (vla-get-objectid obj) 2 0)
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of defun

(defun c:at (/ entobject entobjectid insertionpoint ad)
  (vl-load-com)
  (setq entobject      (vlax-ename->vla-object (car (entsel)))
        entobjectid    (get-objectidx64 entobject)
        insertionpoint (vlax-3d-point (getpoint "Select point: "))
        ad             (vla-get-activedocument (vlax-get-acad-object))
        ) ;_ end of setq
  (vla-addmtext
    (if (= 1 (vla-get-activespace ad))
      (vla-get-modelspace ad)
      (if (= (vla-get-mspace ad) :vlax-true)
        (vla-get-modelspace ad)
        (vla-get-paperspace ad)
        ) ;_ end of if
      ) ;_ end of if
    insertionpoint
    0.0
    (strcat "%<\\AcObjProp Object(%<\\_ObjId " entobjectid ">%).Area \\f \"%lu2%pr2\">%  м{\\H0.7x;\\S2^;}")
    ) ;_ end of vla-addMText
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.01.2020, 10:34
#3890
Nordek


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


Добрый! А я правильно понял, в эту ветку можно кидать свои "тупые" вопросы по теме и есть вероятность, что сразу не пошлют?
На случай если это так, мне нужен готовый рабочий кусок лисп функции, прямо целиком, который выделяет последний созданный в автокаде элемент, например полилинию, прямо выделяет и подсвечивает все ее вершинки и прочее, т.е. полная программная эмуляция выделения элемента мышкой, но без мыши.
Nordek вне форума  
 
Непрочитано 17.01.2020, 10:53
#3891
Кулик Алексей aka kpblc
Moderator

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


Создаешь набор, а потом в него добавляешь entlast. Потом sssetfirst. Не без недостатков подход, конечно, но как вариант...
Ну или (vl-cmdf "_.select" "_last" "")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.01.2020, 12:25
#3892
Nordek


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


Если по первой части, то мозга не хватит самому написать, увы. По второму варианту, делает не выделение, а подсвечивает хайлайт так называемый, на панели свойств пишет ничего не выбрано...

----- добавлено через ~2 мин. -----
Т.е. на Лиспе нет стандартного "getlast" какого-нибудь? Может в чем то ином можно реализовать?
Nordek вне форума  
 
Непрочитано 17.01.2020, 12:34
#3893
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Nordek Посмотреть сообщение
Т.е. на Лиспе нет стандартного "getlast" какого-нибудь? Может в чем то ином можно реализовать?
как вариант
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 17.01.2020, 12:35
#3894
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от Nordek Посмотреть сообщение
готовый рабочий кусок лисп функции, прямо целиком, который выделяет последний созданный в автокаде элемент, например полилинию, прямо выделяет и подсвечивает все ее вершинки и прочее
Код:
[Выделить все]
 (sssetfirst nil (ssadd (entlast)))
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 17.01.2020, 12:44
#3895
Nordek


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


Спасибо всем! Буду попробовать.
Nordek вне форума  
 
Непрочитано 17.01.2020, 12:48
1 | #3896
skkkk


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


Цитата:
Сообщение от Nordek Посмотреть сообщение
По второму варианту, делает не выделение, а подсвечивает хайлайт так называемый
Подстветить:
Код:
[Выделить все]
(redraw (entlast) 3)
или
Код:
[Выделить все]
(vla-Highlight (vlax-ename->vla-object (entlast)) :vlax-true)
Снять подсветку:
Код:
[Выделить все]
(redraw (entlast) 4)
или
Код:
[Выделить все]
(vla-Highlight (vlax-ename->vla-object (entlast)) :vlax-false)
skkkk вне форума  
 
Непрочитано 17.01.2020, 12:48
#3897
Nordek


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


Ciril, кусок рабочий, спасибо, выручил!!
Nordek вне форума  
 
Непрочитано 17.01.2020, 13:00
#3898
skkkk


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


Не сразу понял, что значит "по второму варианту", подумал, что это задача такая стоит - подсветить. Ну пусть уж тогда будет, рядом с "выделить".
skkkk вне форума  
 
Непрочитано 24.01.2020, 14:11
#3899
mr.frai1992


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


перенес вопрос в отдельную тему

Последний раз редактировалось mr.frai1992, 25.01.2020 в 10:10. Причина: перенес вопрос в отдельную тему
mr.frai1992 вне форума  
 
Непрочитано 11.04.2020, 18:38
#3900
dik-son

Kazan
 
Регистрация: 01.04.2009
Сообщений: 530


Доброго дня.
Подскажите, пож-та, что надо поправить в коде, чтобы пошел на 2020кад?
Это лиспа для трехмерного поворота текста вокруг своей точки. Надо поправить схемы от расчетчика с усилиями в ферме.
Возможно есть другие решения?

Вопрос снят, нашел рабочий лисп
Вложения
Тип файла: rar povorot.rar (1.8 Кб, 5 просмотров)

Последний раз редактировалось dik-son, 11.04.2020 в 22:15.
dik-son вне форума  
Ответ
Вернуться   Форум 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