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

Вернуться   Форум DWG.RU > Поиск литературы, чертежей, моделей и прочих материалов > Есть ли у кого лисп вычисления и замены чисел в автокаде?↓↓↓

Есть ли у кого лисп вычисления и замены чисел в автокаде?↓↓↓

Ответ
Поиск в этой теме
Непрочитано 06.02.2023, 07:10 #1
Есть ли у кого лисп вычисления и замены чисел в автокаде?↓↓↓
Jek30
 
Регистрация: 19.08.2022
Сообщений: 71

Суть в следующем: Имеется множество чисел (отметки высот) (записанные как МТекст), и нужно чтобы от всех выделенных мной чисел, автоматически отнялось например число "35", то есть например одно из этих выделенных чисел имело значение "135" → нажал на лисп→ и это число стало 100. И чтобы точно также все остальные выделенные числа уменьшились разом на "35". Есть ли у кого-нибуть такая штука? Заранее спасибо! )))

Последний раз редактировалось Jek30, 07.02.2023 в 06:12.
Просмотров: 744
 
Непрочитано 06.02.2023, 09:00
#2
Cfytrr

Балка на балку, кирпич на кирпич...
 
Регистрация: 09.10.2007
Питер
Сообщений: 4,819
Отправить сообщение для Cfytrr с помощью Skype™


Вот лисп который работает с текстовыми цыфирями (не с Мтекстом) умеет делить складывать и вычетать у группы текстов
Вложения
Тип файла: lsp mathtext.lsp (4.5 Кб, 11 просмотров)
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Автор темы   Непрочитано 06.02.2023, 09:03
#3
Jek30


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


Цитата:
Сообщение от Cfytrr Посмотреть сообщение
Вот лисп который работает с текстовыми цыфирями (не с Мтекстом) умеет делить складывать и вычетать у группы текстов
Спасибо!

----- добавлено через ~21 ч. -----
Если кому понадобится, то вот нашел на просторах двг: ↓↓↓


(defun C:DOTEXT ( / ent ss str do K lst)
;helper function. Unformat Mtext
(defun mip_MTEXT_Unformat ( Mtext / text Str )
(setq Text "")
(while (/= Mtext "")
(cond
((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")
(setq Mtext (substr Mtext 3) Text (strcat Text Str)))
((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))
((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")
(setq Mtext (substr Mtext 3)))
((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
(setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))
((wcmatch (strcase (substr Mtext 1 2)) "\\P")
(if (or(= " " (substr Text (strlen Text)))
(= " " (substr Mtext 3 1)))
(setq Mtext (substr Mtext 3))
(setq Mtext (substr Mtext 3) Text (strcat Text " "))))
((wcmatch (strcase (substr Mtext 1 2)) "\\S")
(setq Str (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
Text (strcat Text (vl-string-translate "#^\\" "/^\\" Str))
Mtext (substr Mtext (+ 4 (strlen Str)))))
(t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))
))
Text
)
;helper function
(defun str-str-lst (str pat / i)
(cond ((= str "") nil)
((setq i (vl-string-search pat str))
(cons (substr str 1 i)
(str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
) ;_ cons
)
(t (list str))
) ;_ cond
) ;_ defun

;;Действие с объектом
;;ent - vla or ename object of text
;;do - действие
;;K - коэффициент действия (do <значение текста> K)
;;
(defun dotext ( ent do K / str res)
(if (= (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent)))
(if (not (numberp K))(if (or (equal do /)(equal do *))(setq K 1)(setq K 0)))
(if (and (equal do /)(zerop K))(setq K 1))
(setq str (str-str-lst (vla-get-textstring ent) "\\P")
str (mapcar '(lambda(x)(mip_mtext_unformat x)) str)
str (mapcar '(lambda(x)(vl-string-translate "," "." (vl-string-trim "%UuoOcC \t" x))) str)
res (mapcar 'atof str)
res (mapcar '(lambda(nu)(do nu K)) res)
res (apply 'strcat
(mapcar '(lambda(x)(strcat (rtos x 2 2) "\\P")) res))
res (vl-string-right-trim "\\P" res)
);_setq
(vla-put-textstring ent res)
)
(vl-load-com)
(while (not(member (setq str (substr (getstring "\nУкажите действие (+ - * /): ") 1 1)) '("+" "*" "-" "/")))
(princ " * неверно* Нужно набрать + - * / "))
(cond ((= str "*")(setq do *)(initget 1))
((= str "+")(setq do +)(initget 1))
((= str "-")(setq do -)(initget 1))
((= str "/")(setq do /)(initget 3))
(t (setq do nil)))
(setq K (getreal "\nУкажите коэффициент: "))
(princ "\nВыберите текст < выход >")
(if (and do (setq ss (ssget '((0 . "*TEXT")))))
(progn
(setq lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach obj lst
(if (vlax-write-enabled-p obj)
(vl-catch-all-apply 'dotext (list obj do K))
(princ "\nТекст на замороженном слое")
)
)
)
)
(princ)
)
(princ "\nНаберите DOTEXT в командной строке")

Последний раз редактировалось Jek30, 07.02.2023 в 06:17.
Jek30 вне форума  
Ответ
Вернуться   Форум DWG.RU > Поиск литературы, чертежей, моделей и прочих материалов > Есть ли у кого лисп вычисления и замены чисел в автокаде?↓↓↓

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
подскажите. где скачать книгу про Revit Mep ..... есть у кого... 8914 Поиск литературы, чертежей, моделей и прочих материалов 3 07.03.2013 18:04
Сортамент сборных железобетонных конструкций у кого есть ? bybs Поиск литературы, чертежей, моделей и прочих материалов 8 13.08.2012 13:48
Есть ли у кого шрифт "пишущая машинка"? URKA Разное 14 26.07.2009 17:19