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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AcDbZombieEntity, acad_proxy_entity explode (разбить)

AcDbZombieEntity, acad_proxy_entity explode (разбить)

Ответ
Поиск в этой теме
Непрочитано 21.02.2014, 14:31 #1
AcDbZombieEntity, acad_proxy_entity explode (разбить)
kakt00z
 
инженер-проектировщик КИПиА
 
Минск
Регистрация: 30.08.2008
Сообщений: 159

Здравствуйте!
собственно вопрос - нужно программно разбить acad_proxy_entity в дополнительно открытом файле

Код:
[Выделить все]
      ;(setq path "d:\\_TDMS\\1744-1-АТМ1\\1744-1-АТМ1 л.64.dwg")
     (setq docs (vla-get-Documents #cad))
     (setq $doc (vla-open docs path))

     (setq $sset (vla-get-ActiveSelectionSet $doc))
     (vla-Clear $sset)
     (vla-Select
       $sset
       acSelectionSetAll
       nil nil
       (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 0)) '(0))
       (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 0)) '("ACAD_PROXY_ENTITY"))
       )
     (________ $sset) ; / или lambda ____
     (vla-close $doc)
есть варианты?
Просмотров: 8306
 
Непрочитано 21.02.2014, 15:21
#2
Кулик Алексей aka kpblc
Moderator

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


ExplodeAllProxy от А.Ривилиса
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2014, 16:25
#3
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


ExplodeAllProxy от А.Ривилиса
это конечно хорошо, и спасибо, но
почему тогда в активном документе можно нажать на кнопочку _explode, указать proxy-объект и он разобьется без каких либо дополнительных arx-файлов, штатными средствами?
kakt00z вне форума  
 
Непрочитано 21.02.2014, 16:27
#4
Кулик Алексей aka kpblc
Moderator

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


Отлично. А как быть с вложенными в блоки прокси-объектами? А как поступать с неграфическими прокси-объектами?
Комплекс от Александра обе эти проблемы решает "на ура"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2014, 16:51
#5
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


какбыть-какбыть - разбить )))
разбить прокси-объект на примитивы - уже подразумевает то, что он, и содержащаяся в нем информация (кроме графической) использоваться не будет, поэтому неграфические - сразу delete (благо, этот метод у них есть)
по блокам - да, тоже нужно "пробежку" добавить
вопрос из поста #3 без ответа
kakt00z вне форума  
 
Непрочитано 21.02.2014, 16:56
#6
Кулик Алексей aka kpblc
Moderator

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


Прокси-объект разобъется а) только если у него прописан был метод Explode и б) только командой (т.е. только в активном пространстве). vla-explode на него не срабатывает.
Offtop: Как-то не очень понимаю - есть отлично работающее решение, зачем пытаться выдумывать свое?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2014, 17:02
#7
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


ну это я уже знаю
строчка
Код:
[Выделить все]
 (command "_explode" (vlax-vla-object->ename (vla-item $sset 0)))
в активном окне работает
пробую писать так
Код:
[Выделить все]
 (mapcar
       '(lambda (x)
	  (vla-sendcommand $doc "_.explode")
	  (vla-sendcommand $doc (vlax-vla-object->ename x))
	  (vla-sendcommand $doc "")
	  )
       (kd-container->list $sset)
       )
но тут выдает ошибку
; error: lisp value has no coercion to VARIANT with this type: <Entity name: 7ec2fa40>
kakt00z вне форума  
 
Непрочитано 21.02.2014, 17:07
#8
Кулик Алексей aka kpblc
Moderator

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


Ага, команду, да необязательно в текущем документе? Unreal: http://autolisp.ru/2010/04/08/procee...tive-document/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.02.2014, 10:15
#9
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


спасибо, полезно , почитал
а что если временно добавить процедурку в автозагрузку, временно, пооткрывать - посохранять нужные файлы, и потом убрать? (просто мысль, а вдруг уже кто-то пробовал...)
kakt00z вне форума  
 
Непрочитано 24.02.2014, 10:28
#10
Кулик Алексей aka kpblc
Moderator

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


Там же, первые прикидки (на доработку тупо нет времени): http://autolisp.ru/2013/10/22/batch-clear-dwg/
Хочешь - займись
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.02.2014, 15:14
#11
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


порылся, выяснил :
если добавить в автозагрузку файл, содержащий
Код:
[Выделить все]
 (while (setq ss (ssget "_X" '((0 . "*PROXY*"))))
  (command "_explode" ss)
  )
то все отрабатывает, зомби-объекты разбиваются, НО
чтобы автокад "поверил" в изменения в реестре ветки ... Appload\Startup, - его надо перезапустить а это к сожалению не выход...
или как вариант искать способы изменения автозагрузки не через реестр

автозагрузку пробовал менять так :

Код:
[Выделить все]
 (setq lsppath (findfile (strcat #lisppath "automenu\\proxy-explode-autocode.LSP")))
(setq
  regpaths
   (list
     (strcat (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" (vla-get-activeprofile (vla-get-profiles (vla-get-preferences (vlax-get-acad-object))))) "\\dialogs\\appload")
     ;(strcat "HKEY_USERS\\" (car (vl-registry-descendents "HKEY_CURRENT_USER\\Software\\Microsoft\\Protected Storage System Provider")) "\\" (vlax-product-key) "\\Profiles\\" (vla-get-activeprofile (vla-get-profiles (vla-get-preferences (vlax-get-acad-object)))) "\\dialogs\\appload")
     )
  )

(setq rsuffix "Startup")
(setq al:params (vl-registry-descendents (strcat (car regpaths) "\\" rsuffix)"*" ))
(if (null (member lsppath (mapcar '(lambda (x) (vl-registry-read (strcat (car regpaths) "\\" rsuffix) x)) al:params)))
  (mapcar
    '(lambda (rpath)
       (vl-registry-write (strcat rpath "\\" rsuffix) (strcat (itoa (length al:params)) rsuffix) lsppath)
       (vl-registry-write (strcat rpath "\\" rsuffix) (strcat "Num" rsuffix) (itoa (length al:params)))
       )
    regpaths
    )
  )

(setq rsuffix "History")
(if (null (member lsppath (mapcar '(lambda (x) (vl-registry-read (strcat (car regpaths) "\\" rsuffix) x)) al:params)))
  (mapcar
    '(lambda (rpath)
       (vl-registry-write (strcat rpath "\\" rsuffix) (strcat (itoa (length al:params)) rsuffix) lsppath)
       (vl-registry-write (strcat rpath "\\" rsuffix) (strcat "Num" rsuffix) (itoa (length al:params)))
       )
    regpaths
    )
  )
подсмотрел тут http://www.arcada.com.ua/forum/viewt...asc&highlight=

ЗЫ: может особенности моей системы, но заметил, что второй ключ реестра меняется автоматом, поэтому строчка закоментирована
ЗЗЫ: если запустить _appload до перезапуска автокада, то изменения в реестре откатываются назад, подозреваю что appload синхронизирует данные реестра с чем-то еще, (mnl?)
kakt00z вне форума  
 
Непрочитано 24.02.2014, 15:33
#12
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от kakt00z Посмотреть сообщение
если добавить в автозагрузку файл, содержащий
То сработает это только в открываемом файле. Учитывая, что лисп работает внутри документа, у тебя будут приличные трудности при пакетной обработке. У тебя же "дополнительно" открываемый файл, верно?
P.S. От использования StartupSuite я отказался уже минимум года 3 назад - есть более безопасные способы.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.04.2014, 00:14
#13
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


поражаюсь твоей сдержанности ...
имел ввиду что при запуске "процедуры" временно менять {уже заранее установленный дополнительный *.lsp в автозагрузке} и после завершения - возвращать его (дополнительный *.lsp) в исходное состояние
но со временем дошло ..., напороться можно на многое, даже проще перечислить на что "ненапоротсья"
вывод - вопросы такого рода лучше решать независимо от автокада .. и это не автолисп...
ветку можно закрыть
kakt00z вне форума  
 
Непрочитано 18.04.2014, 00:28
#14
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от kakt00z Посмотреть сообщение
вопросы такого рода лучше решать независимо от автокада .. и это не автолисп...
Ну, не совсем
http://autolisp.ru/2014/03/24/clear-dwg-at-opening/ + http://autolisp.ru/2013/10/22/batch-clear-dwg/
И не забыть про
http://autolisp.ru/2014/03/31/to-rivilis-users/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.04.2014, 01:26
#15
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


на вскидку - интересно, будет время- будет суть, но подозреваю что сломать - могу.. )
а пока Offtop: меня начальник {дино} заставил приводить чертежи динозавров в {удовлетворяющий заказчика вид} и я заразился blond где тут офтоп.... нашол...
я все думаю , как после такого нас "заказывают"

..... а вообще kpblc, ты мог бы сказать - решил вопрос или нет - и если нет - то почему?

Последний раз редактировалось kakt00z, 18.04.2014 в 01:31.
kakt00z вне форума  
 
Непрочитано 18.04.2014, 12:52
#16
Кулик Алексей aka kpblc
Moderator

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


В полном объеме очистку можно выполнить (если касаться лиспа, и не 2015 версии) только в текущем документе. Эрзац-очистку можно попробовать выполнить и пакетно - но там нет удаления прокси, например. А проверку файла можно сделать только через консольный acad, написав соответствующий src-файл. Так что решение у меня "половинчатое"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AcDbZombieEntity, acad_proxy_entity explode (разбить)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разбить внешнюю ссылку (AutoCAD Architecture 2008) Сагдия Вертикальные решения на базе AutoCAD 12 05.02.2021 09:33
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными Андрей Х. AutoCAD 24 27.05.2015 10:17
Как разбить блок В Нанокаде?? Стандартной командой не получается... Даниил Шилов Другие CAD системы 6 19.08.2013 11:27
Разбить отрезок на определенное количество частей... Albino AutoCAD 13 01.07.2009 15:15
Как выполнить команду Explode для всех деталей с сборок? DonVik Программирование 2 23.02.2009 12:41