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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как сделать аналог команды CopyToLayer для AutoCAD 2006 ?

Как сделать аналог команды CopyToLayer для AutoCAD 2006 ?

Ответ
Поиск в этой теме
Непрочитано 03.10.2013, 12:18 #1
Как сделать аналог команды CopyToLayer для AutoCAD 2006 ?
gumel
 
Регистрация: 20.04.2011
Сообщений: 485

Добрый день!
Имеется AutoCAD 2006, есть задача частого копирования объектов с переносом их потом на другой слой.
В общем CopyToLayer у меня нет, прошу помощи.

Вообще мне бы хотелось выполнения копирования с переносом новых объектов на текущий слой.
Заранее благодарен.

Последний раз редактировалось gumel, 03.10.2013 в 12:50. Причина: п.4.3.
Просмотров: 4034
 
Непрочитано 03.10.2013, 12:27
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от gumel Посмотреть сообщение
Вообще мне бы хотелось выполнения копирования с переносом новых объектов на текущий слой.
Заранее благодарен.
Тогда Вам сюда
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 03.10.2013, 12:32
#3
gumel


 
Регистрация: 20.04.2011
Сообщений: 485


Вы хотите сказать, что задача трудная и требует вознаграждения?
gumel вне форума  
 
Непрочитано 03.10.2013, 12:55
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


просто здесь обсуждаются приемы программирования, а не заказ программ
gomer вне форума  
 
Автор темы   Непрочитано 03.10.2013, 13:00
#5
gumel


 
Регистрация: 20.04.2011
Сообщений: 485


Да блин, я все конечно понимаю ))) Заказ Программ ! (скажете тоже)

Я так то тоже знаком с программированием не понаслышке, какая нафик программа??, так функция или даже макрос... или я ошибаюсь?
gumel вне форума  
 
Непрочитано 03.10.2013, 13:12
#6
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от gumel Посмотреть сообщение
Имеется AutoCAD 2006, есть задача частого копирования объектов с переносом их потом на другой слой.
В общем CopyToLayer у меня нет, прошу помощи.
А чем не устраивает эта команда (CopyToLayer) из Express Tools?
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 03.10.2013, 13:16
#7
gumel


 
Регистрация: 20.04.2011
Сообщений: 485


стоп, я думал, что CopyToLayer появилась в более поздних модификациях AutoCAD'а..
gumel вне форума  
 
Непрочитано 03.10.2013, 13:44
#8
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от gumel Посмотреть сообщение
стоп, я думал, что CopyToLayer появилась в более поздних модификациях AutoCAD'а..
Они появились начиная с версии 2002, под именем etv1-9.exe.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 03.10.2013, 14:26
#9
gumel


 
Регистрация: 20.04.2011
Сообщений: 485


Alan, точно, ты прав!
Поставил ET, copy to layer - есть, но работа с этой командой (в моем случае) не удобна...
Т.е. приходиться выбирать слой, потом нажимать ОК, в тот момент, когда хочется указать уже базовую точку )))

вот, нашел где то:
Код:
[Выделить все]
 ;copy all selected objects to current layer
;alan thompson
(defun c:CTC (/ ss ssl cnt ssn sse pt)
(vl-load-com)
(setq ss (ssget))
(if ss
    (progn
        (command "undo" "begin")
        (setq ssl (sslength ss))
        (setq cnt 0)
        (repeat
            ssl
            (setq ssn (ssname ss cnt))
            (setq sse (entget ssn))
            (setq pt (cdr (assoc 10 sse)))
            (command "_copy" ssn "" pt pt)
            (vla-put-layer (vlax-ename->vla-object (entlast)) (getvar "clayer"))
            (setq cnt (1+ cnt))
        ); repeat
        (command "undo" "end")
    );progn
);if ss
(princ)
); defun
Выполняется копирование объектов без указания базовой точки (там где было, там и осталось) на текущий слой
нужно что то изменить в строках
Код:
[Выделить все]
 (setq pt (cdr (assoc 10 sse)))
(command "_copy" ssn "" pt pt)
может и еще где то...

Хотелось бы чтобы новая команда не отличалась от стандартной команды COPY, с точки зрения "манипуляций".
gumel вне форума  
 
Непрочитано 03.10.2013, 15:32
#10
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Код:
[Выделить все]
 (defun c:CTL()
  (vl-load-com)
  ((lambda(act_doc prew_nbr)
     (vla-StartUndoMark act_doc)
     ((lambda(nbr)
	(if (and nbr
		 (not (vl-catch-all-error-p nbr))
		 )
	  ((lambda(base_point)
	     (if (and base_point
		      (not (vl-catch-all-error-p base_point))
		      )
	       ((lambda(second_point clayer)
		  (if (and second_point
			   (not (vl-catch-all-error-p second_point))
			   )
		    (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr)))
		      (if (vl-cmdf "_.copy" item "" base_point second_point)
			(vla-put-layer (vlax-ename->vla-object (entlast)) clayer)
			)
		      )
		    )
		  )
		 (vl-catch-all-apply 'getpoint
	           (list "\nВторая точка: ")
	           )
		 (getvar "clayer")
		 )
	       )
	     )
	    (vl-catch-all-apply 'getpoint
	      (list "\nБазовая точка: ")
	      )
	    )
	  )
	)
       (if prew_nbr
	 prew_nbr
	 (vl-catch-all-apply 'ssget)
	 )
       )
     (vla-EndUndoMark act_doc)
     )
    (vla-get-activedocument (vlax-get-acad-object))
    (cadr (ssgetfirst))
    )
  (princ)
  )
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 03.10.2013, 15:51
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
(vl-cmdf "_.copy" item "" base_point second_point)
Offtop: Ну Семен Семеныч - или (vla-move (vla-copy ...)...) - что правильней - или привязки со всеми вытекающими
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 03.10.2013, 16:32
#12
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Offtop: Ну Семен Семеныч - или (vla-move (vla-copy ...)...) - что правильней - или привязки со всеми вытекающими
(vla-move (vla-copy ...)...) конечно правильнее, но привязки мне кажется тут не повлияют. base_point и second_point получены getpoint'ом и уже там сработали привязки если они были включены, причем при указании точек пользователь сам проконтролировала привязки.
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 03.10.2013, 22:09
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


юзер может между точками "зумануть" и командные привязки привяжутся куда бог пошлет
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 03.10.2013, 22:53
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


эй, а где мое сбщ??? В общем, я так понимаю юзеру нужна вижуальность, а в таком случае нужно делать нехилую проверку на баобабовость...
gomer вне форума  
 
Автор темы   Непрочитано 04.10.2013, 05:30
#15
gumel


 
Регистрация: 20.04.2011
Сообщений: 485


TararykovDG, спасибо тебе огромное! Задача решается, конечно не хватает "вижуальности", но в принципе и так неплохо ))

p.s. Блин, я бы рад чего нибудь добавить/изменить в этом коде, но, к сожалению, LISP никак не идет... Сам синтаксис, куча скобок и т.п. меня сбивают с толку, и не дают сосредоточится на усвоении чего либо. Признаю, что я не прикладывал много усилий на изучение LISP'а, поскольку не возникало особой необходимости в этом. Пишу на Delphi (непрофессионально), делал приложения, которые связываются с AutoCAD'ом (производят анализ начерченного, делают промежуточные вычисления и т.п.), пробовал себя в VBA под AutoCAD, - тоже не особо понравилось.. Наверное тут дело привычки и потребностей. В любом случае я ВАМ премного благодарен! СПАСИБО !!!
gumel вне форума  
 
Непрочитано 04.10.2013, 12:38
#16
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от gomer Посмотреть сообщение
В общем, я так понимаю юзеру нужна вижуальность
Цитата:
Сообщение от gumel Посмотреть сообщение
конечно не хватает "вижуальности"
Ну, можно и "вижуальности" добавить
Код:
[Выделить все]
 (defun c:CTL()
  (vl-load-com)
  ((lambda(act_doc prew_nbr clayer last_obj)
     (vla-StartUndoMark act_doc)
     ((lambda(nbr)
	(if (and nbr
		 (not (vl-catch-all-error-p nbr))
		 )
	  (progn
	    (vl-cmdf "_.copy" nbr "")
	    (if (while (= (getvar "CMDACTIVE") 1) (vl-cmdf pause))
	      (while (setq last_obj (entnext last_obj))
		(vla-put-layer (vlax-ename->vla-object last_obj) clayer)
		)
	      )
	    )
	  )
	)
       (if prew_nbr
	 prew_nbr
	 (vl-catch-all-apply 'ssget)
	 )
       )
     (vla-EndUndoMark act_doc)
     )
    (vla-get-activedocument (vlax-get-acad-object))
    (cadr (ssgetfirst))
    (getvar "clayer")
    (entlast)
    )
  (princ)
  ); end CTL
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 04.10.2013, 12:48
#17
gumel


 
Регистрация: 20.04.2011
Сообщений: 485


TararykovDG, ну ты вообще - СУПЕРПИЛОТ !!! )) спасибо огромное !
gumel вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как сделать аналог команды CopyToLayer для AutoCAD 2006 ?

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу буржуйский аналог табл. 55 "Материалы для сварки" СНиП "Стальные конструкции" kotyar@ Поиск литературы, чертежей, моделей и прочих материалов 5 08.01.2013 12:18
Посоветуйте аналог Autodesk 3ds Max Design surfman Другие CAD системы 3 18.09.2012 17:38
Функция выбрать аналог Андрюха_вода AutoCAD 4 17.03.2010 13:27
Как можно из LISP запросить у юзера выделить произвольные элементы и затем вызвать аналог WMFOUT для сохранения их в изображении? lexluther LISP 4 12.08.2009 11:44