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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вставка множества значений атрибутов, текста через запятую в текст в виде полей

Вставка множества значений атрибутов, текста через запятую в текст в виде полей

Ответ
Поиск в этой теме
Непрочитано 09.12.2021, 14:39 #1
Вставка множества значений атрибутов, текста через запятую в текст в виде полей
Павлов Андрей
 
Инженер-строитель
 
Республика Беларусь
Регистрация: 27.05.2004
Сообщений: 67

Здравствуйте.
Собственно суть просьбы :
По адресу http://forums.autodesk.com/t5/visual...755152#M308473 был найден lisp , который я использовал для
формы штампа на чертеже , где хранится информация о содержимом листа . Немного только напрягает, что информация вставляется почему-то в обратном порядке той последовательности , что я указывал. И ,приходится , чтобы было правильно в содержании листа тыкать все в обратном порядке ... Подскажите , где изменить , чтобы было в соответствии с указанным порядке на чертеже .
Вот сам код :
Код:
[Выделить все]
 ;; http://forums.autodesk.com/t5/visual...755152#M308473
;; by pbejse
;; modified by hms, to allow multiple strings selection, and paste all fields separated by commas in a single text line - 04-12-2016
(vl-load-com)
(defun c:ConstructField3 (/ elst enam enm2 fldexp lst objid x)
    (while (progn
               (setvar 'ERRNO 0)
               (setq enam (car (nentsel "\nSelect TEXT/MTEXT/ATTRIBUTE/LEADER/MULTILEADER <exit>: ")))
               (cond
                   ((= (getvar 'ERRNO) 7)
                    (princ "\nMissed, try again... ")
                   )
                   ((null enam)
                    nil
                   )
                   ((and (setq elst (entget enam))
                         (setq elst (member (cdr (assoc 0 elst)) '("ATTRIB" "TEXT" "MTEXT" "*LEADER" "MULTILEADER")))
                    )
                    (setq objid (vla-get-ObjectId (vlax-ename->vla-object enam)))
                    (setq fldexp (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa objid) ">%).TextString>%"))
                    (setq lst (cons fldexp lst))
                   )
                   (T
                    (princ "\nSelected Entity is Not valid for Field value.")
                   )
               )
           )
    )
    (if lst
        (progn
            (setvar "cmdecho" 0)
            (setvar 'ctab (tab))
            (while (progn
                       (setvar 'ERRNO 0)
                       (setq enm2 (car (nentsel "\nSelect String <exit>: ")))
                       (cond
                           ((= (getvar 'ERRNO) 7)
                            (princ "\nMissed, try again... ")
                           )
                           ((null enm2)
                            nil
                           )
                           ((member (cdr (assoc 0 (entget enm2))) '("ATTRIB" "TEXT" "MTEXT" "*leader" "multileader"))
                            (vla-put-textstring
                                (vlax-ename->vla-object enm2)
                                (vl-string-left-trim "," (apply 'strcat (mapcar '(lambda (x) (strcat ", " x)) lst)))
                            )
                            (setvar "cmdecho" 1)
                            (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)
                           )
                           (T
                            (princ "\nSelected Entity is Not valid for Field value.")
                           )
                       )
                   )
            )
        )
    )
    (princ)
)

(defun tab (/ CDiaStr ListBoxDia StrDiaFnme lname)
;;;	pBe 12Jan2013	;;;
    (defun CDiaStr (/ fnSTR)
        (setq StrDiaFnme
                 (vl-filename-mktemp "tmp.DCL")
        )
        (setq fnSTR (open StrDiaFnme "a"))
        (write-line
            "dcl_settings : default_dcl_settings { audit_level = 3; }
  ListofLayoutTabs : dialog 
  { label = \"\"; key= \"Base\";
  : list_box { key = \"StrListS\"; 
  width = 20; height = 20; } spacer ;
  ok_cancel;
  }"        fnSTR
        )
        (close fnSTR)
        T
    )

    (defun ListBoxDia (DiaName Title Lst / el x llst)
        (setq StrDIA (load_dialog StrDiaFnme))
        (if (not (new_dialog DiaName StrDIA))
            (exit)
        )
        (start_list "StrListS")
        (mapcar 'add_list Lst)
        (end_list)
        (set_tile "Base" Title)
        (action_tile "StrListS" "(setq el (get_tile $key))")
        (action_tile "accept" "(done_dialog 1)(setq x T)")
        (action_tile "cancel" "(done_dialog 0)")
        (start_dialog)
        (unload_dialog StrDIA)
        (if x
            (read (strcat "(" el ")"))
        )
    )
    (cond ((and
               (setq llst (cons "Model" (layoutlist)))
               (CDiaStr)
               (setq lname (ListBoxDia
                               "ListofLayoutTabs"
                               "Select Layout Name"
                               llst
                           )
               )
               (vl-file-delete StrDiaFnme)
               (setvar 'ctab
                       (nth (car lname) llst)
               )
           )
          )
    )
    (nth (car lname) llst)
)
__________________
Andrey

Последний раз редактировалось Кулик Алексей aka kpblc, 10.12.2021 в 08:55.
Просмотров: 1208
 
Непрочитано 09.12.2021, 15:13
#2
trir


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


CODE]LISP]/LISP]/CODE]

Подшивки!!!
trir вне форума  
 
Автор темы   Непрочитано 09.12.2021, 16:18
#3
Павлов Андрей

Инженер-строитель
 
Регистрация: 27.05.2004
Республика Беларусь
Сообщений: 67


Подшивки!!!
В подшивке тоже сортирует в обратном порядке ....
__________________
Andrey
Павлов Андрей вне форума  
 
Непрочитано 09.12.2021, 16:42
#4
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,199


(setq lst (reverse (cons fldexp lst)))
Nike вне форума  
 
Автор темы   Непрочитано 09.12.2021, 16:44
#5
Павлов Андрей

Инженер-строитель
 
Регистрация: 27.05.2004
Республика Беларусь
Сообщений: 67


Прокатил правильно вот такой код :
Код:
[Выделить все]
 ;; http://forums.autodesk.com/t5/visual...755152#M308473
;; by pbejse
;; modified by hms, to allow multiple strings selection, and paste all fields separated by commas in a single text line - 04-12-2016
(vl-load-com)
(defun c:ConstructField3 (/ elst enam enm2 fldexp lst objid x)
    (while (progn
               (setvar 'ERRNO 0)
               (setq enam (car (nentsel "\nSelect TEXT/MTEXT/ATTRIBUTE/LEADER/MULTILEADER <exit>: ")))
               (cond
                   ((= (getvar 'ERRNO) 7)
                    (princ "\nMissed, try again... ")
                   )
                   ((null enam)
                    nil
                   )
                   ((and (setq elst (entget enam))
                         (setq elst (member (cdr (assoc 0 elst)) '("ATTRIB" "TEXT" "MTEXT" "*LEADER" "MULTILEADER")))
                    )
                    (setq objid (vla-get-ObjectId (vlax-ename->vla-object enam)))
                    (setq fldexp (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa objid) ">%).TextString>%"))
                    (setq lst (cons fldexp lst))
                   )
                   (T
                    (princ "\nSelected Entity is Not valid for Field value.")
                   )
               )
           )
    )
    (if lst
        (progn
            (setvar "cmdecho" 0)
            (setvar 'ctab (tab))
            (while (progn
                       (setvar 'ERRNO 0)
                       (setq enm2 (car (nentsel "\nSelect String <exit>: ")))
                       (cond
                           ((= (getvar 'ERRNO) 7)
                            (princ "\nMissed, try again... ")
                           )
                           ((null enm2)
                            nil
                           )
						   
                           ((member (cdr (assoc 0 (entget enm2))) '("ATTRIB" "TEXT" "MTEXT" "*leader" "multileader"))
                            (vla-put-textstring
                                (vlax-ename->vla-object enm2)
                                (vl-string-left-trim "," (apply 'strcat (reverse (mapcar '(lambda (x) (strcat ", " x)) lst))))
                            )
                            (setvar "cmdecho" 1)
                            (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)
                           )
                           (T
                            (princ "\nSelected Entity is Not valid for Field value.")
                           )
                       )
                   )
            )
        )
    )
    (princ)
)

(defun tab (/ CDiaStr ListBoxDia StrDiaFnme lname)
;;;	pBe 12Jan2013	;;;
    (defun CDiaStr (/ fnSTR)
        (setq StrDiaFnme
                 (vl-filename-mktemp "tmp.DCL")
        )
        (setq fnSTR (open StrDiaFnme "a"))
        (write-line
            "dcl_settings : default_dcl_settings { audit_level = 3; }
  ListofLayoutTabs : dialog 
  { label = \"\"; key= \"Base\";
  : list_box { key = \"StrListS\"; 
  width = 20; height = 20; } spacer ;
  ok_cancel;
  }"        fnSTR
        )
        (close fnSTR)
        T
    )

    (defun ListBoxDia (DiaName Title Lst / el x llst)
        (setq StrDIA (load_dialog StrDiaFnme))
        (if (not (new_dialog DiaName StrDIA))
            (exit)
        )
        (start_list "StrListS")
        (mapcar 'add_list Lst)
        (end_list)
        (set_tile "Base" Title)
        (action_tile "StrListS" "(setq el (get_tile $key))")
        (action_tile "accept" "(done_dialog 1)(setq x T)")
        (action_tile "cancel" "(done_dialog 0)")
        (start_dialog)
        (unload_dialog StrDIA)
        (if x
            (read (strcat "(" el ")"))
        )
    )
    (cond ((and
               (setq llst (cons "Model" (layoutlist)))
               (CDiaStr)
               (setq lname (ListBoxDia
                               "ListofLayoutTabs"
                               "Select Layout Name"
                               llst
                           )
               )
               (vl-file-delete StrDiaFnme)
               (setvar 'ctab
                       (nth (car lname) llst)
               )
           )
          )
    )
    (nth (car lname) llst)
)
; перед (mapcar поставил (reverse ,
В итоге получилась строка :
(vl-string-left-trim "," (apply 'strcat (reverse (mapcar '(lambda (x) (strcat ", " x)) lst))))
__________________
Andrey

Последний раз редактировалось Кулик Алексей aka kpblc, 10.12.2021 в 08:55.
Павлов Андрей вне форума  
 
Непрочитано 09.12.2021, 16:59
#6
Кулик Алексей aka kpblc
Moderator

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


Павлов Андрей, а код форматнуть не судьба?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.12.2021, 08:37
#7
Павлов Андрей

Инженер-строитель
 
Регистрация: 27.05.2004
Республика Беларусь
Сообщений: 67


Здравствуйте.
Пишу редко , поэтому нет навыка оформления сообщений. Прошу извинения .
Спасибо всем откликнувшимся .
__________________
Andrey
Павлов Андрей вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вставка множества значений атрибутов, текста через запятую в текст в виде полей

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка из Экселя через буфер в Автокад 2016 Scared AutoCAD 7 26.01.2019 12:02
как сделать ссылку текста на текст? pacific60x AutoCAD 10 07.09.2017 12:25
Почему, когда я ввожу текст после определенной буквы меняется стиль текста? ai_karamba AutoCAD 3 03.06.2014 08:44
не отображается текст в окне редактора текста Евгений Буш AutoCAD 12 23.07.2012 14:40
кто как подгоняет текст в основной надписи? (Допускаются ли в основной надписи различная высота текста в однотипных графах, а также сжатие текста?) Ax3 AutoCAD 35 20.10.2010 20:19