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

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

Изменить точность и единицы поля в лиспе

Ответ
Поиск в этой теме
Непрочитано 14.04.2023, 10:24 #1
Изменить точность и единицы поля в лиспе
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 451

Подскажите, пожалуйста, как правильно изменить точность и единицы поля
В этом коде поле вида 256.500000
А нужно в десятичных единицах (%lu2), с точностью до 2 д.п. (%pr2).
Как правильно добавить эту строчку \f "%lu2%pr2">%"?
Код:
[Выделить все]
 ;; TEXT SUM TO FIELD
;;
(defun c:Fsum (/ lst pt ss)
 (vl-load-com)
 (prompt "\nSelect text to add numbers.")
 (if (setq ss (ssget '((0 . "TEXT,MTEXT"))))
   (progn
     (setq pt (vlax-3D-Point (getpoint "\n Select Point: ")))
     (setq lst
            (strcat
              "%<\\AcExpr \("
              (vl-string-right-trim
                "+"
                (apply 'strcat
                       (mapcar
                         '(lambda (x)
                            (strcat
                              "%<\\AcObjProp Object(%<\\_ObjId "
                              (itoa x)
                              ">%).TextString>% +"
                            )
                          )
                         (mapcar
                           'vla-get-objectid
                           (mapcar
                             'vlax-ename->vla-object
                             (vl-remove-if 'listp
                               (mapcar 'cadr (ssnamex ss)))
                           )
                         )
                       )
                )
              )
              "\)>%"
            )
     )
     (vla-addMText
       (vla-get-modelspace
         (vla-get-ActiveDocument
           (vlax-get-acad-object)
         )
       )
       pt
       0.0
       lst
     )
   )
 )
 ;(princ lst)
 (princ)
)
;;
;;WIZ_12JAN10
Просмотров: 827
 
Непрочитано 14.04.2023, 18:50
#2
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Интересная задачка. Тут ведь как этот механизм у них поступает? Поскольку в текстовых полях, которые суммирутся, он оперирует строками, а не числами, назначить точность внутри лямбды для каждого слагаемого не выйдет. Она назначается вручную в редакторе поля уже в общей формуле вида:
Код:
[Выделить все]
<\AcExpr (%<\_FldPtr 1624386672>% +%<\_FldPtr 1624457872>%)>%
Поэтому не удаются попытки замены подстроки перед созданием Мтекста "в лоб", к примеру:
Код:
[Выделить все]
 (setq lst (vl-string-subst " \\f \"%lu2%pr2\">%" ">%" lst (- (strlen lst) 3)))
Полез глубже и решил попробовать поработать с кодом поля только что созданного Мтекста:
Код:
[Выделить все]
 (setq obj (vlax-ename->vla-object (entlast)))
(setq fld (vla-FieldCode obj))
(setq lst (vl-string-subst " \\f \"%lu2%pr2\">%" ">%" fld (- (strlen fld) 3)))
(vla-put-TextString obj lst)
Вроде получилось, поле даже обновляется при обновлении исходных Мтекстов, но есть большая ложка дёгтя, даже две: при попытке открыть этот Мтекст поле "слетает", а при повторном открытии файла Мтекст вообще пропадает из чертежа.

Также заметил, что меняются идентификаторы кодов полей при любых попытках вручную изменить формат поля в окне редактора полей. Вспомнил про функцию от VVA - Get-ObjectID-x86-x64, которую следует использовать для снятия ID объектов в х64 системах - но это на результат не повлияло.

На этом мои мысли пока закончились.
skkkk вне форума  
 
Непрочитано 14.04.2023, 21:17
1 | #3
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Ingpro, skkkk,
строка 31

Код:
[Выделить все]
 
(defun c:Fsum (/ lst ss)
 (vl-load-com)
 (prompt "\nSelect text to add numbers.")
 (if (setq ss (ssget '((0 . "TEXT,MTEXT"))))
   (progn
     (setq lst
            (strcat
              "%<\\AcExpr \("
              (vl-string-right-trim
                "+"
                (apply 'strcat
                       (mapcar
                         '(lambda (x)
                            (strcat
                              "%<\\AcObjProp Object(%<\\_ObjId "
                              (itoa x)
                              ">%).TextString>% +"
                            )
                          )
                         (mapcar
                           'vla-get-objectid
                           (mapcar
                             'vlax-ename->vla-object
                             (vl-remove-if 'listp
                               (mapcar 'cadr (ssnamex ss)))
                           )
                         )
                       )
                )
              )
              "\) \\f %lu2%pr2>%"
            )
     )
     (vla-addMText
       (vla-get-modelspace
         (vla-get-ActiveDocument
           (vlax-get-acad-object)
         )
       )
       (vlax-3D-Point (getpoint "\n Select Point: "))
       0.0
       lst
     )
   )
 )
 ;(princ lst)
 (princ)
)
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 14.04.2023, 22:29
#4
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Ingpro, skkkk,
строка 31
Огромная благодарность, koMon, всё работает, 2 знака после зпт!!!
Была попытка добавить в 31 строку перед скобкой "\f %lu2%pr2>%"), но не сработало, оказывается надо после...
skkkk, спасибо за мысли...
Ingpro вне форума  
 
Непрочитано 14.04.2023, 23:49
#5
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Offtop: Интересно, где ж это я накосорезил?
Ну уже неинтересно, честно говоря.
Давненько не лисповал. А жаль.
А вот KoMon - красавчик. Умеет, практикует
skkkk вне форума  
 
Непрочитано 15.04.2023, 11:10
#6
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от skkkk Посмотреть сообщение
накосорезил
поле по своей сути это односложная или многосложная строка к которой можно приложить соответствующее его выводному значению форматирование в конце этой строки.
__________________
K Lisp
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Изменить точность и единицы поля в лиспе

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрически изменяемая система (Лира) Кулик Алексей aka kpblc Лира / Лира-САПР 679 01.12.2023 08:48
Как изменить точность отображения чисел в отчетах? olamot Advance Steel 2 31.10.2019 20:19
Помогите убрать команду которая появляется после работы с таблицей AutoCAD 2017 и изменить цвет фона вставленного поля ArtistAvidaDollars AutoCAD 3 26.03.2018 21:15
Поля AutoCAD + Windows vanfil AutoCAD 6 07.04.2010 10:37
Как изменить входные единицы измерения в SCADe? OMMM Расчетные программы 10 19.02.2009 17:45