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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Lisp нумерация по произвольной траектории

Lisp нумерация по произвольной траектории

Ответ
Поиск в этой теме
Непрочитано 23.12.2022, 15:00 1 | #1
Lisp нумерация по произвольной траектории
[MTL]
 
Санкт-Петербург
Регистрация: 09.01.2018
Сообщений: 37

Добрый день,
Данная программа была написана в 2021г по просьбе, и выложена в другой теме. Решил, что правильней было бы организовать для неё отдельную тему.
Смысл в чём. Куда мышкой кликаете - там номер появляется. Всё просто.

Работает так:
1. В командной строке набираете MNUM.
2. Тип нумерации числовая - целые и вещественные числа, либо буквенная "А, Б, С...Я" прописными русскими.
3. Префикс - это символ перед номером; нач. значение, интервал - это понятно; постфикс - символ после номера.
4. Программа создаёт текстовые объекты в указанной вами точке с заданными параметрами - слой, стиль текста, высота текста, сжатие.

14.02.23г. Модификация. В версии v.2.0 добавлены:
- нумерация римскими цифрами;
- для стиля текста возможность задания типа выравнивания;
- в коде программы комментарии

Вложения
Тип файла: lsp AutoNum_M_v.2.0.LSP (41.6 Кб, 297 просмотров)


Последний раз редактировалось [MTL], 14.02.2023 в 09:53. Причина: Новая версия программы
Просмотров: 3380
 
Непрочитано 19.01.2023, 19:48
#2
Ingpro


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


Классный лисп! Всем качать! Удобно, что есть и буквенная нумерация, аналогов не знаю...
Спасибо автору.
А не сложно для текста сделать выравнивание "середина по центру"? Или предоставить возможность выбора.

Последний раз редактировалось Ingpro, 19.01.2023 в 20:03.
Ingpro вне форума  
 
Автор темы   Непрочитано 14.02.2023, 09:55
#3
[MTL]


 
Регистрация: 09.01.2018
Санкт-Петербург
Сообщений: 37


Ingpro, спасибо за отзыв
Я сделал как вы просили. Новая версия программы в заголовке темы.
[MTL] вне форума  
 
Непрочитано 14.02.2023, 10:37
#4
alisa


 
Регистрация: 09.08.2005
Питер
Сообщений: 302


Прелесть какая
Спасибо
alisa вне форума  
 
Непрочитано 15.02.2023, 09:19
#5
Ingpro


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


Цитата:
Сообщение от [MTL] Посмотреть сообщение
Ingpro.
Я сделал как вы просили
[MTL], спасибо огромное, что добавили выбор выравнивания, да ещё и римская нумерация. Здорово!
Ingpro вне форума  
 
Непрочитано 21.03.2023, 08:45
#6
TABAK


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


шикарная программа.
А есть возможность сделать так, чтобы номер, по всем тем же правилам, ставился не в произвольную точку, по клику мыши, а заменял собой другой номер (в тексте или в блоке, или в мтексте)?
Т.е. с функцией "перенумерации"?
TABAK вне форума  
 
Непрочитано 21.03.2023, 12:45
#7
valerik88


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


Думаю было бы удобно, если бы диалог изначально был предзаполнен начальным значением "1", инкремент "1" и чтоб вместо TEXT вставлялся MTEXT. И степень сжатия по умолчанию чтоб была 1, а не 0.7
Я себе сам допилил эту программу, но думаю это всем было бы полезно.
valerik88 вне форума  
 
Непрочитано 21.03.2023, 13:30
#8
Ingpro


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


Цитата:
Сообщение от valerik88 Посмотреть сообщение
Я себе сам допилил эту программу, но думаю это всем было бы полезно
Допилил, выкладывай - и мы попробуем...
А если ещё расскажешь в какой строчке что подправил, вообще будет супер...
Особенно интересует сжатие
Код:
[Выделить все]
 ":edit_box {label= \" Сжатие: \"; key=\"b4\"; value=\"\"; edit_width=28; edit_limit=60;}"
как 0.7 исправить на 1?
Или это надо делать в другой строке?

Последний раз редактировалось Ingpro, 21.03.2023 в 14:05.
Ingpro вне форума  
 
Непрочитано 21.03.2023, 14:26
#9
valerik88


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


Ingpro, я там не только озвученное допилил для себя, поэтому не каждому подойдёт. Ещё и сам текст предзаполнил на QF (автоматы в электрике)

Значение сжатие меняется в строке 417
Код:
[Выделить все]
(if (eq Sgat nil) (setq Sgat "1"))
А ещё я сделал, чтоб выравнивание было "Середина по центру" выставленно по умолчанию. И высота текста на 3.
Вставку MTEXT сделал только для варианта с цифрами (там с буквами и римскими цифрами оставил как было всё, TEXT вставляется)
Вложения
Тип файла: lsp AutoNum_M_v.2.0.LSP (40.3 Кб, 42 просмотров)
valerik88 вне форума  
 
Непрочитано 21.03.2023, 14:44
#10
Ingpro


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


Цитата:
Сообщение от valerik88 Посмотреть сообщение
А ещё я сделал, чтоб выравнивание было "Середина по центру"
Спасибо, а подскажите ещё, в какой строке подправить, чтобы выравнивание было "Середина по центру" по умолчанию.
И где изменить высоту текста?
Ingpro вне форума  
 
Непрочитано 21.03.2023, 14:52
#11
valerik88


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


Ingpro, высота в строке 416
Код:
[Выделить все]
(if (eq Heidht_txt nil) (setq Heidht_txt "3"))
Выравнивание по центру в строке 447
Код:
[Выделить все]
(set_tile "b5" (itoa (vl-position "Середина по центру" viravn_list)))
valerik88 вне форума  
 
Непрочитано 21.03.2023, 15:14
#12
Ingpro


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


Цитата:
Сообщение от valerik88 Посмотреть сообщение
Выравнивание по центру в строке 447
Спасибо большое за подсказки!
Если запустить лисп из поста #9, нумерует нормально, но пишет в КС:
неверный тип аргумента: 2D/3D-точка: nil

Последний раз редактировалось Ingpro, 21.03.2023 в 16:01.
Ingpro вне форума  
 
Непрочитано 04.05.2025, 23:28
#13
Shagezood

Проектирование электросетей
 
Регистрация: 13.12.2022
Сообщений: 5


Не работает. С лиспами умею работать, загрузил через APPLOAD. Команду автокад видит, но после ввода ничего не происходит. Помогите пожалуйста)
В командной строке выдает это:

Команда: MNUM
AutoNum_M: dialog
{label = "Автонумерация c ручным заданием позиции"; width=35;
spacer_1;
:radio_column {label= " Параметры нумерации ";
:row {
:text {label= " Тип нумерации: "; width=20;}
opup_list {key="a0"; is_enabled=true; label=""; list=""; width=30;}
}
:edit_box {label= " Префикс: "; key="a1"; value=""; edit_width=28; edit_limit=60;}
:edit_box {label= " Нач. значение: "; key="a2"; edit_width=28; edit_limit=30;}
:edit_box {label= " Интервал: "; key="a3"; value=""; edit_width=28; edit_limit=60;}
:edit_box {label= " Постфикс: "; key="a4"; value=""; edit_width=28; edit_limit=60;}
}
spacer_1;
:column {label=" Параметры размещаемого текста";
:row {
:text {label= " Слой: "; width=20;}
opup_list {key="b1"; is_enabled=true; label=""; list=""; width=30;}
}
:row {
:text {label= " Стиль текста: "; width=20;}
opup_list {key="b2"; is_enabled=true; label=""; list=""; width=30;}
}
:edit_box {label= " Высота текста: "; key="b3"; value=""; edit_width=28; edit_limit=60;}
:edit_box {label= " Сжатие: "; key="b4"; value=""; edit_width=28; edit_limit=60;}
:row {
:text {label= " Выравнивание: "; width=20;}
opup_list {key="b5"; is_enabled=true; label=""; list=""; width=30;}
}
}
spacer_1;
ok_cancel;
}
Error_Nachzn: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Нач. значение> введите числовое значение"; key="c1"; alignment=centered;}
spacer;
ok_button;
}
Error_Interv: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Интервал> введите числовое значение"; key="d1"; alignment=centered;}
spacer;
ok_button;
}
Error_Height: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Высота текста> введите числовое не отрицательное значение"; key="e1"; alignment=centered;}
spacer;
ok_button;
}
Error_Сompression: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Сжатие> введите числовое не отрицательное значение"; key="f1"; alignment=centered;}
spacer;
ok_button;
}
Error_Nachzn_Alf: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Нач. значение> введите прописную букву русского алфавита"; key="g1"; alignment=centered;}
spacer;
ok_button;
}
Error_Nachzn_Rimsk: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Нач. значение> введите целое числовое значение"; key="h1"; alignment=centered;}
spacer;
ok_button;
}
Error_Interv_Rimsk: dialog
{label = "Ошибка типа";
spacer;
:text_part {label="Ошибка: В поле <Интервал> введите целое числовое значение"; key="i1"; alignment=centered;}
spacer;
ok_button;
}
неверный тип аргумента: streamp nil
Команда:
Shagezood вне форума  
 
Автор темы   Непрочитано 15.05.2025, 10:12
#14
[MTL]


 
Регистрация: 09.01.2018
Санкт-Петербург
Сообщений: 37


Shagezood, вероятно, ошибка происходит на этапе записи DCL-диалога во временный файл. В тексте LISP вот эта строка:
Код:
[Выделить все]
 (setq file (strcat (vl-string-right-trim                                                                     ; убирает в конце строки все перечисленные символы
                                          (vl-list->string '(92))
                                          (vla-get-tempfilepath (vla-get-files
                                                                      (vla-get-preferences
                                                                                 (vlax-get-acad-object))        ; значение каталога временных файлов AutoCAD
                                                                 )                                              
                                          )                                                                     
                       )                                                                                        
                       "\\AutoNum_M.DCL"
              )                                                                                                 ; конец strcat

         handle (open file "w")                                                                                 ; открывает файл на запись
    )
Подробнее об этом здесь: https://autolisp.ru/2010/03/15/dcl-dialogs-create/
Попробуйте вместо
Код:
[Выделить все]
 (vla-get-tempfilepath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))
вставить
Код:
[Выделить все]
 (getenv "temp")
или
Код:
[Выделить все]
 (getenv "tmp")
Используете ли вы LiSP программы, которые вызывают дополнительные диалоговые окна? Проблем не бывает?
[MTL] вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Lisp нумерация по произвольной траектории



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Нумерация точек линии AcidBurn23071985 Поиск исполнителей 0 01.11.2018 23:31
LISP. Отрисовка произвольной трассы из отрезков и дуг. Profan Готовые программы 40 02.08.2011 14:35
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19