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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Преобразование variant или safearray в список

DwgRuLispLib: Преобразование variant или safearray в список

Ответ
Поиск в этой теме
Непрочитано 28.11.2007, 21:33 #1
DwgRuLispLib: Преобразование variant или safearray в список
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,787

Код:
[Выделить все]
(defun _dwgru-conv-value-vla-to-list (value)
                                     ;|
*    Преобразование vlax-variant и vlax-safearray в обычный список.
*    Примеры вызова:
;; #1:
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (getpoint))))
(_dwgru-conv-value-vla-to-list (vla-get-Coordinates point))	; '(1232.24 544.835 0.0)

;; #2:
(setq ent1 (vlax-ename->vla-object (entmakex '(list (0 . "LINE") (10 574.761 426.116 0.0) (11 1054.08 878.378 0.0))))
 ent2 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 967.833 561.795 0.0) (11 779.78 335.664 0.0)))))
(_dwgru-conv-value-vla-to-list (vla-IntersectWith ent1 ent2 acExtendNone))	; nil
(_dwgru-conv-value-vla-to-list (vla-IntersectWith ent1 ent2 acExtendBoth))	; '(1876.15 1654.04 0.0)
|;
  (cond
    ((= (type value) 'variant)
     (_dwgru-conv-value-vla-to-list (vlax-variant-value value))
     )
    ((= (type value) 'safearray)
     (if (>= (vlax-safearray-get-u-bound value 1) 0)
       (vlax-safearray->list value)
       ) ;_ end of if
     )
    (t value)
    ) ;_ end of cond
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 21691
 
Непрочитано 29.11.2007, 09:55
#2
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Предлагаю расширить функцию в "Преобразование значения в список", может даже переименовать, пока не поздно в _dwgru-value-to-list.
Добавить в cond дополнительные пункты:
Код:
[Выделить все]
((= (type value) 'list) value)
((= (type value) 'vla-object)
  (progn (setq tab nil)
         (if (vlax-property-available-p value "count")
           (vlax-for item value (setq tab (cons item tab)))
           (setq tab (list value))
           ) ;_ end if
         tab
         ) ;_ end progn
  )
((= (type value) 'pickset)
  (progn (repeat (setq tab  nil
                       item (sslength value)
                       ) ;_ end setq
           (setq tab (cons (ssname value (setq item (1- item))) tab))
           ) ;_ end repeat
         tab
         ) ;_ end progn
  )
(+ описать локальные переменные tab, item)

Последний раз редактировалось Евгений А., 29.11.2007 в 10:01.
Евгений А. вне форума  
 
Автор темы   Непрочитано 30.11.2007, 10:37
#3
Кулик Алексей aka kpblc
Moderator

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


тогда уж получится нечто типа
Код:
[Выделить все]
(defun _dwgru-conv-value-to-list (value)
                                 ;|
*    Преобразование vlax-variant и vlax-safearray в обычный список.
*    Примеры вызова:
;; #1:
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (getpoint))))
(_dwgru-conv-value-vla-to-list (vla-get-Coordinates point))	; '(1232.24 544.835 0.0)

;; #2:
(setq ent1 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 574.761 426.116 0.0) (11 1054.08 878.378 0.0))))
 ent2 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 967.833 561.795 0.0) (11 779.78 335.664 0.0)))))
(_dwgru-conv-value-to-list (vla-IntersectWith ent1 ent2 acExtendNone))	; nil
(_dwgru-conv-value-to-list (vla-IntersectWith ent1 ent2 acExtendBoth))	; '(1876.15 1654.04 0.0)
;;; Исправлен пример по замечанию VVA http://dwg.ru/f/showpost.php?p=188164&postcount=4
|;
  (cond
    ((= (type value) 'list) value)
    ((= (type value) 'variant)
     (_dwgru-conv-value-to-list (vlax-variant-value value))
     )
    ((= (type value) 'safearray)
     (if (>= (vlax-safearray-get-u-bound value 1) 0)
       (vlax-safearray->list value)
       ) ;_ end of if
     )
    ((and (= (type value) 'vla-object)
          (vlax-property-available-p value 'count)
          (> (vla-get-count value) 0)
          ) ;_ end of and
     ((lambda (/ res)
        (vlax-for item value
          (setq res (cons item res))
          ) ;_ end of vlax-for
        (reverse res)
        ) ;_ end of lambda
      )
     )
    ((= (type value) 'pickset)
     (mapcar 'vlax-ename->vla-object
             (vl-remove-if 'listp (mapcar 'cadr (ssnamex value)))
             ) ;_ end of mapcar
     )
    (t (list value))
    ) ;_ end of cond
  ) ;_ end of defun
Хотя, откровенно говоря, я бы наборы отдельно обрабатывал. Возможно, привычка. Будем избавляться
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 30.11.2007 в 11:22.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 11:19
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Очень даже ничего. Любое - в список.
Пару замечаний
1. В примечаниях к ф-ции вот здесь (entmakex '(list (0 . "LINE") или убери list или '. А то не рабочий пример

2.
Код:
[Выделить все]
(setq lst '(1 2 3))
(setq lst1 (vlax-make-variant (vlax-safearray-fill
   (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length Lst))))
   '(1 2 3))))
(setq lst2 (vlax-make-variant (vlax-safearray-fill
   (vlax-make-safearray vlax-vbInteger (cons 0 (1- (length Lst))))
   '(1 2 3))))
(_dwgru-conv-value-to-list lst1) ;(#<variant 3 1> #<variant 3 2> #<variant 3 3>) 
(_dwgru-conv-value-to-list lst2);(1 2 3)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.11.2007, 11:22
#5
Кулик Алексей aka kpblc
Moderator

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


Пример исправил. А вот пока с твоим lst1 что делать - еще не прикидывал.
---
Добавлено:
Извини, но рекурсию делать не буду. Потому что в имеющемся варианте:
Код:
[Выделить все]
(_dwgru-conv-value-to-list (vla-get-Coordinates (vlax-ename->vla-object (entlast))))
; (-34.5078 334.054 -188.814 41.2622 100.79 182.07 -4.31744 -91.7233 364.676 160.837 345.667 -107.369 591.663 -4.55633 563.709 -105.134)
Стоит заменить (vlax-safearray->list value) на (mapcar '_dwgru-conv-value-to-list (vlax-safearray->list value)) - и все, список будет черт-те каким. Менять последнюю строку (t (list value)) на (t value) - и в случае (_dwgru-conv-value-to-list "qwer") будет возвращаться "qwer", а не ожидаемое '("qwer")
Пока так...
Может, попозже чего и придумается. Или у тебя есть вариант своего кода?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 30.11.2007 в 11:28.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 11:55
#6
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Замечание по структуре - для организации библиотеки, не очень хорошо загонять в функцию слишком большой кусок функционала, тем более, когда он вполне логично бъётся на самостоятельные полезные куски. По хорошему, функция _dwgru-conv-value-to-list должна бы быть примерно такой:
Код:
[Выделить все]
(defun _dwgru-conv-value-to-list (value / itype)
  (setq itype (type value))
  (cond ((not itype) nil)
        ((= itype 'list) value)
        ((= itype 'variant) (_dwgru-conv-variant-to-list value))
        ((= itype 'safearray) (_dwgru-conv-safearray-to-list value))
        ((= itype 'vla-object) (_dwgru-conv-vla-object-to-list value))
        ((= itype 'pickset) (_dwgru-conv-pickset-to-list value))
        (t (list value))
  )
)

Последний раз редактировалось Alaspher, 30.11.2007 в 12:10. Причина: чтото движок форума фокусничает или браузер у мну
Alaspher вне форума  
 
Непрочитано 30.11.2007, 12:07
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


По поводу lst1 придумал пока так
Код:
[Выделить все]
    ((= (type value) 'safearray)
     (if (>= (vlax-safearray-get-u-bound value 1) 0)
       ;;; (vlax-safearray->list value) ;|Comment VVA 30.11.2007 |;
       (mapcar '(lambda(x)(if (= (type x) 'variant)
 (vlax-variant-value x) x))(vlax-safearray->list value));|ADD VVA 30.11.2007 |;
       ) ;_ end of if
     )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.11.2007, 12:46
#8
Кулик Алексей aka kpblc
Moderator

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


Alaspher, позволю себе не согласиться. Сейчас по одной функции я свободно получаю список из (vla-get-insertionpoint), к примеру.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 12:59
#9
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Alaspher, позволю себе не согласиться. Сейчас по одной функции я свободно получаю список из (vla-get-insertionpoint), к примеру.
А что помешает тебе делать это и дальше? Просто, при наличии такой функции-селектора и узкоспециализированных функций конвертеров существенно проще отладить код, да и не всегда надо использовать селектор - зачем нагружать систему лишними проверками, если по ходу выполнения программы на вход конвертеру может быть дан только один тип данных? Но иметь и универсальный конвертер может быть полезно, когда уверенности в типах нет.
Alaspher вне форума  
 
Автор темы   Непрочитано 30.11.2007, 13:02
#10
Кулик Алексей aka kpblc
Moderator

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


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


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А, то есть ты предлагаешь и узкоспециализированные, и оставить универсалку?
Так а это кто?
Код:
[Выделить все]
(_dwgru-conv-variant-to-list value)
(_dwgru-conv-safearray-to-list value)
(_dwgru-conv-vla-object-to-list value)
(_dwgru-conv-pickset-to-list value)
Я, как раз, предлагаю сделать узкоспециализированые отдельно, а селектор оставить именно только для выбора типов.
Alaspher вне форума  
 
Автор темы   Непрочитано 30.11.2007, 13:25
#12
Кулик Алексей aka kpblc
Moderator

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


Не, я не про это. Смотри:
Код:
[Выделить все]
_$ (setq ent (vlax-ename->vla-object (entmakex (list (cons 0 "POINT") (cons 10 (setq pt '(100. 200. 300.)))))))
#<VLA-OBJECT IAcadPoint 021ebd44>
_$ (vla-get-Coordinates ent)
#<variant 8197 ...>
(_dwgru-conv-variant-to-list (vla-get-Coordinates ent)) вернет, как я понимаю, safearay. А хотелось - список '(100. 200. 300.). Или из-под _dwgru-conv-variant-to-list дополнительно вызывать _dwgru-conv-safearray-to-list ? А смысл тогда в таком разделении?
Или я чего-то не учитываю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 13:55
#13
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Вот, примерно о таком я говорю:
Код:
[Выделить все]
(defun _dwgru-conv-value-to-list (value / itype)
  (setq itype (type value))
  (cond ((not itype) nil)
        ((= itype 'list) value)
        ((= itype 'variant) (_dwgru-conv-variant-to-list value))
        ((= itype 'safearray) (_dwgru-conv-safearray-to-list value))
        ((= itype 'vla-object) (_dwgru-conv-vla-object-to-list value))
        ((= itype 'pickset) (_dwgru-conv-pickset-to-list value))
        (t (list value))
  )
)
(defun _dwgru-conv-variant-to-list (value)
  (_dwgru-conv-value-to-list (vlax-variant-value value))
)
(defun _dwgru-conv-safearray-to-list (value)
  (if (>= (vlax-safearray-get-u-bound value 1) 0)
    (vlax-safearray->list value)
  )
)
(defun _dwgru-conv-vla-object-to-list (value / res)
  (if (vlax-property-available-p value 'count)
    (reverse (vlax-for item value (setq res (cons item res))))
  )
)
(defun _dwgru-conv-pickset-to-list (value)
  (vl-remove-if (function listp) (mapcar (function cadr) (ssnamex value)))
)
Единственное серьёзное отличие, это то, что для pickset я считаю нежелательной конвертацию во vla-object В остальном функционал аналогичный (делал бегом и совсем не проверял - могут быть ляпы). При этом, специализированые функции теперь можно вылизывать куда проще и удобнее, чем в составе большой функции. Да и добавлять обработку других типов (буде это понадобится) куда проще.
Alaspher вне форума  
 
Непрочитано 30.11.2007, 14:17
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Про pickset согласен с Alaspher.
Вот вроде набросал. Даже что-то проверял, но не очень настойчиво.
Код:
[Выделить все]
;;; ===========  _dwgru-conv-safearray-to-list =========================
;;; Преобразовывает vlax-safearray в обычный список
;;; value - безопасный массив (safearray)
;;; Возврат:
;;;;      - список значений
;;;;      - nil если не safearray
;;;; Пример
;;;;    (setq lst '(1 2 3))
;;;;    (setq lst1 (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length Lst))))Lst))
;;;  (_DWGRU-CONV-SAFEARRAY-TO-LIST Lst1) ;_ (1 2 3)
;;;  (_DWGRU-CONV-SAFEARRAY-TO-LIST "123") ;_ nil
(defun _dwgru-conv-safearray-to-list (value)
  (if (= (type value) 'safearray)
     (if (>= (vlax-safearray-get-u-bound value 1) 0)
       (mapcar '(lambda(x)(if (= (type x) 'variant)(vlax-variant-value x) x))(vlax-safearray->list value))
       ) ;_ end of if
     )
  )
;;; ===========  _dwgru-conv-variant-to-list =========================
;;; Преобразовывает vlax-variant в обычный список
;;; value - variant массив
;;; Возврат:
;;;;      - список значений
;;;;      - nil если не variant
;;;; Пример
;;;;    (setq lst '(1 2 3))
;;;; (setq lst1 (vlax-make-variant (vlax-safearray-fill
;;;   (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length Lst))))
;;;   '(1 2 3))))
;;;  (_DWGRU-CONV-VARIANT-TO-LIST Lst1) ;_ (1 2 3)
;;;  (_DWGRU-CONV-VARIANT-TO-LIST "123") ;_ nil
;;; (_dwgru-conv-variant-to-list (vlax-make-variant 1 vlax-vbInteger)) ;_ (1)
(defun _dwgru-conv-variant-to-list (value / res)
  (if (= (type value) 'variant)
      (if (= (type (setq res (vlax-variant-value value))) 'safearray)
             (_dwgru-conv-safearray-to-list res)
             (list res)
        )
      )
  )
 
;;; ===========  _dwgru-conv-pickset-to-list =========================
;;; Преобразовывает набор в обычный список
;;; value - набор (pickset)
;;; Возврат:
;;;;      - список примитивов (Ename)
;;;;      - nil если не pickset
;;;; Пример
;;;(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0))))
;;;(_dwgru-conv-pickset-to-list (ssget "_L")) ;_(<Имя объекта: 7ef85e00>)
;;;(_dwgru-conv-pickset-to-list (ssadd)) ;_nil
;;;(_dwgru-conv-pickset-to-list "123") ;_nil
(defun _dwgru-conv-pickset-to-list (value / lst)
  (if (= (type value) 'pickset)
       (repeat (setq item (sslength value)) ;_ end setq
         (setq lst (cons (ssname value (setq item (1- item))) lst))
         ) ;_ end repeat
    ) ;_ end
lst
)
;;; ===========  _dwgru-conv-vla-object-to-list =========================
;;; Преобразовывает ... не могу сформулировать :(
;;; value - объект со свойством count
;;; Возврат:
;;;;      - список vla-объектов 
;;;;      - nil если не объект или нет сво-вы count
(defun _dwgru-conv-vla-object-to-list (value / res)
(if (and
     (= (type value) 'vla-object)
     (vlax-property-available-p value 'count)
     (> (vla-get-count value) 0)
     )
     (reverse (vlax-for item value (setq res (cons item res))))
)
)
;;; ===========  _dwgru-conv-value-to-list =========================
;;; Функция - скелектор
;;; Преобразовывает значение value в список
;;; value - переменная autolisp
;;; Возврат:
;;;;      - список (nil это тоже вписок)
;*    Примеры вызова:
;|
;; #1:
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(10 20 30))))
(_dwgru-conv-value-to-list (vla-get-Coordinates point)) ; '(10 20 30)
;; #2:
(setq ent1 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 574.761 426.116 0.0) (11 1054.08 878.378 0.0))))
 ent2 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 967.833 561.795 0.0) (11 779.78 335.664 0.0)))))
(_dwgru-conv-value-to-list (vla-IntersectWith ent1 ent2 acExtendNone)) ; nil
(_dwgru-conv-value-to-list (vla-IntersectWith ent1 ent2 acExtendBoth)) ; '(1876.15 1654.04 0.0)
;; #3:
(_dwgru-conv-value-to-list "A") ;_ ("A")
|;
 
(defun _dwgru-conv-value-to-list (value / itype)
  (setq itype (type value))
  (cond ((not itype) nil)
        ((= itype 'list) value)
        ((= itype 'variant) (_dwgru-conv-variant-to-list value))
        ((= itype 'safearray) (_dwgru-conv-safearray-to-list value))
        ((= itype 'vla-object) (_dwgru-conv-vla-object-to-list value))
        ((= itype 'pickset) (_dwgru-conv-pickset-to-list value))
        (t (list value))
  )
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 30.11.2007 в 16:39. Причина: _dwgru-conv-pickset-to-list вариант с ssname
VVA вне форума  
 
Автор темы   Непрочитано 30.11.2007, 14:18
#15
Кулик Алексей aka kpblc
Moderator

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


Цитата:
для pickset я считаю нежелательной конвертацию во vla-object
А почему, если не секрет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 14:41
#16
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А почему, если не секрет?
pickset - результат необъектных методов выбора, так что логичнее, что он разворачивается в необъектный список, мне так кажется. По своему опыту - если у меня есть список примитивов, то при необходимости конвертации во vla-object, я сделаю это при самой обработке, но это если понадобится, что не факт, а если мне нужны примитивы в виде ename, то мне надо будет конвертировать обратно...
Alaspher вне форума  
 
Автор темы   Непрочитано 30.11.2007, 14:44
#17
Кулик Алексей aka kpblc
Moderator

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


> VVA : Ну так публикуй! Ради чего все затевалось-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 15:28
#18
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
> VVA : Ну так публикуй! Ради чего все затевалось-то?
Это ты о чем?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.11.2007, 15:36
#19
Кулик Алексей aka kpblc
Moderator

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


О том, что ты сделал готовые функции. И теоретически их можно в DwgRuLibLisp закидывать. Или нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 15:48
#20
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Внимательно посмотреть некогда пока - на вскидку - двойная проверка выглядит излишней - не нижнем уровне её делать не стОит.
Alaspher вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Преобразование variant или safearray в список

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Преобразование из Microstation в DWG или DXF Гость Прочее. Программное обеспечение 9 25.05.2012 08:49
Как сделать проекцию на ось или преобразование 3D в 2D tapych AutoCAD 6 25.11.2006 15:30
safearray и variant Apelsinov Программирование 4 03.12.2005 23:44