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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объединение функций

Объединение функций

Ответ
Поиск в этой теме
Непрочитано 28.11.2008, 13:17 #1
Объединение функций
Holon
 
CNC
 
Israel
Регистрация: 07.07.2007
Сообщений: 302

Существуют две функции, которые по отдельности прекрасно работают,
первая при "клике" на блок возвращает его имя, и потом по имени блока я могу произвести его вставку .......
Вторая Возвращает значение гиперссылки, если есть возможность объеденить эти две функции,
чтобы при одном "клике" на блок мне возвращались значения: "имя блока" и "параметры гипперссылки".

Код:
[Выделить все]
;;;************************ Makswell ***********************
(defun c:test (/ b_name pt scale)
  (setq
    b_name (vla-get-EffectiveName(vlax-ename->vla-object (car (entsel "Select block"))))
    scale  1
    pt     (getpoint "\n >> Insertion Point >> \n")
  );end_setq
   (vl-cmdf "-insert" b_name pt scale scale 0 )
);end_defun

;;;************************ Alaspher ***********************
(defun c:demo (/ h  url description URLNamedLocation )
 (vlax-for h (vla-get-hyperlinks (vlax-ename->vla-object (car (entsel))))
   (setq
 url              (print (vla-get-url h))
 description      (print (vla-get-URLDescription h))
 URLNamedLocation (print (vla-get-URLNamedLocation h))
   ); end_setq 
   )
(princ)
);end_defun
Просмотров: 3096
 
Непрочитано 28.11.2008, 13:26
#2
Кулик Алексей aka kpblc
Moderator

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


А тебе как надо возвращать? Как список или как 2 разные переменные?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.11.2008, 13:31
#3
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Переменные
Holon вне форума  
 
Непрочитано 28.11.2008, 13:35
#4
Кулик Алексей aka kpblc
Moderator

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


Как вариант для списка:
Код:
[Выделить все]
(defun test1 (/ ent res)
  (vl-load-com)
  (if (and (= (type (setq ent (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (car (entsel "\nУкажи блок <Отмена> : "))
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget ent))) "INSERT")
           ) ;_ end of and
    (setq ent (vlax-ename->vla-object ent)
          res (list (cons "name"
                          (if (vlax-property-available-p ent 'effectivename)
                            (vla-get-effectivename ent)
                            (vla-get-name ent)
                            ) ;_ end of if
                          ) ;_ end of cons
                    (cons "hyper"
                          ((lambda (/ lst)
                             (vlax-for item (vla-get-hyperlinks ent)
                               (setq lst
                                      (cons
                                        (list (cons "url" (vla-get-url item))
                                              (cons "descr" (vla-get-urldescription item))
                                              (cons "location" (vla-get-urlnamedlocation item))
                                              ) ;_ end of list
                                        lst
                                        ) ;_ end of cons
                                     ) ;_ end of setq
                               ) ;_ end of vlax-for
                             (reverse lst)
                             ) ;_ end of lambda
                           )
                          ) ;_ end of cons
                    ) ;_ end of list
          ) ;_ end of setq
    ) ;_ end of if
  res
  )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.11.2008, 13:39
#5
Кулик Алексей aka kpblc
Moderator

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


Для переменных:
Код:
[Выделить все]
(defun test2 (name url / ent res)
  ; (test2 'result-name 'result-url)
  ; после выполнения result-name -> имя блока
  ; resule-url -> список вида '((("url" . "D:\\dwgru\\Чертеж1.dwg") ("descr" . "D:\\dwgru\\Чертеж1.dwg") ("location" . "")))
  (vl-load-com)
  (if (and (= (type (setq ent (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (car (entsel "\nУкажи блок <Отмена> : "))
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget ent))) "INSERT")
           ) ;_ end of and
    (progn
      (setq ent (vlax-ename->vla-object ent))
      (set name
           (if (vlax-property-available-p ent 'effectivename)
             (vla-get-effectivename ent)
             (vla-get-name ent)
             ) ;_ end of if
           ) ;_ end of set
      (set url
           ((lambda (/ lst)
              (vlax-for item (vla-get-hyperlinks ent)
                (setq lst
                       (cons
                         (list (cons "url" (vla-get-url item))
                               (cons "descr" (vla-get-urldescription item))
                               (cons "location" (vla-get-urlnamedlocation item))
                               ) ;_ end of list
                         lst
                         ) ;_ end of cons
                      ) ;_ end of setq
                ) ;_ end of vlax-for
              (reverse lst)
              ) ;_ end of lambda
            )
           ) ;_ end of set
      ) ;_ end of progn
    ) ;_ end of if
  )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.11.2008, 13:52
#6
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Большее спасибо :-)
Holon вне форума  
 
Автор темы   Непрочитано 28.11.2008, 19:47
#7
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Функция test1 работает, и возвращает список следующего вида:
Код:
[Выделить все]
(("name" . "RR") ("hyper" (("url" . "") ("descr" . "test 
hyperlink") ("location" . ",Model"))))
как мне из этого списка вернуть значения сильно много скобок в списке :-),
Ну скажем "name" нет проблем вернуть
Код:
[Выделить все]
(cdr(assoc "name" res))
,а вот "descr" немного сложнее
Holon вне форума  
 
Непрочитано 28.11.2008, 21:16
#8
VVA

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


Вот вариант в "одну" строчку
Код:
[Выделить все]
(defun test1 (/ ent res)
  (vl-load-com)
  (if (and (= (type (setq ent (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (car (entsel "\nУкажи блок <Отмена> : "))
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget ent))) "INSERT")
           ) ;_ end of and
    (setq ent (vlax-ename->vla-object ent)
          res (append (list(cons "name"
                          (if (vlax-property-available-p ent 'effectivename)
                            (vla-get-effectivename ent)
                            (vla-get-name ent)
                            ) ;_ end of if
                          ) ;_ end of cons
                    )
                          ((lambda (/ lst)
                             (vlax-for item (vla-get-hyperlinks ent)
                               (setq lst (append lst  (list
						 (cons "url" (vla-get-url item))
						 (cons "descr" (vla-get-urldescription item))
						 (cons "location" (vla-get-urlnamedlocation item))
						 )
				     )
				     )
				     );_ end of vlax-for
                             ) ;_ end of lambda
                           )
                          
                    ) ;_ end of list
          ) ;_ end of setq
    ) ;_ end of if
  res
  )
Цитата:
,а вот "descr" немного сложнее
Код:
А потом assoc
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.11.2008, 21:51
#9
Кулик Алексей aka kpblc
Moderator

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


Лучше
Код:
[Выделить все]
(cdr (assoc "descr" (cdr (assoc "hyper"))))
ИМХО, как всегда...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.11.2008, 12:40
#10
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Всем спасибо,
есть вот еще один вопрос, если возмозно вытащить линейную длинну выделенного блока или хотябы его площадь?
Holon вне форума  
 
Непрочитано 30.11.2008, 22:36
#11
Кулик Алексей aka kpblc
Moderator

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


У блока нет понятий длины и площади. Да и не должно быть - ведь в него может входить все что угодно. Какая площадь, например, у атрибута? А у значения атрибута? А какая длина у SOLID?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.12.2008, 13:24
#12
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Вот такое решение:
Код:
[Выделить все]
(setq b_name (cdr(assoc "name" res))
      pt     (getpoint "\n Insertion Point  \n")
      scale   1
      );_end of setq
  (vl-cmdf "-insert" b_name pt scale scale 0 )
  (setq blk (entlast))
  (setq obj (vlax-ename->vla-object blk))
  (vla-GetBoundingBox obj 'MinPt 'MaxPt)
  (setq MinPt (vlax-safearray->list MinPt)
        MaxPt (vlax-safearray->list MaxPt)
  );setq
  (VL-CMDF "_dimlinear" MinPt MaxPt "V" "@ -15,0")
  (VL-CMDF "_dimlinear" MinPt MaxPt "H" "@ 0,10")
Holon вне форума  
 
Непрочитано 01.12.2008, 13:25
#13
Кулик Алексей aka kpblc
Moderator

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


Holon, мне кажется, что ты с темой промахнулся. Прилично так промахнулся...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.12.2008, 13:35
#14
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Алексей вполне возможно, неточное изложение задачи, и определение понятий, для меня ты большой авторитет, я учту твои замечания.
Holon вне форума  
 
Непрочитано 01.12.2008, 14:32
#15
Кулик Алексей aka kpblc
Moderator

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


#12 по идее должен находиться в теме http://forum.dwg.ru/showthread.php?p=320365&#post320365 . Или нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объединение функций

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение ячеек таблиц игорёк Программирование 3 20.08.2008 13:47
Как связать несколько "Defun" функций в одну? BARS_1985 Программирование 6 02.07.2008 13:02
Лицензия на выполнение функций заказчика-застройщика Кочетков Андрей Прочее. Архитектура и строительство 4 17.05.2008 22:01
Объединение лицензий MEP 2008 RedScorp AutoCAD 6 15.12.2007 16:08