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

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

Как ввести точки циклом?

Ответ
Поиск в этой теме
Непрочитано 07.07.2019, 23:39 #1
Как ввести точки циклом?
i-593
 
Регистрация: 07.07.2019
Сообщений: 8

Всем привет, на LISP программирую примерно дней 7.
И появился вопрос.

Например я задаю 4 точки по углам прямоугольника, делаю это командой
Код:
[Выделить все]
 (setq g1 (getpoint "\nУкажите первый угол: "))
и т.д.
Так же все x и y я сохраняю в такие переменные вот так:
Код:
[Выделить все]
 (setq x1 (nth 0 g1))
(setq y1 (nth 1 g1))
(setq z1 (nth 2 g1))

Вопрос, когда я программировал на Delphi там это всё легко и просто через цикл, подмену цифры используя i.

Тут же есть оператор:

Код:
[Выделить все]
 (foreach <имя> <список> <выражение>...)
Эта функция, проходя по <списку>, присваивает каждому элементу <имя> и вычисляет каждое <выражение> для каждого элемента в списке. Может быть задано любое число <выражений>. FOREACH выдает результат последнего, вычисленного <выражения>. Например:
(foreach n '(a b c) (print n))
эквивалентно:
(print a)
(print b)
(print c)
кроме того, что FOREACH возвращает результат только последнего вычисленного выражения.


Естественно задавая так все точки, он запоминает только последнюю. Как мне сделать корректно ?

Вот у меня начало проги получается:

Код:
[Выделить все]
 (setq g1 (getpoint "\nУкажите первый угол: ")) ; запрос координат угла1
(setq x1 (nth 0 g1))
(setq y1 (nth 1 g1))
(setq z1 (nth 2 g1))
(setq g2 (getpoint "\nУкажите второй угор : ")) ; угол2
(setq x2 (nth 0 g2))
(setq y2 (nth 1 g2))
(setq z2 (nth 2 g2))
(setq g3 (getpoint "\nУкажите третий угол : ")) ; угол3
(setq x3 (nth 0 g3))
(setq y3 (nth 1 g3))
(setq z3 (nth 2 g3))
(setq g4 (getpoint "\nУкажите четвёртый угол : ")) ; угол4
(setq x4 (nth 0 g4))
(setq y4 (nth 1 g4))
(setq z4 (nth 2 g4))

Поидее можно как-то в 4 строчки это уложить, может в 5-6.

+ Можно как-то обращаться к переменной аля
(setq x'n (выражение))
где n номер элемента? И как тогда писать? setq xn - будет не верная переменная, мне нужно x1,x2,x3,x4 и через цикл. Или это никак не сделать?

Последний раз редактировалось i-593, 08.07.2019 в 22:58.
Просмотров: 1734
 
Непрочитано 08.07.2019, 07:57
#2
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от i-593 Посмотреть сообщение
Как мне сделать корректно ?
Понять, что lisp ориентирован на обработку списков, и этим воспользоваться.
Код:
[Выделить все]
 (defun t1 (/ pt lst)
  (while (not (vl-catch-all-error-p
                (vl-catch-all-apply (function (lambda ()
                                                (setq pt (if lst
                                                           (getpoint (car lst) "\nУкажите точку <Отмена> : ")
                                                           (getpoint "\nВведите первую точку <Отмена> : ")
                                                           ) ;_ end of if
                                                      ) ;_ end of setq
                                                ) ;_ end of lambda
                                              ) ;_ end of function
                                    ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
              ) ;_ end of not
    (setq lst (cons pt lst))
    ) ;_ end of while
  (reverse lst)
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.07.2019, 08:33
#3
koMon


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


Цитата:
Сообщение от i-593 Посмотреть сообщение
на LISP программирую примерно дней 7
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
lisp ориентирован на обработку списков, и этим воспользоваться.
koMon вне форума  
 
Непрочитано 08.07.2019, 08:49
#4
Семёныч


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


Цитата:
Сообщение от i-593 Посмотреть сообщение
Можно как-то обращаться к переменной аля
Для того, чтобы обращаться к переменной аля, надо сначала как-то ее определить. Семи дней должно хватить на этот процесс.
Семёныч вне форума  
 
Непрочитано 08.07.2019, 09:52
#5
Кулик Алексей aka kpblc
Moderator

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


koMon, ??
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2019, 12:59
#6
i-593


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Понять, что lisp ориентирован на обработку списков, и этим воспользоваться.
Код:
[Выделить все]
 (defun t1 (/ pt lst)
  (while (not (vl-catch-all-error-p
                (vl-catch-all-apply (function (lambda ()
                                                (setq pt (if lst
                                                           (getpoint (car lst) "\nУкажите точку <Отмена> : ")
                                                           (getpoint "\nВведите первую точку <Отмена> : ")
                                                           ) ;_ end of if
                                                      ) ;_ end of setq
                                                ) ;_ end of lambda
                                              ) ;_ end of function
                                    ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
              ) ;_ end of not
    (setq lst (cons pt lst))
    ) ;_ end of while
  (reverse lst)
  ) ;_ end of defun
Вот я получил 4 точки
Код:
[Выделить все]
 Введите первую точку <Отмена> :
Укажите точку <Отмена> :
Укажите точку <Отмена> :
Укажите точку <Отмена> :
Укажите точку <Отмена> : *Прервано*
((0.0 0.0 0.0) (-9.09495e-013 3000.0 0.0) (6000.0 3000.0 0.0) (6000.0 0.0 0.0))
из консоли 
Но мне их снова нужно разбить на x и y.
И тут просто список подряд их, мне это не нужно было .

Код:
[Выделить все]
 Вот консоль: 
((6000.0 0.0 0.0) (6000.0 3000.0 0.0) (-5.40012e-013 3000.0 0.0) (0.0 0.0 0.0)) 
((0.0 0.0 0.0) (-5.40012e-013 3000.0 0.0) (6000.0 3000.0 0.0) (6000.0 0.0 0.0)) 
_$ 
_$ pt
(6000.0 0.0 0.0)
_$ pt2
nil
_$ pt1
nil
_$ pt3
nil
_$ lst
((6000.0 0.0 0.0) (6000.0 3000.0 0.0) (-5.40012e-013 3000.0 0.0) (0.0 0.0 0.0))
_$ pt22
nil
_$ 
Это называется у меня есть 16 строчек кода, хочу их оптимизировать, вместо этого мне присылают код на 12 строчек, и у меня по прежнему нет x1,y1,x2,y2 конкретными переменными.
i-593 вне форума  
 
Автор темы   Непрочитано 08.07.2019, 13:04
#7
i-593


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


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Для того, чтобы обращаться к переменной аля, надо сначала как-то ее определить. Семи дней должно хватить на этот процесс.
Это к чему???
Я её и объявляю, мой код работает. Теперь я хочу его сократить, оптимизировать процесс, но пока я получил список с именем pt, где я каждый элемент могу вынести в отдельный список.

Определена переменная у меня в начале программы, все переменные определены.
Так что я не понимаю, к чему ты клонишь?

Можно мне в ЛИСП как в Делфи присвоение
от i 1 до n выполнить считывание
pn и сохранить его координаты через ввод мышкой?
И разбить на p1 (x1, y1); p2 (x2,y2) .... pn(xn, yn)?
i-593 вне форума  
 
Автор темы   Непрочитано 08.07.2019, 13:07
#8
i-593


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


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Для того, чтобы обращаться к переменной аля, надо сначала как-то ее определить. Семи дней должно хватить на этот процесс.
Допёрло, шутка про переменную "аля". Я думал тут гуру LISP(а) сидят и помогают. А нет, есть и такие кадры)

----- добавлено через ~10 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Понять, что lisp ориентирован на обработку списков, и этим воспользоваться.
Код:
[Выделить все]
 (defun t1 (/ pt lst)
  (while (not (vl-catch-all-error-p
                (vl-catch-all-apply (function (lambda ()
                                                (setq pt (if lst
                                                           (getpoint (car lst) "\nУкажите точку <Отмена> : ")
                                                           (getpoint "\nВведите первую точку <Отмена> : ")
                                                           ) ;_ end of if
                                                      ) ;_ end of setq
                                                ) ;_ end of lambda
                                              ) ;_ end of function
                                    ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
              ) ;_ end of not
    (setq lst (cons pt lst))
    ) ;_ end of while
  (reverse lst)
  ) ;_ end of defun
Ещё раз, прошлое сообщение удалилось.

Запустил код выше, он запросил у меня n точек и создал список длинной n.

У меня есть код, он рабочий мне нужно было его оптимизировать. 12 строчек кода, 4 запроса точки, и выделение координат x,y у каждой точки.
Вы мне предложили 12 строчек кода, по созданию списка. И я могу оттуда взять все точки и могу оттуда взять все x и y. Но это удлинит код. Мне нужно оптимизировать и минимизировать код.

Можно мне в ЛИСП как в Делфи
От i =1 до n
ввести g1,g2,...,gn
сохранить это всё в переменные (x1,y1) ... (xn,yn) для этих точек?
i-593 вне форума  
 
Непрочитано 08.07.2019, 13:53
#9
Boxa

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


Цитата:
Сообщение от i-593 Посмотреть сообщение
Я думал тут гуру LISP(а) сидят и помогают.
я в лиспе понимю даже меньше вашего, но вот Вам гуру и написал функцию для получения списка точек, при этом список может быть любой длинны и Вам достаточно просто запихнуть эту функцию к себе в код и вызывать по необходимости. ПРи желании можете весь этот код в одну строчку свернуть... если для Вас количество строк так важно:
Код:
[Выделить все]
 (defun t1 (/ pt lst) (while (not (vl-catch-all-error-p (vl-catch-all-apply (function (lambda ()(setq pt (if lst (getpoint (car lst) "\nУкажите точку <Отмена> : ")(getpoint "\nВведите первую точку <Отмена> : "))))))))(setq lst (cons pt lst)))(reverse lst))
ЗЫ.
Если у Вас есть опыт написания на Дельфи, и появилась потребность писать под автокад, то зачем Вы выбрали для этого функциональный лисп, почему не воспользоваться привычными процедурными или ООП языками, коих под автокад масса, начиная от VBA и питона, всего зоопарка .NET платформы и заканчивая C++? За что Вы так себя не любите то?
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 08.07.2019, 14:03
1 | 1 #10
trir


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


Цитата:
За что Вы так себя не любите то?
Lisp даёт просветление - после него ничего не страшно

Цитата:
Ведь Бог писал на Лиспе
Когда заполнил листья зелёным.
Фрактальные цветки и рекурсивные корни:
Самый красивый хак из виденных мною.
А когда я изучаю снежинки,
И не нахожу двух одинаковых,
Я знаю, что Бог любит язык
Со своим собственным четырёхбуквенным названием.
Цитата:
Можно мне в ЛИСП как в Делфи
если ты не готов познать истину - не пытася использовать Lisp
trir вне форума  
 
Непрочитано 08.07.2019, 14:09
1 | 1 #11
Alan

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


Цитата:
Сообщение от trir Посмотреть сообщение
Ведь Бог писал на Лиспе
Когда заполнил листья зелёным.
Фрактальные цветки и рекурсивные корни:
Самый красивый хак из виденных мною.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 08.07.2019, 14:13
| 1 #12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Offtop:
Цитата:
Сообщение от i-593 Посмотреть сообщение
Я думал тут гуру LISP(а) сидят и помогают.
уточнение: если хотят - помогают) Это не платная техподдержка, да и профессиональных программистов практически тут нет - есть несколько сотен продвинутых пользователей, которые помимо основной деятельности освоили и прикладное программирование в достаточных для реализации их потребностях объемах.


Можно и на привычном дельфи через COM-интерфейс работать с акадом) Не все доступно через COM, но подобное описанного в данной ветке - запросто.

Цитата:
Сообщение от trir Посмотреть сообщение
если ты не готов познать истину - не пытася использовать Lisp
если ты готов тратить время на решение типовых задач на лиспе вместо взятия готовых решений из фреймворка/библиотек - вэлком)
Сергей812 вне форума  
 
Непрочитано 08.07.2019, 14:45
1 | #13
valerik88


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


Автору нужно это.

Код:
[Выделить все]
 
(setq i 1)
(while (< i 4)
(setq g (getpoint "\nУкажите точку: "))
(set (read (strcat "x" (itoa i))) (nth 0 g))
(set (read (strcat "y" (itoa i))) (nth 1 g))
(set (read (strcat "z" (itoa i))) (nth 2 g))  
(setq i (1+ i))
)

Последний раз редактировалось valerik88, 08.07.2019 в 14:51.
valerik88 вне форума  
 
Непрочитано 08.07.2019, 16:07
1 | 1 #14
Семёныч


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


Интересно (но не очень), автор темы считает, что 12 строк кода - это много. Что же он тогда будет делать с 1200 строк кода? Когда через несколько лет сам превратится из кадра в гуру?
Для начала можно написать так:
Код:
[Выделить все]
(setq g1 (getpoint "\nУкажите первый угол: ")) ; запрос координат угла1
(setq x1 (nth 0 g1) y1 (nth 1 g1) z1 (nth 2 g1))
(setq g2 (getpoint "\nУкажите второй угор : ")) ; угол2
(setq x2 (nth 0 g2) y2 (nth 1 g2) z2 (nth 2 g2))
(setq g3 (getpoint "\nУкажите третий угол : ")) ; угол3
(setq x3 (nth 0 g3) y3 (nth 1 g3) z3 (nth 2 g3))
(setq g4 (getpoint "\nУкажите четвёртый угол : ")) ; угол4
(setq x4 (nth 0 g4) y4 (nth 1 g4) z4 (nth 2 g4))
Семёныч вне форума  
 
Автор темы   Непрочитано 08.07.2019, 19:39
#15
i-593


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


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Интересно (но не очень), автор темы считает, что 12 строк кода - это много. Что же он тогда будет делать с 1200 строк кода? Когда через несколько лет сам превратится из кадра в гуру?
Для начала можно написать так:
Код:
[Выделить все]
(setq g1 (getpoint "\nУкажите первый угол: ")) ; запрос координат угла1
(setq x1 (nth 0 g1) y1 (nth 1 g1) z1 (nth 2 g1))
(setq g2 (getpoint "\nУкажите второй угор : ")) ; угол2
(setq x2 (nth 0 g2) y2 (nth 1 g2) z2 (nth 2 g2))
(setq g3 (getpoint "\nУкажите третий угол : ")) ; угол3
(setq x3 (nth 0 g3) y3 (nth 1 g3) z3 (nth 2 g3))
(setq g4 (getpoint "\nУкажите четвёртый угол : ")) ; угол4
(setq x4 (nth 0 g4) y4 (nth 1 g4) z4 (nth 2 g4))
Да,так кстати я не подумал сделать, уже лучше.
Программа уже порядка 50 строчек, и она будет действительно увеличиваться действительно строк до 1200, посему и хочу сократить код сразу.

Это просто ввод начальный, пока экспериментирую с 4мя точками и т.д.

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от valerik88 Посмотреть сообщение
Автору нужно это.

Код:
[Выделить все]
 
(setq i 1)
(while (< i 4)
(setq g (getpoint "\nУкажите точку: "))
(set (read (strcat "x" (itoa i))) (nth 0 g))
(set (read (strcat "y" (itoa i))) (nth 1 g))
(set (read (strcat "z" (itoa i))) (nth 2 g))  
(setq i (1+ i))
)
Так, выглядит похоже.
А он сделаем мне g1,g2,g3,g4??? или он мне оставит все x,y,z но без самой точки?
А как ввести количество точек мне просто в консоль?
Ну чтобы он запросил у меня до какого числа мы это делаем? например n. Есть оператор подскажите ещё раз для этого случая.
Чтобы я мог действительно это же задать для 100 точек) или 10 )))
По предварительному запросу количества точек?

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Offtop:
уточнение: если хотят - помогают) Это не платная техподдержка, да и профессиональных программистов практически тут нет - есть несколько сотен продвинутых пользователей, которые помимо основной деятельности освоили и прикладное программирование в достаточных для реализации их потребностях объемах.


Можно и на привычном дельфи через COM-интерфейс работать с акадом) Не все доступно через COM, но подобное описанного в данной ветке - запросто.


если ты готов тратить время на решение типовых задач на лиспе вместо взятия готовых решений из фреймворка/библиотек - вэлком)
Не всё доступно, для задач которые я затронул в создании программы, мне не смог удовлетворить VBA и Делфи (почти одно и тоже), посему решил что лучше изучить ЛИСП, ведь это же весело!?)))))

----- добавлено через ~9 мин. -----
Цитата:
Сообщение от Boxa Посмотреть сообщение
я в лиспе понимю даже меньше вашего, но вот Вам гуру и написал функцию для получения списка точек, при этом список может быть любой длинны и Вам достаточно просто запихнуть эту функцию к себе в код и вызывать по необходимости. ПРи желании можете весь этот код в одну строчку свернуть... если для Вас количество строк так важно:
Код:
[Выделить все]
 (defun t1 (/ pt lst) (while (not (vl-catch-all-error-p (vl-catch-all-apply (function (lambda ()(setq pt (if lst (getpoint (car lst) "\nУкажите точку <Отмена> : ")(getpoint "\nВведите первую точку <Отмена> : "))))))))(setq lst (cons pt lst)))(reverse lst))
ЗЫ.
Если у Вас есть опыт написания на Дельфи, и появилась потребность писать под автокад, то зачем Вы выбрали для этого функциональный лисп, почему не воспользоваться привычными процедурными или ООП языками, коих под автокад масса, начиная от VBA и питона, всего зоопарка .NET платформы и заканчивая C++? За что Вы так себя не любите то?
Программная оптимизация это не просто кол-во строк кода. Для 10 строчек, всё будет наносекунды выполняться, но в ближайшие месяца 3, программа будет насчитывать порядка 500-1000 строк кода, если они начнут подвисать или Autocad - то это будет очень плохо .

Можно конечно занятся вопросами оптимизации и минимализации кода в конце, но такое себе решение. Лучше сейчас сразу его облегчить.

Цитата:
Сообщение от Boxa Посмотреть сообщение
За что Вы так себя не любите то?
Ну вот, чего только не сделаешь для любимой девушки, даже начнёшь разбираться в ЛИСПе. )))

И зачем мне какой-то левый язык, если есть ЛИСП!? Ну в плане, задачи в Autocad, значит нужно брать язык программирования именно для него.
i-593 вне форума  
 
Непрочитано 08.07.2019, 19:59
#16
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от i-593 Посмотреть сообщение
Лучше сейчас сразу его облегчить.
Мой опыт говорит, что надо не столько облегчать код, сколько делать его масштабируемым и наращиваемым. Уж лучше сразу делать универсальный вариант (который будет учитывать любое количество точек - от 0 до овердофига), и потом его использовать. Особенно если заранее не известны граничные условия применения.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.07.2019, 20:17
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Цитата:
Сообщение от i-593 Посмотреть сообщение
И зачем мне какой-то левый язык, если есть ЛИСП!?
ну хотя бы по той простой причине:
1. Развития лиспа фактически не происходит, т.е. придется многое писать самому или искать готовые примеры кода.
2. Если критична скорость исполнения, то в .Net/ObjectARX достигните заметного "подтормаживания" гораздо позже, имхо.
3. Если будут нужны диалоги - в том же .Net накидали контролы мышкой на форму и дописали код обработчиков (если тот же WinForms использовать). В лиспе процесс гораздо интереснее, а если диалог еще и с динамикой..)
4. Аутодеск достаточно активно продвигает тот же .Net, поэтому левым назвать этот язык (точнее, технологию программирования)..


Вот раньше альтернативы не было, поэтому столько упоминаний лиспа. У кого уже написаны значительные библиотеки/программы на лиспе - тоже "поют ему дифирамбы". Но начинать с нуля вникать в этот язык, если нет однозначного требования именно на лиспе писать - я тоже на дельфи писал в свое время (не под акад), потом пробовал и на лиспе писать, но оказалось проще перейти на .Net и "забыть" лисп - привычнее и понятнее))
Сергей812 вне форума  
 
Автор темы   Непрочитано 08.07.2019, 21:22
#18
i-593


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Мой опыт говорит, что надо не столько облегчать код, сколько делать его масштабируемым и наращиваемым. Уж лучше сразу делать универсальный вариант (который будет учитывать любое количество точек - от 0 до овердофига), и потом его использовать. Особенно если заранее не известны граничные условия применения.
Ещё раз, по поводу того варианта, я задал вопрос выше.

1-ое Много точек, хорошо, но там будут просто координаты в едином списке, чтобы вывести из него n элементов и задать их в g1....gn не написано.
Посему будет 4 точки, он сохранит список. будет 10 точек, и выводить так же придётся 10. Но как вывести именно то число, сколько точек???

А не просто, запрашивать пока я не нажму "отмету".

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну хотя бы по той простой причине:
1. Развития лиспа фактически не происходит, т.е. придется многое писать самому или искать готовые примеры кода.
2. Если критична скорость исполнения, то в .Net/ObjectARX достигните заметного "подтормаживания" гораздо позже, имхо.
3. Если будут нужны диалоги - в том же .Net накидали контролы мышкой на форму и дописали код обработчиков (если тот же WinForms использовать). В лиспе процесс гораздо интереснее, а если диалог еще и с динамикой..)
4. Аутодеск достаточно активно продвигает тот же .Net, поэтому левым назвать этот язык (точнее, технологию программирования)..


Вот раньше альтернативы не было, поэтому столько упоминаний лиспа. У кого уже написаны значительные библиотеки/программы на лиспе - тоже "поют ему дифирамбы". Но начинать с нуля вникать в этот язык, если нет однозначного требования именно на лиспе писать - я тоже на дельфи писал в свое время (не под акад), потом пробовал и на лиспе писать, но оказалось проще перейти на .Net и "забыть" лисп - привычнее и понятнее))
Так, и чего там на .net? Чего искать? Есть что-то, учебник? Что умеет то? Рисовать, размещать объекты, блоки из списка блоков Autocad? Просто программа специфическая.
i-593 вне форума  
 
Непрочитано 08.07.2019, 21:44
#19
Кулик Алексей aka kpblc
Moderator

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


Еще раз: а на фига их закидывать в g1..gN? nth / foreach / mapcar / while никуда не деваются и прекрасно работают. В Delphi при работе в цикле на каждый проход тоже своя переменная назначается?
Цитата:
Сообщение от i-593 Посмотреть сообщение
Что умеет то? Рисовать, размещать объекты, блоки из списка блоков Autocad?
Да, все это и еще раз 50 столько же.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2019, 21:51
#20
i-593


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Еще раз: а на фига их закидывать в g1..gN? nth / foreach / mapcar / while никуда не деваются и прекрасно работают. В Delphi при работе в цикле на каждый проход тоже своя переменная назначается?

Да, все это и еще раз 50 столько же.
Ну мне нужны точные координаты конкретной точки.

Foreach - вернёт только значение последнего выражения - как это обойти?)
while - LISP умеет обратится в цикле к переменной? g"n" или g'n' или g(тут что-то n), чтобы n менялось и получалось g1, g2, g3, ..., gn
Как мне обратится подобным образом?
i-593 вне форума  
 
Непрочитано 08.07.2019, 21:53
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Цитата:
Сообщение от i-593 Посмотреть сообщение
Так, и чего там на .net? Чего искать? Есть что-то, учебник? Что умеет то? Рисовать, размещать объекты, блоки из списка блоков Autocad? Просто программа специфическая.
все это делает + все возможности того .Net языка, который выберите) Учебник - сайт Бушмана Андрея и там еще по ссылкам пройдитесь.
Сергей812 вне форума  
 
Непрочитано 08.07.2019, 22:17
#22
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от i-593 Посмотреть сообщение
Ну мне нужны точные координаты конкретной точки.

Foreach - вернёт только значение последнего выражения - как это обойти?)
while - LISP умеет обратится в цикле к переменной? g"n" или g'n' или g(тут что-то n), чтобы n менялось и получалось g1, g2, g3, ..., gn
Как мне обратится подобным образом?
Ыыыыаааа!
Пишу насухую, без редактора, только чтобы показать общий принцип:
(setq c 0) (mapcar '(lambda(pt)
(entmakex (list (cons 0 "point")(cons 10 x) (cons 62 (if (> c 255) (setq c 1) (setq c (1+ c))))))) pt-list)

(setq c 0)
(foreach item pt-list
(entmakex (list (cons 0 "point")(cons 10 x) (cons 62 (if (> c 255) (setq c 1) (setq c (1+ c))))))
)

И т.д, и т.п.

pt-list = список координат, который получен ранее.

----- добавлено через 45 сек. -----
Кто-то запрещает внутри цикла что-то выполнять? Или все же "делай че хоцца (ну, почти все)?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.07.2019, 22:52
1 | #23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Без проверки .Net код для примера (в виде функции):


Код:
[Выделить все]
        /// <summary>
        /// Получение указанного количества точек из текущего чертежа
        /// </summary>
        /// <param name="aCountPoints">Требуемое количество точек</param>
        /// <returns>Список указанных точек, либо null в случае отказа</returns>
        static List<Point3d> GetPoints(int aCountPoints = -1)
        {
            // Получаем редактор текущего документа
            Editor lAcadEd = Application.DocumentManager.CurrentDocument.Editor;
            // Вспомогательный список точек
            List<Point3d> lListPoints = null;
            // Если задано количество точек
            if (aCountPoints > 0)
            {
                // Создаем список точек нужной размерности
                lListPoints = new List<Point3d>(aCountPoints);
                // Запрашиваем точки в цикле
                for (int i = 0; i < aCountPoints; i++)
                {
                    // Запрашиваем очередную точку
                    var lRes = lAcadEd.GetPoint(String.Format(
                        "\nУкажите точку №{0} :", i + 1));
                    // Если произошел отказ - возвращаем null
                    if (lRes.Status != PromptStatus.OK) return null;
                    // Заносим полученную точку во вспомогательный список
                    lListPoints.Add(lRes.Value);
                }
            }
            else
            {
                // Создаем список точек с емкостью по умолчанию
                lListPoints = new List<Point3d>();
                // Бесконечный цикл ввода
                while (true)
                {
                    // Запрашиваем очередную точку
                    var lRes = lAcadEd.GetPoint(String.Format(
                        "\nУкажите точку №{0} :", lListPoints.Count + 1));
                    // Если произошел отказ - возвращаем либо null в случае пустого
                    // списка, либо список с выбранными точками
                    if (lRes.Status != PromptStatus.OK)
                        return lListPoints.Count == 0 ? null : lListPoints;
                    // Заносим полученную точку во вспомогательный список
                    lListPoints.Add(lRes.Value);
                }
            }
            // Для успокоения компилятора
            return lListPoints;
        }


если указать количество, то функция вернет либо список с указанными точками, либо null - если прервет выбор. Если без аргументов вызывать - будет до бесконечности запрашивать точки, пока не отменить ввод. Если не было выбрано ни одной точки - вернет тоже null.

p.s. Ну и тысяча строк в .Net - это так, разминка)

----- добавлено через ~3 мин. -----
А доступ к координатам:
Результат вызова функции[%Индекс%].X
Результат вызова функции[%Индекс%].Y
Результат вызова функции[%Индекс%].Z
без всяких затей)
Сергей812 вне форума  
 
Автор темы   Непрочитано 08.07.2019, 22:57
#24
i-593


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Без проверки .Net код для примера (в виде функции):


Код:
[Выделить все]
        /// <summary>
        /// Получение указанного количества точек из текущего чертежа
        /// </summary>
        /// <param name="aCountPoints">Требуемое количество точек</param>
        /// <returns>Список указанных точек, либо null в случае отказа</returns>
        static List<Point3d> GetPoints(int aCountPoints = -1)
        {
            // Получаем редактор текущего документа
            Editor lAcadEd = Application.DocumentManager.CurrentDocument.Editor;
            // Вспомогательный список точек
            List<Point3d> lListPoints = null;
            // Если задано количество точек
            if (aCountPoints > 0)
            {
                // Создаем список точек нужной размерности
                lListPoints = new List<Point3d>(aCountPoints);
                // Запрашиваем точки в цикле
                for (int i = 0; i < aCountPoints; i++)
                {
                    // Запрашиваем очередную точку
                    var lRes = lAcadEd.GetPoint(String.Format(
                        "\nУкажите точку №{0} :", i + 1));
                    // Если произошел отказ - возвращаем null
                    if (lRes.Status != PromptStatus.OK) return null;
                    // Заносим полученную точку во вспомогательный список
                    lListPoints.Add(lRes.Value);
                }
            }
            else
            {
                // Создаем список точек с емкостью по умолчанию
                lListPoints = new List<Point3d>();
                // Бесконечный цикл ввода
                while (true)
                {
                    // Запрашиваем очередную точку
                    var lRes = lAcadEd.GetPoint(String.Format(
                        "\nУкажите точку №{0} :", lListPoints.Count + 1));
                    // Если произошел отказ - возвращаем либо null в случае пустого
                    // списка, либо список с выбранными точками
                    if (lRes.Status != PromptStatus.OK)
                        return lListPoints.Count == 0 ? null : lListPoints;
                    // Заносим полученную точку во вспомогательный список
                    lListPoints.Add(lRes.Value);
                }
            }
            // Для успокоения компилятора
            return lListPoints;
        }


если указать количество, то функция вернет либо список с указанными точками, либо null - если прервет выбор. Если без аргументов вызывать - будет до бесконечности запрашивать точки, пока не отменить ввод. Если не было выбрано ни одной точки - вернет тоже null.

p.s. Ну и тысяча строк в .Net - это так, разминка)
Такс, разбираем простые примеры на куче различных языков?)

Ну тут вот понятный мне цикл for - мой любимый:
// Запрашиваем точки в цикле
for (int i = 0; i < aCountPoints; i++)
{

и вот это в моей голове вполне логичная запись: lListPoints.Count + 1));
а т, что происходит пока в ЛИСПе, для меня периодически магия)
i-593 вне форума  
 
Непрочитано 08.07.2019, 23:41
#25
trir


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


и не забываем про Джигу!
trir вне форума  
 
Непрочитано 09.07.2019, 00:02
1 | 1 #26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Цитата:
Сообщение от i-593 Посмотреть сообщение
и вот это в моей голове вполне логичная запись: lListPoints.Count + 1));
так и писал выше
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
привычнее и понятнее))
умом понимаешь списочную сущность лиспа, а чтобы вместо круглых скобочек и знакомых ключевых слов видеть логическую структуру программы - это надо достаточно долго и активно на нем писать. За это время, если начинать с нуля - можно разобраться в основах .Net и писать код в привычном виде, имхо)
Сергей812 вне форума  
 
Непрочитано 09.07.2019, 08:30
#27
Boxa

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


Сергей812, сахарок...
Код:
[Выделить все]
 var lRes = lAcadEd.GetPoint(String.Format("\nУкажите точку №{0} :", lListPoints.Count + 1));
var lRes = lAcadEd.GetPoint($"\nУкажите точку №{lListPoints.Count + 1} :");
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 09.07.2019, 08:55
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Цитата:
Сообщение от Boxa Посмотреть сообщение
сахарок...
Можно не только интерполяцию строк, но сам код сократить в два раза - если не задано количество точек для ввода, то назначать int.MaxValue - для ручного ввода это будет эквивалентно бесконечному циклу. Но тогда не удастся задать точную емкость списка в случае указания количества точек, а List ведет себя "агрессивно", захватывая при увеличении списка в два раза больше емкости, чем было - т.е. некоторый перерасход ресурсов. Просто показал в примере, насколько привычнее будет запись в .Net по сравнению с лиспом, особенно если раньше на других языках программировали.
Сергей812 вне форума  
 
Непрочитано 09.07.2019, 10:50
#29
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 10,911


Цитата:
Сообщение от valerik88 Посмотреть сообщение
Автору нужно это.

Код:
[Выделить все]
 
(setq i 1)
(while (< i 4)
(setq g (getpoint "\nУкажите точку: "))
(set (read (strcat "x" (itoa i))) (nth 0 g))
(set (read (strcat "y" (itoa i))) (nth 1 g))
(set (read (strcat "z" (itoa i))) (nth 2 g))  
(setq i (1+ i))
)
Вот так точно не нужно делать. Стоит только пользователю не указать правильно точку и программа рухнет.

Не зря Алексей в #2 показал ввод точек с использованием vl-catch-xxx. Это аналог try ... except ... end в Delphi.

И вообще надо отделять "мух от котлет" с помощью библиотечных функций. Одна - надежно позволяющая ввести любое количество точек и возвращающая их список. А другая - вытащить из этого списка требуемые данные точек.

Ну а что касается систем программирования - так это из серии "зачем они требуют хлеба, почему не едят пирожные". AutoCAD хорош тем, что можно использовать разные среды в зависимости от характера задач.
ShaggyDoc вне форума  
 
Непрочитано 09.07.2019, 12:20
#30
Boxa

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Ну а что касается систем программирования - так это из серии "зачем они требуют хлеба, почему не едят пирожные"
неверная аналогия. скорее из серии: велогонщику выдали коньки. Автор понимает и вроде бы умеет процедурный стили программирования, накой в этом случае переключаться на функциональный... при том, что с акадом можно и из дельфи работать...
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
AutoCAD хорош тем, что можно использовать разные среды в зависимости от характера задач.
и умений.
Умеешь писать на дельфи, ну так и пиши на нем, зачем ломать себе мозг?
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 09.07.2019, 13:18
| 1 #31
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Offtop: Ради интереса посмотрел у Kean Walmsley в блоге - первые статьи по .Net в акаде датированы серединой 2006 года. На русскоязычных форумах тоже примерно в эти года начинают мелькать посты данной тематики. Т.е. уже 10+ лет прошло с начала популязации данной технологии) Сам фреймворк в 2002 году появился.

Но по странной прихоти "нормальные" языки типа сишных давали на первых курсах вузов/универов в основном только связанным с ИТ специальностям, а других "технарей" пичкали тем же Дельфи. Типа учебный язык, со строгой типизацией и т.д. Правда и от Дельфи большинство бегало, ища готовые программы на предыдущих курсах. Отучились - теперь ищут готовые программы для упрощения своей работы, рассказывая душещипательные истории о том, что они ничего в этом не понимают. Некоторые ведутся на это до сих пор - ну это их право)
Сергей812 вне форума  
 
Непрочитано 09.07.2019, 13:33
#32
trir


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


Цитата:
Сам фреймворк в 2002 году появился
позорише это было
trir вне форума  
 
Непрочитано 09.07.2019, 15:50
#33
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 10,911


Цитата:
Сообщение от Boxa Посмотреть сообщение
Умеешь писать на дельфи, ну так и пиши на нем, зачем ломать себе мозг?
Писать на Delphi для AutoCAD - это все равно, что управлять марсоходом по радио. Многое там будет очень сложно, а то и невозможно вообще.

Попробуйте, например по теме ветки получить в Delphi-программе циклом точки введенные пользователем. С "резиновой нитью" от предыдущей точки, с возможностями объектной привязки, отмены. То, что элементарно делается на Лисп.

В Delphi (если уж работаешь с этой средой) надо делать то, что в ней лучше делать. Например диалоги, визуальная работа с БД. Причем запускаться это должно опять же из ЛИС-программы, работающей внутри Автокада. Как даже ARX-приложения запускаются.
ShaggyDoc вне форума  
 
Непрочитано 09.07.2019, 16:59
#34
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Попробуйте, например по теме ветки получить в Delphi-программе циклом точки введенные пользователем. С "резиновой нитью" от предыдущей точки, с возможностями объектной привязки, отмены. То, что элементарно делается на Лисп.
Если подразумевается взаимодействие акада и дельфи через COM, то:
Код:
[Выделить все]
' Запрос необходимого количества точек. Аргумент:
' aCountPoints - требуемое количество точек
' Возврат: Массив координат точек или Empty в случае отказа
Public Function GetPoints(ByVal aCountPoints As Long) As Variant
  ' Подключаемся к Акаду
  Dim lAcadApp As AcadApplication
  Set lAcadApp = GetObject(, "AutoCAD.Application")
  ' Получаем текущий документ
  Dim lAcadDoc As AcadDocument
  Set lAcadDoc = lAcadApp.ActiveDocument
  ' Создаем массив для хранения точек
  Dim lListPoints() As Variant
  ReDim lListPoints(aCountPoints - 1)
  ' Включаем обработчик ошибок
  On Error Resume Next
  ' В цикле по количеству требуемых точек
  Dim I1 As Byte, lPoint As Variant
  For I1 = 1 To aCountPoints
    ' Если первая точка
    If (I1 < 2) Then
      ' Первая точка без нити
      lListPoints(I1 - 1) = lAcadDoc.Utility.GetPoint(, "Выберите точку №" & I1)
    Else
      ' Начиная со второй точки - резиновая нить от предыдущей
      lListPoints(I1 - 1) = lAcadDoc.Utility.GetPoint(lListPoints(I1 - 2), "Выберите точку №" & I1)
    End If
    ' Если было нажата Esc или права кнопка мыши - выходим из цикла
    If (Err.Number <> 0) Then Exit For
  Next I1
  ' Если цикл был завершен
  If (I1 > aCountPoints) Then
    GetPoints = lListPoints
  Else
    GetPoints = Empty
  End If
  ' Очищаем ссылки на объекты
  Set lAcadDoc = Nothing
  Set lAcadApp = Nothing
End Function


Правда, это написано на VBA из экселя, но какая собственно разница?) Можно разделить реакцию на Esc и на нажатие правой кнопки мыши, использовав апишную функцию GetAsyncKeyState. Ну и для упрощения не показывал проверки подключения к акаду, получения текущего документа, проверки состояния готовности акада перед очередным обращением к нему.
Сергей812 вне форума  
 
Непрочитано 09.07.2019, 17:33
#35
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 10,911


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Правда, это написано на VBA из экселя, но какая собственно разница?) Можно разделить реакцию на Esc и на нажатие правой кнопки мыши, использовав апишную функцию GetAsyncKeyState. Ну и для упрощения не показывал проверки подключения к акаду, получения текущего документа, проверки состояния готовности акада перед очередным обращением к нему.
И вот все это, да еще исключенное для упрощения в Lisp решается одной строчкой. А ведь еще надо вызвать все это из Автокада. Иначе будет "марсоход".
ShaggyDoc вне форума  
 
Непрочитано 09.07.2019, 17:51
#36
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,600


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
И вот все это, да еще исключенное для упрощения в Lisp решается одной строчкой.
Ну среда разработки в Delphi будет поудобнее, чем в лиспе - поэтому количество строк не критично. Да и возможностей для организации кода побольше - не только по именам и файлам.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А ведь еще надо вызвать все это из Автокада. Иначе будет "марсоход".
Не всегда это нужно. А если работать в домене акада изнутри - то зачем в настоящее время городить:
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Например диалоги, визуальная работа с БД. Причем запускаться это должно опять же из ЛИС-программы, работающей внутри Автокада.
когда можно все писать сразу в том же .Net в одном "флаконе"? Новичкам, у которых нет своих наработанных библиотек на лиспе под большинство типовых задач - стоит ли им тратить время на освоение данного языка? Или все-таки изучить языки общего применения в это время?
Сергей812 вне форума  
 
Непрочитано 10.07.2019, 16:28
#37
koMon


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
koMon, ??
7 дней для такого решения как-то маловато будет имхо

----- добавлено через ~17 ч. -----
Цитата:
Сообщение от i-593 Посмотреть сообщение
Я думал тут ... LISP ... помогают.
не понятна цель учебно-практической задачи.
1. написать код циклического ввода точек? вариант с резинкой от первой/последней до следующей точки ввода с отслеживанием esc, пустого ввода. всё лучше чем вслепую тыкать.
Код:
[Выделить все]
 
(setq point_added nil
	  points_list '()
)
(while  (cond
			(
				(vl-catch-all-error-p point_added)
					(setq point_list_index 1)
					(null (princ (strcat "\nВвод " (itoa (length points_list)) " точек завершён.")))
			)
			(
				(setq point_added (vl-catch-all-apply 'getpoint
																(cond
																	(
																		(null point_added)
																			(list "\nУкажите 1-ю точку: ")
																	)
																	(
																		t
																			(list point_added (strcat "\nУкажите " (itoa (1+ (length points_list)))  "-ю точку: "))
																	)
																)
								  )
				)
					(if (and
					    	(null (vl-catch-all-error-p point_added))
							(princ point_added)
						)
						(setq points_list (append points_list (list point_added)))
					)
					t
			)
			(
				(null (vl-catch-all-error-p point_added))
					(setq point_added (last points_list))
					t
			)
	   )
)
(foreach point_added points_list
	(princ (strcat "\n" (itoa point_list_index) "-я точка: "))
	(princ point_added)
	(setq point_list_index (1+ point_list_index))
)
(princ)
2. если планируется получение точек для построения прямоугольника, то 4 точки это избыточное количество. можно обойтись двумя диагональными + угол наклона прямоугольника.
3. если нужно получить кликнутые точки в виде экзотического списка, так это можно сделать на этапе формирования списка.
4. выбрать нужную точку/координаты нужной точки можно по индексу этой точки в сформированном списке. можно сделать и массив с координатами. но поскольку в лиспе нет динамического массива, то и заморачиваться не стоит.

Цитата:
Сообщение от trir Посмотреть сообщение
Ведь Бог писал на Лиспе
и поскольку он писал для работы без ошибок, то и их обработка в лиспе та ещё заморочка.
и вот теперь мне стало совершенно понятно на чём писал дьявол

Последний раз редактировалось koMon, 16.07.2019 в 16:49.
koMon вне форума  
 
Непрочитано 11.07.2019, 10:30
#38
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от i-593 Посмотреть сообщение
Ну мне нужны точные координаты конкретной точки.

Foreach - вернёт только значение последнего выражения - как это обойти?)
while - LISP умеет обратится в цикле к переменной? g"n" или g'n' или g(тут что-то n), чтобы n менялось и получалось g1, g2, g3, ..., gn
Как мне обратится подобным образом?
что-то я вас не пойму... какой результат должен быть на выходе?
можно пример написать по образцу:
Код:
[Выделить все]
 
х = (х1, х2, х3, х4)
у = (у1, у2, у3, у4)
вам вообще данные о точках куда нужны? в командную строку просто вывести, чтобы там глазами посмотреть? или в текст вывести или в таблицу?

----- добавлено через ~1 мин. -----
просто словами опишите чего вы хотите добиться
__________________
Вечность это:
 (while T)
OKJI вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как ввести точки циклом?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Круги в точки Димас AutoCAD 11 26.06.2014 09:37
Как найти предельно допустимое расстояние от наиболее удаленной точки помещения до ближайшего эвакуационного выхода. RuMan Архитектура 1 21.12.2013 21:59
AutoCAD Civil 3D 2011 (Rus) - неактивна функция изменения стиля метки точки в палитре свойств rollstream Вертикальные решения на базе AutoCAD 5 13.11.2013 14:37
Как вычислить расстояние от точки до точки методами ActiveX? Supermax Программирование 31 20.11.2009 12:23
Нахождение точки пересечения на 3D сети Electa AutoCAD 15 16.12.2008 18:36