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

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

DwgRuLispLib: Модификация ename-представлений примитивов

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

Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-ent-modify-autoregen
;;; *
;;; * 06/12/2007 Версия 0003. Внесены исправление Alaspher: исправлена
;;;	опечатка последнего параметра; изменен порядок определения
;;;	допустимости изменения dxf-кода.
;;; * 06/12/2007 Версия 0002. Кулик Алексей aka kpblc : введен флаг
;;;	опциональности обновления примитива. Исключены обработки таблиц (не
;;;	всегда корректно срабатывали, особенно на вертикальных решениях).
;;;	Исключена обработка 100-й группы как служебной.
;;; * 03/12/2007 Версия 0001.  Сергей Зуев   (ShaggyDoc)
;;; ************************************************************************
;;; В качестве основы взяты функции ruCAD

(defun _dwgru-ent-modify-autoregen (ent       bit       value     ent_regen
                                    /         ent_list  new_dxf   old_dxf
                                    )
;;;    Функция модификации указанного бита примитива
;;;    Параметры вызова:
;;;	entity	- примитив, полученный через (entsel), (entlast) etc
;;;	bit	- dxf-код, значение которого надо установить
;;;	value	- новое значение
;;;	regen	- выполнять или нет регенерацию примитива сразу. t/ nil
;;;    Примеры вызова:
;;;    Возвращаемое значение:
;;;	примитив с модифицированным dxf-списком. Примитив перерисовывается в
;;; зависимости от значения ключа ext_regen
  ;|
(_dwgru-ent-modify (entlast) 8 "0" t)	; перенести последний примитив на слой 0
(_dwgru-ent-modify (entsel) 62 10 nil)	; установить выбранному примитиву цвет 10
|;
  (if
    (and
      (setq ent (_dwgru-conv-ent-to-ename ent))
      (not (or (member bit '(-1 0 5 100)) ;_ есть и другие DXF-коды, ковыряться в которых не надо
               (member (strcase (cdr (assoc 0 (setq ent_list (entget ent)))))
                       '("STYLE" "DIMSTYLE" "LAYER")
                       ) ;_ end of member
               (equal (setq new_dxf (cons bit
                                          (if (and (= bit 62) (= (type value) 'str))
                                            (if (= (strcase value) "BYLAYER")
                                              256
                                              0
                                              ) ;_ end of if
                                            value
                                            ) ;_ end of if
                                          ) ;_ end of cons
                            ) ;_ end of setq
                      (setq old_dxf (assoc bit ent_list))
                      ) ;_ end of equal
               ) ;_ end of or
           ) ;_ end of not
      ) ;_ end of and
     (if (entmod (if old_dxf
                   (subst new_dxf old_dxf ent_list)
                   (append ent_list (list new_dxf))
                   ) ;_ end of if
                 ) ;_ end of entmod
       (if ent_regen
         (entupd ent)
         (redraw ent)
         ) ;_ end of if
       ) ;_ end of if
     ) ;_ end of if
  ent
  ) ;_ end of defun
Внесены исправления Alasper
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 07.12.2007 в 13:02.
Просмотров: 15347
 
Автор темы   Непрочитано 07.12.2007, 00:08
#2
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-ent-modify
;;; *
;;; * 06/12/2007 Версия 0002. Кулик Алексей aka kpblc : выполняется модификация примитива
;;;	с гарантированным его обновлением.
;;; * 03/12/2007 Версия 0001.  Сергей Зуев   (ShaggyDoc)
;;; ************************************************************************
;;; В качестве основы взяты функции ruCAD

(defun _dwgru-ent-modify (ent bit value / ent_list old_dxf new_dxf)
;;;    Функция модификации указанного бита примитива с гарантированным обновлением
;;; примитива.
;;; 	Используемые функции библиотеки:
;;; _dwgru-ent-modify-autoregen
;;;    Параметры вызова:
;;;	entity	- примитив, полученный через (entsel), (entlast) etc
;;;	bit	- dxf-код, значение которого надо установить
;;;	value	- новое значение
  ;|    Примеры вызова:
(_dwgru-ent-modify (entlast) 8 "0")	; перенести последний примитив на слой 0
(_dwgru-ent-modify (entsel) 62 10)	; установить выбранному примитиву цвет 10
|;
;;;    Возвращаемое значение:
;;;	примитив с модифицированным dxf-списком. Примитив автоматически 
;;; перерисовывается.
  (_dwgru-ent-modify-autoregen ent bit value t)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 07.12.2007 в 09:21.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.12.2007, 08:28
#3
ShaggyDoc

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


А зачем вставляешь
Цитата:
;;; * 03/12/2007 Версия 0001. Сергей Зуев (ShaggyDoc)
Это же было в паре мест, для примера.

Предполагаем, что снизу вверх вставляются комментарии корректоров, например (условно)

Цитата:
;;; * 07/12/2007 Кулик Алексей aka kpblc - исправлены ошибки (и т.п.)
;;; * 03/12/2007 Версия 0001. Сергей Зуев (ShaggyDoc)
ShaggyDoc вне форума  
 
Непрочитано 07.12.2007, 09:15
#4
VVA

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


И еще в заголовках поменять _dwgru-string-align на истинное название функции
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 07.12.2007, 09:16
#5
Кулик Алексей aka kpblc
Moderator

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


Как зачем? Автор исходника кто? Праально, Сергей Зуев, он же ShaggyDoc. Функция-то ruCAD'овская фактически, с минимумом переделок, которые носят чисто косметический характер.
Тем не менее комментарии подправил
> VVA : исправил. Сорри.
===
Добавлено: Вот блин, привык к своему стилю комментирования, мозги никак не перестроить
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

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


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


Немного подредактировал основную функцию.
Мой вариант:
Код:
[Выделить все]
(defun _dwgru-ent-modify-autoregen (ent bit value ent_regen / ent_list new_dxf old_dxf)
 (if (and (setq ent (_dwgru-conv-ent-to-ename ent))
          (not (or (member bit '(-1 0 5 100)) ;_ есть и другие DXF-коды, ковыряться в которых не надо
                   (member (strcase (cdr (assoc 0 (setq ent_list (entget ent)))))
                           '("STYLE" "DIMSTYLE" "LAYER")
                   )
                   (equal (setq new_dxf (cons bit
                                              (if (and (= bit 62) (= (type value) 'str))
                                               (if (= (strcase value) "BYLAYER")
                                                256
                                                0
                                               )
                                               value
                                              )
                                        )
                          )
                          (setq old_dxf (assoc bit ent_list))
                   )
               )
          )
     )
  (if (entmod (if old_dxf
               (subst new_dxf old_dxf ent_list)
               (append ent_list (list new_dxf))
              )
      )
   (if ent_regen
    (entupd ent)
    (redraw ent)
   )
  )
 )
 ent
)
В основном, для упрощения добавления исключений. Кроме того, в оригинале есть опечатка - не соответствует имя последнего аргумента при объявлении и при использовании.
Alaspher вне форума  
 
Автор темы   Непрочитано 07.12.2007, 13:55
#7
Кулик Алексей aka kpblc
Moderator

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


Исправления внесены.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Модификация ename-представлений примитивов

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

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


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