Функция dwgru-prepare-spds-list и СПДС 8,1
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Функция dwgru-prepare-spds-list и СПДС 8,1

Функция dwgru-prepare-spds-list и СПДС 8,1

Ответ
Поиск в этой теме
Непрочитано 25.04.2014, 17:41 #1
Функция dwgru-prepare-spds-list и СПДС 8,1
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Доброго.
Когда-то Крыс написал функцию для сбора информации из выносок СПДС.
До версии СПДС 8,0 работало нормально. В версии 8,1 работать перестало.
Ниже привожу код. Прошу умеющих людей вернуть к жизни этот код
Код:
[Выделить все]
 (defun _dwgru-prepare-spds-list ( lst / dict )
  (setq	dict
	 '(("ПЕРВАЯ СТРОКА" "String1")
	   ("ВТОРАЯ СТРОКА" "String2")
	   ("ВЫРАВНИВАНИЕ ТЕКСТА" "TextAlign")
           ("НОМЕР УЗЛА" "NodeNumber")
	  )
  )
  (mapcar '(lambda( x / tmp)
             (if (and
                   (= (car x) 301)
                   (setq tmp (cadr(assoc (strcase (cdr x)) dict)))
                   )
               (cons 301 tmp)
               x
             )
             )
          lst
          )
)
  
           
(defun _dwgru-get-spds-text-and-range (/ selset lst)
                                      ;|
*    Возвращает список строк выделенных выносок. В набор попадают узловые выноски,
* позиционные выноски, цепные и гребенчатые.
*    Параметры вызова:
	нет
*    Примеры вызова:
(_dwgru-get-spds-text)
	;
|;
  (if
    (and
      (= (type (setq selset (vl-catch-all-apply
                              (function (lambda () (ssget)))
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'pickset
         ) ;_ end of =
      (setq selset
             (vl-remove-if-not
               (function
                 (lambda (x)
                   (member (cdr (assoc 0 x))
                           '("spdsNotePosition"
                             ;"spdsNoteKnot" закомментировал тапорно, чтобы исключить из выбора узловые выноски
                             "spdsNoteComb"
                             "spdsNoteChain"
                             )
                           ) ;_ end of member
                   ) ;_ end of lambda
                 ) ;_ end of function
               (mapcar
                 (function (lambda (a)
                             (_dwgru-prepare-spds-list
                             (vl-remove-if-not
                               '(lambda (b) (member (car b) '(0 300 301 90)))
                               (entget a)
                               ) ;_ end of vl-remove-if-not
                              )
                             ) ;_ end of lambda
                           ) ;_ end of function
                 (_dwgru-conv-pickset-to-list selset)
                 ) ;_ end of mapcar
               ) ;_ end of vl-remove-if-not
            ) ;_ end of setq
      ) ;_ end of and
     (setq
       lst
        (mapcar
          (function
            (lambda (item)
              (cond
                ((= (cdr (assoc 0 item)) "spdsNoteKnot")
                 (append (mapcar
                           (function cdr)
                           (vl-remove-if-not
                             (function
                               (lambda (x)
                                 (= (car x) 300)
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             (reverse
                               (member '(301 . "TextAlign") ;ВЫРАВНИВАНИЕ ТЕКСТА
                                       (reverse (member
                                                  '(301 . "NodeNumber")  ; Номер узла
                                                  item))
                                       ) ;_ end of member
                               ) ;_ end of reverse
                             ) ;_ end of vl-remove-if-not
                           ) ;_ end of mapcar
                         (list 1)
                         ) ;_ end of append
                 )
                ((= (cdr (assoc 0 item)) "spdsNotePosition")
                 (append (mapcar
                           (function cdr)
                           (vl-remove-if-not
                             (function
                               (lambda (x)
                                 (= (car x) 300)
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             (member '(301 . "String1");Первая строка
                                     item)
                             ) ;_ end of vl-remove-if-not
                           ) ;_ end of mapcar
                         (list 1)
                         ) ;_ end of append
                 )
                ((member (cdr (assoc 0 item))
                         '("spdsNoteComb" "spdsNoteChain")
                         ) ;_ end of member
                 (append
                   (mapcar
                     (function cdr)
                     (vl-remove-if-not
                       (function
                         (lambda (x)
                           (= (car x) 300)
                           ) ;_ end of lambda
                         ) ;_ end of function
                       (reverse
                         (member '(301 . "TextAlign") ; Выравнивание текста
                                 (reverse (member '(301 . "String1") ;Первая строка
                                                  item))
                                 ) ;_ end of member
                         ) ;_ end of reverse
                       ) ;_ end of vl-remove-if-not
                     ) ;_ end of mapcar
                   (list (cdr (assoc 90 (reverse item))))
                   ) ;_ end of cons
                 )
                ) ;_ end of cond
              ) ;_ end of lambda
            ) ;_ end of function
          selset
          ) ;_ end of mapcar
       ) ;_ end of setq
     ) ;_ end of if
  lst
  ) ;_ end of defun
Просмотров: 3009
 
Непрочитано 25.04.2014, 23:42
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


У меня СПДС нет. Выполни над выноской
Код:
[Выделить все]
(entget(car(entsel)))
и результат сюда
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.04.2014, 10:30
#3
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Позиционная выноска

Код:
[Выделить все]
Command: (entget(car(entsel)))

Select object: ((-1 . <Entity name: 7ffff60d430>) (0 . "SPDSNOTEPOSITION") (330 . <Entity name: 7ffff9fd980>) (5 . "20763") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (48 . 0.2) (370 . 25) (100 . "SPDSNOTEPOSITION") (100 . "SPDSNOTEPOSITION") (90 . 1) (301 . "Name") (300 . "3") (301 . "Info") (300 . "Позиционная выноска\r\n3\r\nТруба 89х3.5, L=1000") (301 . "Scale") (40 . 100.0) (301 . "CutAcElements") (290 . 1) (301 . "WipeOut") (290 . 0) (301 . "Text style") (300 . "CS Arm Unicode") (301 . "String1") (300 . "3") (301 . "String2") (300 . "Труба 89х3.5, L=1000") (301 . "TextAlign") (90 . 1) (301 . "RackDir") (40 . 0.0) (301 . "TextSize") (40 . 2.5) (301 . "SmallTextSize") (40 . 2.5) (301 . "AngleStep") (40 . 0.0))

Гребенчатая выноска

Код:
[Выделить все]
Command: (entget(car(entsel)))

Select object: ((-1 . <Entity name: 7ffff60d400>) (0 . "SPDSNOTECOMB") (330 . <Entity name: 7ffff9fd980>) (5 . "20760") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (48 . 0.2) (370 . 25) (100 . "SPDSNOTECOMB") (100 . "SPDSNOTECOMB") (90 . 1) (301 . "Name") (300 . "1") (301 . "Info") (300 . "Гребенчатая выноска\r\n1\r\nТруба 89х3.5, L=1000") (301 . "Scale") (40 . 100.0) (301 . "CutAcElements") (290 . 1) (301 . "WipeOut") (290 . 0) (301 . "Text style") (300 . "GOST 2.304") (301 . "String1") (300 . "1") (301 . "String2") (300 . "Труба 89х3.5, L=1000") (301 . "TextAlign") (300 . "По центру") (301 . "RackDir") (40 . 0.0) (301 . "TextSize") (40 . 2.5) (301 . "AngleStep") (40 . 0.0) (301 . "LeadersCount") (90 . 3))
Цепная выноска

Код:
[Выделить все]
Command: (entget(car(entsel)))

Select object: ((-1 . <Entity name: 7ffff60d410>) (0 . "SPDSNOTECHAIN") (330 . <Entity name: 7ffff9fd980>) (5 . "20761") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (48 . 0.2) (370 . 25) (100 . "SPDSNOTECHAIN") (100 . "SPDSNOTECHAIN") (90 . 1) (301 . "Name") (300 . "2") (301 . "Info") (300 . "Цепная выноска\r\n2\r\nТруба 89х3.5, L=1000") (301 . "Scale") (40 . 100.0) (301 . "CutAcElements") (290 . 1) (301 . "WipeOut") (290 . 0) (301 . "Text style") (300 . "GOST 2.304") (301 . "String1") (300 . "2") (301 . "String2") (300 . "Труба 89х3.5, L=1000") (301 . "TextAlign") (300 . "По центру") (301 . "RackDir") (40 . 180.0) (301 . "TextSize") (40 . 2.5) (301 . "LeadersCount") (90 . 3))
----- добавлено через ~56 мин. -----
Потыкал, поменял названия выносок в коде (написал их заглавными) и все заработало
VVA Спасибо за отклик.

Последний раз редактировалось Red Nova, 26.04.2014 в 11:28.
Red Nova вне форума  
 
Непрочитано 26.04.2014, 12:44
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Без проверки. Сделал перевод группы 0 к верхнему регистру при сравнении. Должно работать и в СПДС 8 и а СПДС 8.1

Код:
[Выделить все]
 
(defun _dwgru-prepare-spds-list ( lst / dict )
  (setq	dict
	 '(("ПЕРВАЯ СТРОКА" "String1")
	   ("ВТОРАЯ СТРОКА" "String2")
	   ("ВЫРАВНИВАНИЕ ТЕКСТА" "TextAlign")
           ("НОМЕР УЗЛА" "NodeNumber")
	  )
  )
  (mapcar '(lambda( x / tmp)
             (if (and
                   (= (car x) 301)
                   (setq tmp (cadr(assoc (strcase (cdr x)) dict)))
                   )
               (cons 301 tmp)
               x
             )
             )
          lst
          )
)
  
           
(defun _dwgru-get-spds-text-and-range (/ selset lst)
                                      ;|
*    Возвращает список строк выделенных выносок. В набор попадают узловые выноски,
* позиционные выноски, цепные и гребенчатые.
*    Параметры вызова:
	нет
* Редакция  VVA 2014-04-26 - перевод содержимого группы 0 к верхнему регистру
* http://forum.dwg.ru/showthread.php?t=111268
*    Примеры вызова:
(_dwgru-get-spds-text)
	;
|;
  (if
    (and
      (= (type (setq selset (vl-catch-all-apply
                              (function (lambda () (ssget)))
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'pickset
         ) ;_ end of =
      (setq selset
             (vl-remove-if-not
               (function
                 (lambda (x)
                   (member (strcase(cdr (assoc 0 x))) ;_ VVA 2014-04-26
                           '("SPDSNOTEPOSITION" ;_ VVA 2014-04-26
                             ;"SPDSNOTEKNOT" ЗАКОММЕНТИРОВАЛ ТАПОРНО, ЧТОБЫ ИСКЛЮЧИТЬ ИЗ ВЫБОРА УЗЛОВЫЕ ВЫНОСКИ
                             "SPDSNOTECOMB" ;_ VVA 2014-04-26
                             "SPDSNOTECHAIN" ;_ VVA 2014-04-26
                             )
                           ) ;_ end of member
                   ) ;_ end of lambda
                 ) ;_ end of function
               (mapcar
                 (function (lambda (a)
                             (_dwgru-prepare-spds-list
                             (vl-remove-if-not
                               '(lambda (b) (member (car b) '(0 300 301 90)))
                               (entget a)
                               ) ;_ end of vl-remove-if-not
                              )
                             ) ;_ end of lambda
                           ) ;_ end of function
                 (_dwgru-conv-pickset-to-list selset)
                 ) ;_ end of mapcar
               ) ;_ end of vl-remove-if-not
            ) ;_ end of setq
      ) ;_ end of and
     (setq
       lst
        (mapcar
          (function
            (lambda (item)
              (cond
                ((= (strcase(cdr (assoc 0 item))) "SPDSNOTEKNOT") ;_ VVA 2014-04-26
                 (append (mapcar
                           (function cdr)
                           (vl-remove-if-not
                             (function
                               (lambda (x)
                                 (= (car x) 300)
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             (reverse
                               (member '(301 . "TextAlign") ;ВЫРАВНИВАНИЕ ТЕКСТА
                                       (reverse (member
                                                  '(301 . "NodeNumber")  ; Номер узла
                                                  item))
                                       ) ;_ end of member
                               ) ;_ end of reverse
                             ) ;_ end of vl-remove-if-not
                           ) ;_ end of mapcar
                         (list 1)
                         ) ;_ end of append
                 )
                ((= (strcase(cdr (assoc 0 item))) "SPDSNOTEPOSITION") ;_ VVA 2014-04-26
                 (append (mapcar
                           (function cdr)
                           (vl-remove-if-not
                             (function
                               (lambda (x)
                                 (= (car x) 300)
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             (member '(301 . "String1");Первая строка
                                     item)
                             ) ;_ end of vl-remove-if-not
                           ) ;_ end of mapcar
                         (list 1)
                         ) ;_ end of append
                 )
                ((member (strcase(cdr (assoc 0 item)))       ;_ VVA 2014-04-26
                         '("SPDSNOTECOMB" "SPDSNOTECHAIN")   ;_ VVA 2014-04-26
                         ) ;_ end of member
                 (append
                   (mapcar
                     (function cdr)
                     (vl-remove-if-not
                       (function
                         (lambda (x)
                           (= (car x) 300)
                           ) ;_ end of lambda
                         ) ;_ end of function
                       (reverse
                         (member '(301 . "TextAlign") ; Выравнивание текста
                                 (reverse (member '(301 . "String1") ;Первая строка
                                                  item))
                                 ) ;_ end of member
                         ) ;_ end of reverse
                       ) ;_ end of vl-remove-if-not
                     ) ;_ end of mapcar
                   (list (cdr (assoc 90 (reverse item))))
                   ) ;_ end of cons
                 )
                ) ;_ end of cond
              ) ;_ end of lambda
            ) ;_ end of function
          selset
          ) ;_ end of mapcar
       ) ;_ end of setq
     ) ;_ end of if
  lst
  ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.04.2014, 13:51
#5
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Cпасибо
Red Nova вне форума  
 
Непрочитано 27.04.2014, 12:16
#6
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Offtop: удобно копировать список 'entget в новое окно редактора, и делать на нем автоформат
kakt00z вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Функция dwgru-prepare-spds-list и СПДС 8,1



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Express Tools Perezz!! AutoCAD 483 13.02.2015 10:57
привязки при изменении динамического блока через grread Eghor123 Программирование 8 04.02.2012 17:01
(GRREAD) и привязка Ева Программирование 17 18.12.2009 09:10
Работоспособность программы написанной очень давно. faust999 Программирование 1 05.06.2009 08:06
3D Konstruktor для проектировщиков КМ. Дима_ Готовые программы 17 10.07.2008 10:03