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

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

DwgRuLispLib: Преобразование указателя на примитив в vla

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

Код:
[Выделить все]
(defun _dwgru-conv-ent-to-vla (ent)
                              ;|
*    Выполняет преобразование переданного указателя в vlax-вариант
*    Параметры вызова:
	ent	обрабатываемый указатель. Может быть:
	  ename
	  vla-object
	  строка (воспринимается как хендл примитива).
*    Примеры вызова:
(setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint)))))
(_dwgru-conv-ent-to-vla entity)	; #<VLA-OBJECT IAcadPoint 064ad294>
|;
  (cond
    ((= (type ent) 'vla-object) ent)
    ((= (type ent) 'ename) (vlax-ename->vla-object ent))
    ;|
;; Оригинальный вариант:
((= (type ent) 'str) (vlax-ename->vla-object (handent ent)))
|;
    ;; Исправления Alaspher от 28.11.2007. Начало.
    ((= (type ent) 'str)
     (if (setq ent (handent ent))
       (vlax-ename->vla-object ent)
       ) ;_ end of if
     )
    ;; Исправления Alaspher от 28.11.2007. Конец
    (t nil)
    ) ;_ end of cond
  ) ;_ end of defun
---
28.11.2007 : Внесено замечание Alasher
28.11.2007 : Внесены комментарии согласно ShaggyDoc
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 28.11.2007 в 12:57.
Просмотров: 19376
 
Непрочитано 28.11.2007, 08:53
#2
Alaspher


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


и сразу предложение по повышению устойчивости:
Код:
[Выделить все]
(defun _dwgru-conv-ent-to-vla (ent)
                              ;|
*    Выполняет преобразование переданного указателя в vlax-вариант
*    Параметры вызова:
 ent обрабатываемый указатель. Может быть:
   ename
   vla-object
   строка (воспринимается как хендл примитива).
*    Примеры вызова:
(setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint)))))
(_dwgru-conv-ent-to-vla entity) ; #<VLA-OBJECT IAcadPoint 064ad294>
|;
  (cond ((= (type ent) 'vla-object) ent)
        ((= (type ent) 'ename) (vlax-ename->vla-object ent))
        ((= (type ent) 'str)
         (if (setq ent (handent ent))
           (vlax-ename->vla-object ent)
         )
        )
        (t nil)
  ) ;_ end of cond
) ;_ end of defun
Alaspher вне форума  
 
Автор темы   Непрочитано 28.11.2007, 08:58
#3
Кулик Алексей aka kpblc
Moderator

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


Исправил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.11.2007, 12:06
#4
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


"В порядке ведения":

1. Один предложил функцию.
2. Второй что-то предложил по улучшению.
3. Первый согласился, и исправил.

А где предложения? Что исправлено? Когда? В данном случае код простой, но может быть и сложный.

Надо комментировать предложения, при этом выделять новый участок кода и не удалять, а закомментриовать исключаемый. Не исключено ведь что и к прежнему варианту придется вернуться.
ShaggyDoc вне форума  
 
Непрочитано 28.11.2007, 13:19
#5
Alaspher


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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
"В порядке ведения"
Согласен. Только надо выработать стандартное форматирование. С учётом того, что редактор VLIDE не верх совершенства, а движок сайта не приспособлен для отображения LISP-кода. В качестве предложения, мой пост с изменениями мог бы выглядеть как-то так:
Код:
[Выделить все]
(defun _dwgru-conv-ent-to-vla (ent)
                              ;|
*    Выполняет преобразование переданного указателя в vlax-вариант
*    Параметры вызова:
 ent обрабатываемый указатель. Может быть:
   ename
   vla-object
   строка (воспринимается как хендл примитива).
*    Примеры вызова:
(setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint)))))
(_dwgru-conv-ent-to-vla entity) ; #<VLA-OBJECT IAcadPoint 064ad294>
|;
  (cond ((= (type ent) 'vla-object) ent)
        ((= (type ent) 'ename) (vlax-ename->vla-object ent))
        ((= (type ent) 'str) ;|(vlax-ename->vla-object (handent ent))|;
        (if (setq ent (handent ent))
          (vlax-ename->vla-object ent)
        )
        )
        (t nil)
  ) ;_ end of cond
) ;_ end of defun
А принятые изменения вносить зелёным, например.
Alaspher вне форума  
 
Непрочитано 27.12.2007, 13:47
#6
VVA

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


Ну и соответсвенно в связи с изменениями в _dwgru-conv-ent-to-ename
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-conv-ent-to-vla
;;; *
;;; * 27.12.2007 Редакция VVA
;;; * 03/12/2007 Версия 0001. 
;;; ************************************************************************
(defun _dwgru-conv-ent-to-vla (ent / ret)
;;;*    Выполняет преобразование переданного указателя в vlax-вариант
;;;*    Параметры вызова:
;;;*    Параметры вызова:
;;;*   ent значение, которое надо преобразовать в примитив. Может
;;;*   быть:
;;;*                       -    именем примитива (ename),
;;;*                       -    vla-указателем (vla-object),
;;;*                       -    строка (воспринимается как хендл примитива),
;;;*                       -    спиком entget,
;;;*                       -    спиком entsel.
;;;*   Если не принадлежит ни одному из указанных типов,
;;;*   возвращается nil
;;;  
;;;* Использует функцию библиотеки
;;;                 _dwgru-conv-ent-to-ename
 
;|
(setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint)))))
(_dwgru-conv-ent-to-vla entity) ; #<VLA-OBJECT IAcadPoint 064ad294>
(_dwgru-conv-ent-to-vla (entget(entlast)))
(_dwgru-conv-ent-to-vla (cdr(assoc 5 (entget(entlast)))))
(_dwgru-conv-ent-to-vla (entsel))
(_dwgru-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
  (cond
    ((= (type ent) 'vla-object) ent)
;;;   ((= (type ent) 'ename) (vlax-ename->vla-object ent)) ;;;Rem VVA 27.12.2007
    ((setq ret (_dwgru-conv-ent-to-ename ent))(vlax-ename->vla-object ret)) ;;;Add VVA 27.12.2007
    
;| ;;; Rem VVA 27.12.2007 Начало
;;; Оригинальный вариант:
;;;((= (type ent) 'str) (vlax-ename->vla-object (handent ent)))
;; Исправления Alaspher от 28.11.2007. Начало.
   ((= (type ent) 'str)
    (if (setq ent (handent ent))
      (vlax-ename->vla-object ent)
    ) ;_ end of if
   )
;; Исправления Alaspher от 28.11.2007. Конец
;;; Rem VVA 27 12.2007 Конец|; 
  (t nil)
  ) ;_ end of cond
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Преобразование указателя на примитив в vla

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DwgRuLispLib: Преобразование указателя на примитив в ename Кулик Алексей aka kpblc Библиотека функций 1 27.12.2007 13:30