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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как построить множество точек через автолисп

Как построить множество точек через автолисп

Ответ
Поиск в этой теме
Непрочитано 08.09.2014, 13:19 #1
Как построить множество точек через автолисп
kurstep
 
Регистрация: 27.01.2012
Сообщений: 242

Возникла проблема при построении множество точек через автолисп...
Код:
[Выделить все]
 (command "_point" '(0 0 0))
- одна точка строится нормально, но если хочу построить несколько строит только если постоянно писать "point" перед координатой
Код:
[Выделить все]
 (command "_point" '(0 0 0) "_point" '(0 10 10) "_point" '(0 30 10) "_point" '(0 50 10) 
) ... есть ли более красивый способ без повторений команд а просто через список координат?
Просмотров: 2667
 
Непрочитано 08.09.2014, 13:33
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,108


entmake
trir вне форума  
 
Непрочитано 08.09.2014, 13:48
#3
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2013/12/19/comman...utre-troubles/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.09.2014, 14:01
#4
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от kurstep Посмотреть сообщение
а просто через список координат?
Код:
[Выделить все]
(setq sps '((0 0 0) (10 0 0) (20 0 0) (30 0 0))
      i	  0
) ;_ конец setq
(setvar "osmode" 0)
(repeat	(length sps)
  (command "_point" (setq el (nth i sps)))
  (setq i (1+ i))
) ;_ конец repeat
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 08.09.2014, 14:12
#5
Кулик Алексей aka kpblc
Moderator

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


Alan, тебе тоже #3
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.09.2014, 15:26
#6
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Alan, тебе тоже #3
Вроде учёл...
см. (setvar "osmode" 0)
проверки всякие и запоминания osmode не делал.
просто показал как repeat'ом пройтись по списку, т.е. ответил на вопрос.
Можно и другими способами (entmake и т.п.)...
но ТС работает пока с command
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 08.09.2014, 17:42
#7
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Alan Посмотреть сообщение
Вроде учёл...
см. (setvar "osmode" 0)
Побуду старым брюзгой: а восстанавливать хто будет?
Цитата:
Сообщение от Alan Посмотреть сообщение
показал как repeat'ом пройтись по списку, т.е. ответил на вопрос.
По-моему, проще для понимания будет использование foreach. На небольших списках разница минимальна, а вот на больших...
Код:
[Выделить все]
 (setq lst '((0. 0. 0.)
            (10. 20. 25.3)
            (32.65 45.6 0.)
            (65.8 100. 0.)
            (656.45 1. 32.)
            (111715.0 78813.9)
            (111719.0 78827.2)
            (111731.0 78823.8)
            (111757.0 78814.8)
            (111782.0 78803.4)
            (111806.0 78789.6)
            (111826.0 78775.8)
            (111907.0 78713.8)
            (111989.0 78651.8)
            (112024.0 78627.6)
            (112061.0 78607.6)
            (112105.0 78589.9)
            (112142.0 78579.3)
            (112284.0 78545.3)
            (112379.0 78521.4)
            (112473.0 78495.2)
            (112808.0 78397.8)
            (112885.0 78375.2)
            (112925.0 78363.6)
            (112994.0 78342.8)
            (113053.0 78323.8)
            (113122.0 78300.7)
            (113190.0 78276.4)
            (113337.0 78222.2)
            (113425.0 78189.5)
            (113463.0 78194.6)
            (113465.0 78196.0)
            (113472.0 78201.1)
            (113478.0 78207.7)
            (113521.0 78251.3)
            (113526.0 78256.0)
            (113526.0 78256.1)
            (113924.0 78658.3)
            (113969.0 78693.2)
            (114142.0 78820.7)
            (114159.0 78842.6)
            (114173.0 78853.1)
            (114149.0 78810.2)
            (114132.0 78797.7)
            (113936.0 78653.1)
            (113540.0 78252.0)
            (113536.0 78253.0)
            (113536.0 78253.0)
            (113527.0 78243.8)
            (113483.0 78199.3)
            (113477.0 78192.9)
            (113470.0 78186.9)
            (113462.0 78182.3)
            (113453.0 78179.2)
            (113444.0 78177.5)
            (113434.0 78177.5)
            (113424.0 78179.5)
            (113412.0 78183.4)
            (113306.0 78222.5)
            (113200.0 78261.6)
            (113172.0 78272.0)
            (113108.0 78294.6)
            (113055.0 78312.7)
            (113000.0 78330.4)
            (112936.0 78349.7)
            (112908.0 78358.1)
            (112882.0 78365.4)
            (112805.0 78388.1)
            (112655.0 78431.6)
            (112506.0 78475.1)
            (112467.0 78486.5)
            (112361.0 78515.6)
            (112310.0 78528.7)
            (112255.0 78541.8)
            (112181.0 78559.1)
            (112149.0 78566.8)
            (112116.0 78575.7)
            (112087.0 78585.3)
            (112059.0 78597.1)
            (112036.0 78609.2)
            (112012.0 78623.3)
            (111986.0 78641.8)
            (111952.0 78667.0)
            (111855.0 78740.9)
            (111824.0 78764.1)
            (111806.0 78776.2)
            (111789.0 78785.6)
            (111779.0 78791.0)
            (111765.0 78797.2)
            (111748.0 78803.3)
            (111732.0 78808.8)
            )
      ) ;_ end of setq

(defun cmd-repeat (/ i osmode el)
  (setq osmode (getvar "osmode")
        i      0
        ) ;_ end of setq
  (setvar "osmode" 0)
  (repeat (length sps)
    (command "_.point" (setq el (nth i lst)))
    (setq i (1+ i))
    ) ;_ êîíåö repeat
  (setvar "osmode" osmode)
  ) ;_ end of defun

(defun cmd-foreach (/ osmode)
  (setq osmode (getvar "osmode"))
  (foreach item lst
    (command "_.point" item)
    ) ;_ end of foreach
  (setvar "osmode" osmode)
  ) ;_ end of defun

(defun entmakex-repeat (/ i)
  (setq i 0)
  (repeat (length sps)
    (entmakex (list '(0 . "POINT") (cons 10 (nth i lst))))
    (setq i (1+ i))
    ) ;_ êîíåö repeat
  ) ;_ end of defun

(defun entmakex-foreach ()
  (foreach item lst
    (entmakex (list '(0 . "POINT") (cons 10 item)))
    ) ;_ end of foreach
  ) ;_ end of defun
И результаты тестирования некомпилированных функций:
Код:
[Выделить все]
_$ (BENCHMARK '(ENTMAKEX-FOREACH ENTMAKEX-REPEAT CMD-REPEAT CMD-FOREACH))
Benchmarking .......................Elapsed milliseconds / relative speed for 1048576 iteration(s):

    ENTMAKEX-FOREACH.....1233 / 1.32 <fastest>
    ENTMAKEX-REPEAT......1388 / 1.17
    CMD-REPEAT...........1622 / 1
    CMD-FOREACH..........1623 / 1 <slowest>
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.09.2014, 01:55
#8
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Код:
[Выделить все]
 (defun entmakex-mapcar (/)
(mapcar (function (lambda (x) (entmakex (list '(0 . "POINT") (cons 10 x))) )) lst)  
) ;_ end of defun
Offtop: Алексей, а не поделишься кодом benchmark?
__________________
Мне не нужно сделать за меня. Если я что-то ищу, то пути решения.
Kirill_Ja вне форума  
 
Непрочитано 09.09.2014, 08:54
#9
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
а не поделишься кодом benchmark?
Мопед не мой: http://autolisp.ru/2009/09/20/execution-speed-check/
P.S. mapcar я специально не использовал: насколько я понял, результаты выполнения нигде хранить не надо. Соответственно зачем тратить память?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как построить множество точек через автолисп



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение высотных отметок ряда точек (Z) через связь с таблицей Excel. bgrade AutoCAD 6 09.08.2012 09:30
построение линии через имеющийся список точек Composter Программирование 18 13.02.2012 10:43
Формат данных в таблице автокад через автолисп. Как это делается? Uduzr LISP 2 22.04.2010 16:11
кто работал с Statistica 5.0-6.0?Как через формулу построить 3д график //DENS// Прочее. Программное обеспечение 1 23.10.2009 22:23
Ввод точек через вставку даних из буфера VOVAMAT AutoCAD 1 06.11.2005 13:30