Перенос информации в форматки

Автор Тема: Перенос информации в форматки  (Прочитано 9237 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vladislav_ValerievichАвтор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
  • Skype: skvortsov_vv
Re: Перенос информации в форматки
« Ответ #15 : 14-06-2017, 14:48:00 »
Спасибо за корректировки. Очень поучающе.

Во-вторых, на каком конкретном месте ошибка? Наверное, на print? Которому надо подставлять строку и только строку, а ты выдаешь что-то непонятное? :) vl-princ-to-string используй для подобного "контроля".

После корректировок ругаться перестал, т.е. print работает не только со строками. В подтверждении сказанному нашёл полезным ещё один справочник по стандартным функциям AutoLIP, из которого и цитирую:
http://aco.ifmo.ru/~nadinet/html/other/lsp_book/lisp.html#_Toc465260963

Цитата: Справочник по стандартным функциям AUTOLISP
(print <выражение> [<описатель файла>])
Эта функция похожа на PRIN1, кроме того что <выражение> печатается с новой строки, а после <выражения> ставится пробел.
Цитата: Справочник по стандартным функциям AUTOLISP
(prin1 <выражение> [<описатель файла>])
Эта функция выводит выражение <выражение> на экран и возвращает <выражение>. <выражение> может быть любым выражением; не требуется, чтобы оно было строковой константой. Если присутствует <описатель файла> (и является описателем файла, открытого для записи), <выражение> записывается в файл в то время, как оно появляется на экране. Печатается только указанное <выражение>; не включается никаких пробелов и переходов на новую строку.
А вот и код, который теперь стал рабочим:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq kit (ssget "_X" '((0 . "INSERT"))))
  2. (sslength kit)
  3. (setq i 0)
  4. (while (< i (sslength kit))
  5.     (setq kit0 (entget(ssname kit i)))
  6.     (print (ssname kit i))
  7.     (setq i(+ i 1))
  8. )

Вопросы, которые возникают:
1. У каждого чертежа свой редактор, где прописываются команды и между собой не пересекаются?
2. Если в ходе работы с командной строкой переменных будет много, то ориентир в них будет затрудняться. Есть ли интерфейс, благодаря можно увидеть, какие переменные сейчас лежат в буфере чертежа и какую информацию они хранят? Сохраняются ли данные переменные в чертеже?
3. Функции вида "vl-..." визуально выделяются от функций autolisp. Предположу, что это функции visual lisp. Прошу дать комментарий касательно данных двух подвидов: кто это, чем отличаются, с чем едят?
4. Есть ли подобный справочник по функциям вида "vl-"?
Нашёл один:
http://www.cad.dp.ua/stats/vlisp.php
но возможно есть более подробный?
5. Тем не менее вернёмся к vl-princ-to-string, раз уж про него заговорили.
Код - Auto/Visual Lisp [Выбрать]
  1. (setq el (ssget)) ; Выберите объекты: Противоположный угол: найдено: 3
  2. ; Выберите объекты:
  3. ; <Selection set: 375>
  4. (vl-princ-to-string el) ;"<Selection set: 375>"
Есть ли какой-то классификатор в наименовании набора (например, "375") или просто шальная группа цифр?
Как понимаю я преобразовал набор el в список? А как я могу это проверить? Частично отсылка к вопросу 2.

6.
В-третьих, есть значительно более простой вариант преобразования набора в список:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))

тут я долго пытался понять, что это за чудо-юдо. Проверьте меня, потому что информацию пришлось черпать с каждого мира по ложке (может подскажите, где есть один! источник с описанием всех функций):
6.1. (VL-REMOVE-IF '<"предикат"> <"список">) - удаляет все элементы из списка, которые соответствуют условию.
Источник: http://www.cad.dp.ua/stats/vlisp.php (Список функций Visual Lisp).
6.2. Предикат listp - проверяет, является ли аргумент списком.
Источник: http://cybern.ru/lisp-predicat.html (предикаты в LISP).
6.3. (mapcar '<функция> <список1> [<список2> … <списокN>]) - поочередно применяет <функцию> сначала к первым элементам списков, затем ко втором и так далее. В результате образуется новый список, который и является возвращаемым значением.
Источник: https://acad-prog.ru/spravochnik-autolisp-funktsij-po-alfavitu/#entget (СПРАВОЧНИК AUTOLISP ФУНКЦИЙ).
6.4. cadr = (car (cdr *)), где cdr - вычисление хвоста списка, car -   вычисление головы списка.
Источник: http://catstail.narod.ru/homelisp/classic_funct.html#CADR (Описание встроенных функций HomeLisp). При чём тут HomeLisp? Но нигде более не смог найти cadr.
6.5. (ssnamex <набор> [<номер>]) - извлечение примитива из набора по порядковому номеру (заданных соответствующими аргументами <набор> и <номер>), но при этом выдается дополнительная информация о методах формирования набора (см. ниже); если аргумент <номер> опущен, то выводится информация обо всех примитивах набора.
Источник: http://www.intuit.ru/studies/courses/2331/631/lecture/13719?page=7 (Лекция 3: AutoLISP в среде Visual LISP).
Чем отличается ssnamex от ssname?
Если я нашёл правильные объяснения, то я попробую их соединить у себя в голове и понять, как эта функция работает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перенос информации в форматки
« Ответ #16 : 14-06-2017, 15:52:48 »
Проверьте меня, потому что информацию пришлось черпать с каждого мира по ложке (может подскажите, где есть один! источник с описанием всех функций):
http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-4CEE5072-8817-4920-8A2D-7060F5E16547
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Перенос информации в форматки
« Ответ #17 : 14-06-2017, 15:58:00 »
М-даааа... Может, один вопрос = одна тема?
На часть отвечу - остальное мимо.
У каждого чертежа свой редактор, где прописываются команды и между собой не пересекаются?
Редактор один. А вот пользовательские команды и функции могут быть разными.
Если в ходе работы с командной строкой переменных будет много, то ориентир в них будет затрудняться. Есть ли интерфейс, благодаря можно увидеть, какие переменные сейчас лежат в буфере чертежа и какую информацию они хранят? Сохраняются ли данные переменные в чертеже?
http://autolisp.ru/2009/09/10/vlide-misc-01/ + http://autolisp.ru/2009/09/12/vlide-misc-02/
Но вообще-то не помешало бы разбираться с переменными и не множить их попусту.
П.3 - http://www.cad.dp.ua/stats/vla_doc.php
П.4. Есть. Встроенная справка по VBA
5. Нет.
6.1. Да
6.2. Да
6.3. Да
6.4. Да
6.5. Проверь результат выполнения ssnamex - и, кстати, все это есть в справке.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!