Тема: Как расформировать группы?
При копировании объектов объединёных в группу возникает проблема с её последующим расформированием. Существует ли способ расформирования копии группы объектов?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Autodesk → AutoCAD → Как расформировать группы?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
При копировании объектов объединёных в группу возникает проблема с её последующим расформированием. Существует ли способ расформирования копии группы объектов?
Спасибо за дельный совет. У меня 3 книги по Акаду
ни в одной из них этого нет.
Нажми на синенькое слово pickstyle. Oно-же есть птичка в Options. Переключение переменной также осуществляется Ctrl+H. Это есть в HELP. А книга бы слишком толстая получилась, если все бесконечные хитрости в нее засунуть.
Хелп это хорошая штука я полностью согласен, единственное но, справка в каде на англицком. =( Языка к сожалению я незнаю. А руский хелп к 2004-му немогу найти.
pickstyle конечно помогает, но копию группы объектов так и незнаю как разгруппировать. =(
;
;Команды автоматической ГРУППИРОВКИ (<GR> или <ПК>) и РАЗГРУППИРОВКИ (<RG>или <КП>) - указанных объектов
;плюс команды ДОБАВЛЕНИЯ (<GRR> или <ПКК>) или УДАЛЕНИЯ (<RGG> или <КПП>) указанных элементов в выбранной группы
;При вызове команды выбираете объекты-группы.
;Позволяет создавать вложенные группы.
;Имя группы автоматически формируется из системной переменной текущего времени
;При наличии вложенной группы ВНЕШЯЯ группа получает аналогичное имя последней группы с добавлением в начале символа <$>
;При выборе графического элемента автоматически определяется ИМЯ последней группы, в которую он входит
;Разгруппировка со вложенными наборами осуществляется в обратном порядке
;Выполнил Толстов Е.В. Казань, КГАСА,каф.САПР 2.11.2000г.
;------------------------------------------------------------------------------------------------------
(setq -gr "O'k");Для определения загрузки команды в других программах (hotm)
;------------------------------------------------------------------------------------------------------
(DEFUN tol-gr (tip nabor / ln name nname naa aa f prSpis i ss ls x spname No tmpFILE)
(setvar "cmdecho" 0);Off echo command
(setq name nil nname nil spname '() No 0);Исходные параметры переменных
(if(= nabor nil)(SETQ nabor (SSGET)))
(if(= nabor nil)(princ "<Отмена>");if1-проверка отказа выбора объектов
(progn;pr1
(SETQ ln(sslength nabor)) ;ВЫБОР ОБЬЕКТОВ и определение кол-ва выбр.элементов
(WHILE(< No ln);создание списка групп, вложенных и в наборе
(SETQ aa(SSNAME nabor No) ;имя элемента в наборе
prSpis(ENTGET aa) ;список свойств элемента
name(cdr(car prSpis)) ;имя-код элемента в списке
ss(cdr(member '(102 . "{ACAD_REACTORS")prSpis));отрезаем список Элемента до начала перечисления групп
ss(reverse ss) ;переворачиваем
SS(CDR(MEMBER '(102 . "}")ss));отрезаем список после перечисления групп((330 . <код группы>)(330 . <>)...)
ls(length ss)) ;кол-во имен-кодов групп
(foreach i ss ;проходим по списку кодов <ss> и записываем наст.имена групп в список <spname>
(setq naa(cdr i) ;naa - код группы
prSpis(ENTGET naa) ;список группы
aa(cdr(assoc 330 prspis)) ;код-адрес таблицы имен групп
prSpis(ENTGET aa) ;список элемента таблицы групп
aa(reverse prspis);переворачиваем список, чтобы код группы оказалсе перед именем (3 . "имя")<->(350 . <naa>)
nname(cdr(cadr(member(cons 350 naa)aa))));считываем имя как следующее за кодом группы
(if(= spname nil)(setq spname(cons nname '())));cоздает список с первым именем группы
(if(=(member nname spname)nil)(setq spname(cons nname spname)));добавляет имя в список, если отсутствует.
);for-конец списка кодов групп
(setq No(1+ No));Переход к след.номеру элементу в наборе
);w - конец перебора набора
(setq nname(last spname));в качестве имени группы берем одно из последних в списке найденных (1 из созданных в наборе - текущая группа)
;если требуется создать группу - берем имя вложенной группы(если есть, т.е /= nil) и добавляем <$> пока не станет уникальным
(if(and(= tip nil)(/= nname nil)(=(substr nname 1 1)"*"))(setq nname(substr nname 2 128)))
(while(and(= tip nil)(/=(member nname spname)nil))(setq nname(strcat "$" nname)))
;если требуется создать группу - а имени вложенных групп нет - создаем из текущей переменной машинной даты-времени
(if(and(= tip nil)(= nname nil))(setq nname(rtos(getvar "cdate")2 20)nname(strcat(substr nname 1 8)"_"(substr nname 10 8))));;;;;;
(setq ls(length spname))
(cond;Группировка-разгруппировка объектов с определенным именем
((and(= tip nil)(< ln 2))(princ "\n<Отмена> Невозможно СГРУППИРОВАТЬ 1 элемент !"))
((and(= tip nil)(>= ln 2)(>= ls 1))(setq x(princ "Выполнено !\n Включено вложенных групп - ")х(princ ls)x(command "_-group" "_c" nname "Создан прогр.TOL-GR" nabor "")))
((and(= tip nil)(>= ln 2)(< ls 1))(setq x(princ "Выполнено !")x(command "_-group" "_c" nname "Прогр.<TOL-GR.lsp> Толстов Е.В. Казань 2000г." nabor "")))
((and(= tip 0)(/= nname nil)(= ls 1))(setq x(princ "Выполнено !")x(command "_-group" "_e" nname)))
((and(= tip 0)(/= nname nil)(> ls 1))(setq x(princ "Выполнено!\n Осталось вложенных групп - ")x(princ(1- ls))x(command "_-group" "_e" nname)))
((and(= tip 0)(= nname nil))(Princ "\n<Отмена> Объект не принадлежит ГРУППЕ !"))
((and(= tip 1)(/= nname nil)(>= ls 1))(setq x(princ "Укажите добавляемые к группе элементы!")x(command "_-group" "_a" nname )))
((and(= tip 1)(= nname nil))(Princ "\n<Отмена> ГРУППА не найдена !"))
((and(= tip -1)(/= nname nil)(>= ls 1))(setq x(princ "Укажите удаляемые из группы элементы!")x(command "_-group" "_r" nname )))
((and(= tip -1)(= nname nil))(Princ "\n<Отмена> ГРУППА не найдена !"))
)
);Pr1 - группа операций при выбранных объектах
);if1 - проверка отказа выбора объектов
(princ)
);END tol-gr
;------------------------------------------------------------------------------------------------------------------
(defun c:пк()(princ "\nСГруппировать объекты ")(tol-gr nil nil));Вызов команды при русской раскладке клавиатуры
(defun c:gr()(princ "\nСГруппировать объекты ")(tol-gr nil nil))
(defun c:кп()(princ "\nРАЗГруппировать объекты ")(tol-gr 0 nil));Вызов команды при русской раскладке клавиатуры
(defun c:rg()(princ "\nРАЗГруппировать объекты ")(tol-gr 0 nil))
(defun c:пкк()(princ "\nУкажите ЦЕЛЕВУЮ ГРУППУ для ПРИСОЕДИНЕНИЯ элементов:")(tol-gr 1 nil));Вызов команды при русской раскладке клавиатуры
(defun c:grr()(princ "\nУкажите ЦЕЛЕВУЮ ГРУППУ для ПРИСОЕДИНЕНИЯ элементов:")(tol-gr 1 nil))
(defun c:ккп()(princ "\nУкажите ИСХОДНУЮ ГРУППУ для УДАЛЕНИЯ элементов:")(tol-gr -1 nil));Вызов команды при русской раскладке клавиатуры
(defun c:rgg()(princ "\nУкажите ИСХОДНУЮ ГРУППУ для УДАЛЕНИЯ элементов:")(tol-gr -1 nil))
;(princ "\nКоманды гуппировки <gr>, разгруппировки <rg>, удаления <rgg> и присоединения <grr> элементов в группе - загружены.\nТолстов.Е.В. Казань 2000г.")
Спасибо. Буду пробовать =) Хороший ответ!!!
Atol, пост #7
Поначалу все работало, потом ACAD стал писать следующее:
Команда: gr СГруппировать объекты Выберите объекты: найдено: 1 Выберите объекты: найдено: 1, всего: 2 Выберите объекты: Выполнено ! Ответьте Да или Нет. Функция отмененаПереопределите ее.? <Н>
как это исправить?
p.s. ACAD 2007 rus
Посмотри здесь LISP. Группировка и разгруппировка объектов
Посмотри здесь LISP. Группировка и разгруппировка объектов
Видел я эту тему, хороший LISP, но в этом LSP функций больше!
Есть команды: ДОБАВЛЕНИЯ и УДАЛЕНИЯ указанных элементов в выбранной группе (зато не работает ГРУППИРОВКА :()
Посмотри команды из последнего поста
посмотрел, там только удаление груп, списков и т.д.
А мне нужны команды ДОБАВЛЕНИЯ и УДАЛЕНИЯ указанных элементов в выбранной группе
Посмотрел код из #7. Там пропущено пару скобок. Этот код у меня работает:
;;; ;;;Команды автоматической ГРУППИРОВКИ (<GR> или <ПК>) и РАЗГРУППИРОВКИ (<RG>или <КП>) - указанных объектов ;;;плюс команды ДОБАВЛЕНИЯ (<GRR> или <ПКК>) или УДАЛЕНИЯ (<RGG> или <КПП>) указанных элементов в выбранной группы ;;;При вызове команды выбираете объекты-группы. ;;;Позволяет создавать вложенные группы. ;;;Имя группы автоматически формируется из системной переменной текущего времени ;;;При наличии вложенной группы ВНЕШЯЯ группа получает аналогичное имя последней группы с добавлением в начале символа <$> ;;;При выборе графического элемента автоматически определяется ИМЯ последней группы, в которую он входит ;;;Разгруппировка со вложенными наборами осуществляется в обратном порядке ;;;Выполнил Толстов Е.В. Казань, КГАСА,каф.САПР 2.11.2000г. ------------------------------------------------------------------------------------------------------ (setq -gr "O'k");_Для определения загрузки команды в других программах (hotm) ;_------------------------------------------------------------------------------------------------------ (DEFUN tol-gr (tip nabor / ln name nname naa aa f prSpis i ss ls x spname No tmpFILE) (setvar "cmdecho" 0);_Off echo command (setq name nil nname nil spname '() No 0);_Исходные параметры переменных (if(= nabor nil)(SETQ nabor (SSGET))) (if(= nabor nil)(princ "<Отмена>");_if1-проверка отказа выбора объектов (progn;_pr1 (SETQ ln(sslength nabor)) ;_ВЫБОР ОБЬЕКТОВ и определение кол-ва выбр.элементов (WHILE(< No ln);_создание списка групп, вложенных и в наборе (SETQ aa(SSNAME nabor No) ;_имя элемента в наборе prSpis(ENTGET aa) ;_список свойств элемента name(cdr(car prSpis)) ;_имя-код элемента в списке ss(cdr(member '(102 . "{ACAD_REACTORS")prSpis));_отрезаем список Элемента до начала перечисления групп ss(reverse ss) ;_переворачиваем SS(CDR(MEMBER '(102 . "}")ss));_отрезаем список после перечисления групп((330 . <код группы>)(330 . <>)...) ls(length ss)) ;_кол-во имен-кодов групп (foreach i ss ;_проходим по списку кодов <ss> и записываем наст.имена групп в список <spname> (setq naa(cdr i) ;_naa - код группы prSpis(ENTGET naa) ;_список группы aa(cdr(assoc 330 prspis)) ;_код-адрес таблицы имен групп prSpis(ENTGET aa) ;_список элемента таблицы групп aa(reverse prspis);_переворачиваем список, чтобы код группы оказалсе перед именем (3 . "имя")<->(350 . <naa>) nname(cdr(cadr(member(cons 350 naa)aa))));_считываем имя как следующее за кодом группы (if(= spname nil)(setq spname(cons nname '())));_cоздает список с первым именем группы (if(=(member nname spname)nil)(setq spname(cons nname spname)));_добавляет имя в список, если отсутствует. );_for-конец списка кодов групп (setq No(1+ No));_Переход к след.номеру элементу в наборе );_w - конец перебора набора (setq nname(last spname));_в качестве имени группы берем одно из последних в списке найденных (1 из созданных в наборе - текущая группа) ;_если требуется создать группу - берем имя вложенной группы(если есть, т.е /= nil) и добавляем <$> пока не станет уникальным (if(and(= tip nil)(/= nname nil)(=(substr nname 1 1)"*"))(setq nname(substr nname 2 128))) (while(and(= tip nil)(/=(member nname spname)nil))(setq nname(strcat "$" nname))) ;_если требуется создать группу - а имени вложенных групп нет - создаем из текущей переменной машинной даты-времени (if(and(= tip nil)(= nname nil))(setq nname(rtos(getvar "cdate")2 20)nname(strcat(substr nname 1 8) "_"(substr nname 10 ))));_;_;_;_;_;_ (setq ls(length spname)) (cond;_Группировка-разгруппировка объектов с определенным именем ((and(= tip nil)(< ln 2))(princ "\n<Отмена> Невозможно СГРУППИРОВАТЬ 1 элемент !")) ((and(= tip nil)(>= ln 2)(>= ls 1))(setq x(princ "Выполнено !\n Включено вложенных групп - ")х(princ ls)x(command "_-group" "_c" nname "Создан прогр.TOL-GR" nabor ""))) ((and(= tip nil)(>= ln 2)(< ls 1))(setq x(princ "Выполнено !")x(command "_-group" "_c" nname "Прогр.<TOL-GR.lsp> Толстов Е.В. Казань 2000г." nabor ""))) ((and(= tip 0)(/= nname nil)(= ls 1))(setq x(princ "Выполнено !")x(command "_-group" "_e" nname))) ((and(= tip 0)(/= nname nil)(> ls 1))(setq x(princ "Выполнено!\n Осталось вложенных групп - ")x(princ(1- ls))x(command "_-group" "_e" nname))) ((and(= tip 0)(= nname nil))(Princ "\n<Отмена> Объект не принадлежит ГРУППЕ !")) ((and(= tip 1)(/= nname nil)(>= ls 1))(setq x(princ "Укажите добавляемые к группе элементы!")x(command "_-group" "_a" nname ))) ((and(= tip 1)(= nname nil))(Princ "\n<Отмена> ГРУППА не найдена !")) ((and(= tip -1)(/= nname nil)(>= ls 1))(setq x(princ "Укажите удаляемые из группы элементы!")x(command "_-group" "_r" nname ))) ((and(= tip -1)(= nname nil))(Princ "\n<Отмена> ГРУППА не найдена !")) ) );_Pr1 - группа операций при выбранных объектах );_if1 - проверка отказа выбора объектов (princ) );_END tol-gr ;_------------------------------------------------------------------------------------------------------------------ (defun c:пк()(princ "\nСГруппировать объекты ")(tol-gr nil nil));_Вызов команды при русской раскладке клавиатуры (defun c:gr()(princ "\nСГруппировать объекты ")(tol-gr nil nil)) (defun c:кп()(princ "\nРАЗГруппировать объекты ")(tol-gr 0 nil));_Вызов команды при русской раскладке клавиатуры (defun c:rg()(princ "\nРАЗГруппировать объекты ")(tol-gr 0 nil)) (defun c:пкк()(princ "\nУкажите ЦЕЛЕВУЮ ГРУППУ для ПРИСОЕДИНЕНИЯ элементов:")(tol-gr 1 nil));_Вызов команды при русской раскладке клавиатуры (defun c:grr()(princ "\nУкажите ЦЕЛЕВУЮ ГРУППУ для ПРИСОЕДИНЕНИЯ элементов:")(tol-gr 1 nil)) (defun c:ккп()(princ "\nУкажите ИСХОДНУЮ ГРУППУ для УДАЛЕНИЯ элементов:")(tol-gr -1 nil));_Вызов команды при русской раскладке клавиатуры (defun c:rgg()(princ "\nУкажите ИСХОДНУЮ ГРУППУ для УДАЛЕНИЯ элементов:")(tol-gr -1 nil)) (princ "\nКоманды гуппировки <gr>, разгруппировки <rg>, удаления <rgg> и присоединения <grr> элементов в группе - загружены.\nТолстов.Е.В. Казань 2000г.")
С другого форума. Команды GRP и UGRP
;;; Lee MAC ;;; http://www.cadtutor.net/forum/showthread.php?54230-Group-command-routine (defun c:grp ( / l ) (vl-load-com) ;; © Lee Mac 2010 (or *doc (setq *doc (vla-get-ActiveDocument (vlax-get-acad-object)))) (if (setq l (LM:SS->VLA (ssget))) (vla-AppendItems (vla-Add (vla-get-Groups *doc) "*") (LM:ObjectVariant l) ) ) (princ) ) (defun c:ugrp ( / group g h lst ) (vl-load-com) ;; © Lee Mac 2010 (or *doc (setq *doc (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-for group (vla-get-Groups *doc) (vlax-for object group (setq g (cons (vla-get-Handle object) g)) ) (setq lst (cons (cons group g) lst) g nil) ) (if lst (while (progn (setq e (car (entsel "\nSelect Object to Remove Grouping: "))) (cond ( (eq 'ENAME (type e)) (setq h (vla-get-Handle (vlax-ename->vla-object e))) (if (setq group (vl-some (function (lambda ( g ) (if (vl-position h (cdr g)) g) ) ) lst ) ) (progn (vla-delete (car group)) (setq lst (vl-remove group lst)) (princ "\n** Group Deleted **") ) (princ "\n** Object is not a member of a group **") ) ) ) ) ) (princ "\n** No Groups in Drawing **") ) (princ) ) ;;------------------=={ Safearray Variant }==-----------------;; ;; ;; ;; Creates a populated Safearray Variant of a specified ;; ;; data type ;; ;;------------------------------------------------------------;; ;; Author: Lee McDonnell, 2010 ;; ;; ;; ;; Copyright © 2010 by Lee McDonnell, All Rights Reserved. ;; ;; Contact: Lee Mac @ TheSwamp.org, CADTutor.net ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; datatype - variant type enum (eg vlax-vbDouble) ;; ;; data - list of static type data ;; ;;------------------------------------------------------------;; ;; Returns: VLA Variant Object of type specified ;; ;;------------------------------------------------------------;; (defun LM:SafearrayVariant ( datatype data ) ;; © Lee Mac 2010 (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray datatype (cons 0 (1- (length data))) ) data ) ) ) ;;-------------------=={ Object Variant }==-------------------;; ;; ;; ;; Creates a populated Object Variant ;; ;;------------------------------------------------------------;; ;; Author: Lee McDonnell, 2010 ;; ;; ;; ;; Copyright © 2010 by Lee McDonnell, All Rights Reserved. ;; ;; Contact: Lee Mac @ TheSwamp.org, CADTutor.net ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; lst - list of VLA Objects to populate the Variant. ;; ;;------------------------------------------------------------;; ;; Returns: VLA Object Variant ;; ;;------------------------------------------------------------;; (defun LM:ObjectVariant ( lst ) ;; © Lee Mac 2010 (LM:SafearrayVariant vlax-vbobject lst) ) ;;-----------------=={ SelectionSet -> VLA }==----------------;; ;; ;; ;; Converts a SelectionSet to a list of VLA Objects ;; ;;------------------------------------------------------------;; ;; Author: Lee McDonnell, 2010 ;; ;; ;; ;; Copyright © 2010 by Lee McDonnell, All Rights Reserved. ;; ;; Contact: Lee Mac @ TheSwamp.org, CADTutor.net ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; ss - Valid SelectionSet (Pickset) ;; ;;------------------------------------------------------------;; ;; Returns: List of VLA Objects ;; ;;------------------------------------------------------------;; (defun LM:ss->vla ( ss ) ;; © Lee Mac 2010 (if ss ( (lambda ( i / e l ) (while (setq e (ssname ss (setq i (1+ i)))) (setq l (cons (vlax-ename->vla-object e) l)) ) l ) -1 ) ) )
Посмотрел код их #7. Там пропущено пару скобок. Этот код у меня работает:
;;; ;;;Команды автоматической ГРУППИРОВКИ (<GR> или <ПК>) и РАЗГРУППИРОВКИ (<RG>или <КП>) - указанных объектов ;;;плюс команды ДОБАВЛЕНИЯ (<GRR> или <ПКК>) или УДАЛЕНИЯ (<RGG> или <КПП>) указанных элементов в выбранной группы ...
Вот что у меня пишет ACAD :
Команда: Команда: gr СГруппировать объекты Выберите объекты: найдено: 1 Выберите объекты: найдено: 1, всего: 2 Выберите объекты: найдено: 1, всего: 3 Выберите объекты: найдено: 1, всего: 4 Выберите объекты: ; ошибка: слишком много аргументов Команда:
ACAD 2007 rus SP2
С другого форума. Команды GRP и UGRP
работает
Вот что у меня пишет ACAD :
Обновил код #15
Спасибо за труды, код работает.
Очень удобно четыре команды в одном ;)
Посмотрел код из #7. Там пропущено пару скобок. Этот код у меня работает:
удобный код, работает отлично, но на размерах созданных в СПДС CS&Nana спотыкается...
Нет ли у кого из знающих возможности и времени это исправить?
Проблемные объекты во вложении.
PS вариантов отказаться от СПДС нет никаких, отдел полностью переведен на нанокад, а с группировкой у него дела не очень... умеет, но пока добавишь удалишь... в общем не совсем тривиально
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Autodesk → AutoCAD → Как расформировать группы?
Форум работает на PunBB, при поддержке Informer Technologies, Inc