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

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

Проверка на байданУтость.

Ответ
Поиск в этой теме
Непрочитано 20.09.2006, 06:18 #1
Проверка на байданУтость.
Залётный
 
Регистрация: 15.04.2005
Сообщений: 243

Для BIND пользуюсь следующим:

;-----------------
(defun c:MyBind ()
(setvar "cmdecho" 0)
(setvar "FILEDIA" 0)
(C:RUX)
(COMMAND "_.XREF" "B" "*")
(COMMAND "SAVEAS" "2000" (strcat "BIND_" (getvar "DWGNAME")))
(setvar "FILEDIA" 1)
(setvar "cmdecho" 1)
(COMMAND "_.CLOSE")
(princ)
)
;----------------------------------

RUX - это remove-unloaded-xrefs:
;-----------------------------
(defun remove-unloaded-xrefs ()
(vlax-for block (vla-get-blocks
(vla-get-activedocument
(vlax-get-acad-object)))
(if (and (= :vlax-true (vla-get-isxref block))
(= 0 (vla-get-count block))
)
(vla-detach block)
)
)
)
(defun c:rux ()
(remove-unloaded-xrefs)
(princ)
)
;------------------------

Хочу перед закрытием файла добавить проверку завершения BIND т.е. что в чертеже не осталось XREF(оф) и если это не так, остановить программу.
Как можно определить остались ли в чертеже XREF(ы)? Я понимаю, что во второй программе фактически такая проверка и производится, для unloaded XREF(оф), но слабо представляю, как должен выглядеть код для полной проверки. Если можно, с коментариями или ссылкой где можно найти пояснения.
Просмотров: 2897
 
Непрочитано 20.09.2006, 08:28
#2
Кулик Алексей aka kpblc
Moderator

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


Спробуй нечто типа такого:
Код:
[Выделить все]
(defun loc:get-block-list (/ lst_blk)
  (vl-load-com)
  (vlax-for blk
	    (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (if	(not (wcmatch (strcase (vla-get-name blk) t) "*_space*"))
      (setq lst_blk (append lst_blk (list blk)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  lst_blk
  ) ;_ end of defun

;; Основной кусок :)
(defun xref-oper ()
  (foreach xr (vl-remove-if
		'(lambda (x)
		   (vl-catch-all-error-p
		     (vl-catch-all-apply '(lambda () (vla-get-path x)))
		     ) ;_ end of VL-CATCH-ALL-ERROR-P
		   ) ;_ end of LAMBDA
		(loc:get-block-list)
		) ;_ end of vl-remove-if
    (vla-bind xr :vlax-true)
    ) ;_ end of foreach
  ) ;_ end of defun
Если работает так, как надо, то пояснения будут
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проверка на байданУтость.