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

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

Замена ряда одних объектов другими

Ответ
Поиск в этой теме
Непрочитано 23.03.2009, 21:44
Замена ряда одних объектов другими
bgrade
 
Регистрация: 27.02.2009
Сообщений: 32

Возможно ли в Автокаде заменить одни одинаковые объекты на другие? Что-то вроде "найти-заменить" в тексте...
Просмотров: 38856
 
Непрочитано 02.02.2017, 18:39
#21
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Цитата:
Сообщение от ILIYA Посмотреть сообщение
Хорошо, спасибо за помощь завтра пойду к топографам
По этому моменту ходить не нужно, разъяснение дано Кулик Алексей aka kpblc.
Цитата:
В файле присутствует то ли 2, то ли 3 ординатных размера, привязанных к 0.
----- добавлено через ~2 мин. -----
Offtop: И в который раз сокрушаюсь, что почему-то недоступна опция редактирования сообщения. Надо бы подкорректировать, но увы...
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 02.02.2017, 22:00
#22
ILIYA

Проектант или Вечный ученик
 
Регистрация: 06.05.2011
Сообщений: 802


Цитата:
Сообщение от sertor Посмотреть сообщение
По этому моменту ходить не нужно, разъяснение дано Кулик Алексей aka kpblc.
Цитата:
В файле присутствует то ли 2, то ли 3 ординатных размера, привязанных к 0.
Мне это не о чем не говорит, я не настолько прошарен как Вы и Кулик Алексей aka kpblc.
ILIYA вне форума  
 
Непрочитано 07.09.2019, 10:57
#23
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Большое спасибо!
allar8 вне форума  
 
Непрочитано 16.11.2020, 16:06
#24
wepp

Инжиниринг
 
Регистрация: 16.09.2011
Тюмень
Сообщений: 224


Может быть кто-то подскажет, что я делаю не так. В коде лиспа FRTO пытаюсь заменить выбор source object с выбора на экране на ввод имени блока (нужно, чтобы лисп работал в скрипте). Я так понимаю, мне нужно поменять способ выбора объекта при назначении переменной extSet.
Было:
Код:
[Выделить все]
   (setq extSet(ssget "_I"))
 (while (not (setq toObj(entsel "\n+++ Select source object -> ")))
   (princ "\nSource objects isn't selected!"))
  (if(not extSet)
    (progn
      (princ "\n+++ Select destination objects and press Enter <- ")
      (setq extSet(ssget "_:L")))); end if
  (if(not extSet)(princ "\nDestination objects isn't selected!")); end if
  (if (and extSet toObj)
Стало:
Код:
[Выделить все]
 (setq nb (getstring T "\nВведите имя блока: "))
	(setq extSet (ssget "_X" '((0 . "INSERT")(2 . nb))))
	   (while (not (setq toObj(entsel "\n+++ Select source object -> ")))
   (princ "\nSource objects isn't selected!"))
  (if(not extSet)
    (progn
      (princ "\n+++ Select destination objects and press Enter <- ")
      (setq extSet(ssget "_:L")))); end if
  (if(not extSet)(princ "\nDestination objects isn't selected!")); end if
  (if (and extSet toObj)

Стало изм.1:
Код:
[Выделить все]
 (setq extSet (getstring T "\nВведите имя блока: "))
		   (while (not (setq toObj(entsel "\n+++ Select source object -> ")))
   (princ "\nSource objects isn't selected!"))
  (if(not extSet)
    (progn
      (princ "\n+++ Select destination objects and press Enter <- ")
      (setq extSet(ssget "_:L")))); end if
  (if(not extSet)(princ "\nDestination objects isn't selected!")); end if
  (if (and extSet toObj)
При таком раскладе получаю: неверный тип аргумента: VLA-OBJECT nil

Может быть ошибка где-то в другом месте, вот код целиком (от изначального ещё сделал корректировки):
Offtop:
Код:
[Выделить все]
 ;;; http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=44&TID=21135&MID=118777#message118777
;;; http://www.cadtutor.net/forum/showthread.php?p=340865#post340865
;;;Программа меняет набор примитивов на выбранный примитив.
;;;Примеры применения:
;;;Замена одних блоков другими.
;;;Замена точек блоками или окружностями.
;;;Замена одних надписей другими.
;;;
;;;УДАЛЯЕТ исходные примитивы без запроса
;;;
;;;Сначала надо выбрать образец, затем указать заменяемые объекты. Вставка производится в центр ограничевающего
;;;(габаритного) прямоугольника старых объектов. Новые объекты вставляются в слои которые к которым пренадлежали старые объекты.
;;;Поддерживается предварительный выбор.

;;; Command changes the set of primitives for the selected primitive. 
;;; Examples: 
;;; Replacement of some other blocks. 
;;; Replacement blocks or dots circles. 
;;; Replacement of some other titles. 
;;; 
;;; First you need to select a sample, and then specify replaceable objects. Box is in the center is restricted (bounding) rectangle of old objects. New objects are inserted into the layers that Belonged to which the old objects. 
;;; Supports pre-selection.
(defun c:frto(/ ACTDOC COPOBJ ERRCOUNT EXTLST
       EXTSET FROMCEN LAYCOL MAXPT CURLAY
       MINPT OBJLAY OKCOUNT OLAYST
       SCLAY TOCEN TOOBJ VLAOBJ *ERROR* ASK)
  (vl-load-com)
  (defun *ERROR*(msg)
    (if olaySt (vla-put-Lock objLay olaySt)); end if
    (vla-EndUndoMark actDoc)(princ)); end of *ERROR*

  (defun GetBoundingCenter(vlaObj / blPt trPt cnPt)
  (vla-GetBoundingBox vlaObj 'minPt 'maxPt)
      (setq blPt(vlax-safearray->list minPt)
      trPt(vlax-safearray->list maxPt)
      cnPt(vlax-3D-point
      (list
            (+(car blPt)(/(-(car trPt)(car blPt))2))
            (+(cadr blPt)(/(-(cadr trPt)(cadr blPt))2))
            (+(caddr blPt)(/(-(caddr trPt)(caddr blPt))2)) ;_<<< Заменили
            )))); end of GetBoundingCenter
	(setq nb (getstring T "\nВведите имя блока: "))
	(setq extSet (ssget "_X" '((0 . "INSERT")(2 . nb))))
	   (while (not (setq toObj(entsel "\n+++ Select source object -> ")))
   (princ "\nSource objects isn't selected!"))
  (if(not extSet)
    (progn
      (princ "\n+++ Select destination objects and press Enter <- ")
      (setq extSet(ssget "_:L")))); end if
  (if(not extSet)(princ "\nDestination objects isn't selected!")); end if
  (if (and extSet toObj)
    (progn
       (setq actDoc (vla-get-ActiveDocument(vlax-get-Acad-object))
      layCol (vla-get-Layers actDoc)
      extLst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp
                     (mapcar 'cadr(ssnamex extSet))))
      vlaObj (vlax-ename->vla-object(car toObj))
      objLay (vla-Item layCol (vla-get-Layer (vlax-ename->vla-object(car toObj))))
      olaySt (vla-get-Lock objLay)
     fromCen (GetBoundingCenter vlaObj)
      errCount 0  okCount 0); end setq
      (vla-StartUndoMark actDoc)
      (foreach obj extLst
        (setq toCen (GetBoundingCenter obj)
              scLay (vla-Item layCol (vla-get-Layer obj)));end setq
  (if(/= :vlax-true(vla-get-Lock scLay))
    (progn
    (setq curLay(vla-get-Layer obj))
    (vla-put-Lock objLay :vlax-false)
    (setq copObj(vla-copy vlaObj))
    (vla-Move copObj fromCen toCen)
    (_kpblc-ent-properties-copy obj copObj)
    (vla-put-Layer copObj curLay)
    (vla-put-Lock objLay olaySt)
    (vla-Delete obj)
    (setq okCount(1+ okCount))
    ); end progn
    (setq errCount(1+ errCount))
    ); end if
  ); end foreach
      (princ (strcat "\n" (itoa okCount) " were changed. "
    (if(/= 0 errCount)(strcat (itoa errCount) " were on locked layer! ")  "")))
      (vla-EndUndoMark actDoc)); end progn
    (princ "\nSource object isn't selected! ")
    ); end if
  (princ)); end of c:frto
;|=============================================================================
*    Функция копирования настроек примитивов
*    Параметры вызова:
*   source   примитив-источник (vla)
*   dest   примитив-получатель (vla)
*    Выполняется копирование всех настроек (кроме точек, координат и т.п.), если
* это возможно. Копирование радиусов дуг и окружностей не выполняется.
*    Контроль и преобразование параметров не выполняется.
*    Примеры вызова:
(_kpblc-ent-properties-copy (vlax-ename->vla-object (car (entsel))) (vlax-ename->vla-object (car (entsel))))
*    URL http://www.arcada.com.ua/forum/viewtopic.php?t=504&start=15
=============================================================================|;
(defun _kpblc-ent-properties-copy (source dest)
 (foreach prop   '("Angle" "Layer" "Linetype" "LinetypeScale" "Lineweight"
        "Normal" "PlotStyleName" "Thickness" "Color" "Visible"
        "Closed" ;|"ConstantWidth" ; не копируется|; "Elevation" "LinetypeGeneration"
        "LinetypeScale" ;|"StartAngle" "EndAngle" ; не копируются|; "Alignment"
        "Backward" "Height" "ObliqueAngle" "Rotation" "ScaleFactor" "StyleName"
        "TextGenerationFlag"  "TextHeight"  "UpsideDown"  "AttachmentPoint" "BackgroundFill"
        "DrawingDirection"  "LineSpacingDistance" "LineSpacingFactor" "LineSpacingStyle"  "Width"
        "XScaleFactor" "YScaleFactor" "ZScaleFactor" ;| Viewport|; "ArcSmoothness" "CustomScale"
        "Direction" "DisplayLocked"  "GridOn" "LensLength" "ModelView" "ShadePlot" "SheetView"
        "SnapBasePoint" "SnapOn" "SnapRotationAngle" "StandardScale" "Target"  "TwistAngle"
        "UCSIconAtOrigin"   "UCSIconOn"     "UCSPerViewport" "ViewportOn")
 (if (and (vlax-property-available-p source prop)(vlax-property-available-p dest prop t))
  (_kpblc-error-catch
    '(lambda ()(vlax-put-property dest prop (vlax-get-property source prop))) nil)))) ;_ end of defun
;|=============================================================================
*    Оболочка отлова ошибок.
*    Параметры вызова:
*   protected-function   — "защищаемая" функция
*   on-error-function   — функция, выполняемая в случае ошибки
*    URL http://www.arcada.com.ua/forum/viewtopic.php?t=504&start=15
=============================================================================|;
(defun _kpblc-error-catch
       (protected-function on-error-function / catch_error_result)
  (setq catch_error_result (vl-catch-all-apply protected-function))
  (if (and (vl-catch-all-error-p catch_error_result) on-error-function)
    (apply on-error-function
      (list (vl-catch-all-error-message catch_error_result)))
    catch_error_result)) ;_ end of defun
(princ "\nType FRTO in command line")

Последний раз редактировалось wepp, 16.11.2020 в 16:32. Причина: поменял код
wepp вне форума  
 
Непрочитано 11.12.2020, 14:15
#25
Shadow_elf1979


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


Скажите, а есть что вроде frto, но работающее на автокаде mep '19 и более поздних? Все варианты, которые я нашел не фурычат...
Shadow_elf1979 вне форума  
 
Непрочитано 13.12.2020, 21:21
#26
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Скажите, а есть что вроде frto, но работающее на автокаде mep '19 и более поздних? Все варианты, которые я нашел не фурычат...
https://www.caduser.ru/forum/post118801.html#p118801
Что именно, как не "фурычат"?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 14.12.2020, 14:39
#27
Shadow_elf1979


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Что именно, как не "фурычат"?
Никак не фурычит. Т.е. этапы выделения объектов и заменяемых и назначения он проводит, но после этого ничего не происходит. Даже сообщения об ошибке нет. Если что - стоит AutoCAD MEP 2019.

Цитата:
"Command: FRTO
+++ Select distination objects and press Enter <-
Select objects: Regenerating model.
Specify opposite corner: 6 found
Select objects:
+++ Select source object ->
Command:"
Shadow_elf1979 вне форума  
 
Непрочитано 14.12.2020, 15:13
#28
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Т.е. этапы выделения объектов и заменяемых и назначения он проводит, но после этого ничего не происходит.
Т.е. фурычит, но без результата.
Видимо, у Вас какое-то исключение. Без модельного примера данных не обойтись. Давайте dwg.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 14.12.2020, 15:18
#29
Shadow_elf1979


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Т.е. фурычит, но без результата.
Видимо, у Вас какое-то исключение. Без модельного примера данных не обойтись. Давайте dwg.

Файл, как видите, самый простой, на блоках пока не обкатывал.
Вложения
Тип файла: dwg
DWG 2013
Drawing1.dwg (693.1 Кб, 5 просмотров)
Shadow_elf1979 вне форума  
 
Непрочитано 14.12.2020, 16:41
#30
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Файл, как видите, самый простой
Без проблем заменил там прямоугольники на окружность:
Цитата:
Command:
Command: FRTO
+++ Select source object ->
+++ Select destination objects and press Enter <-
Select objects: Specify opposite corner: 6 found
Select objects:
Remove destination object [Yes/No] <No>:Y
6 were changed.
Command:
Заменял приложенным лиспом. Не знаю, откуда, какая версия, но работает.
Вложения
Тип файла: lsp frto.lsp (6.4 Кб, 44 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 14.12.2020, 16:52
#31
Shadow_elf1979


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Без проблем заменил там прямоугольники на окружность:

Заменял приложенным лиспом. Не знаю, откуда, какая версия, но работает.
Не получилось пока... В чем может быть проблема?

Цитата:
Command: FRTO
+++ Select source object ->
+++ Select destination objects and press Enter <-
Select objects: Specify opposite corner: 6 found
Select objects:
Remove destination object [Yes/No] <No>:n
no function definition: VLA-ENDUNDOMARK
Command:

Последний раз редактировалось Shadow_elf1979, 14.12.2020 в 17:20.
Shadow_elf1979 вне форума  
 
Непрочитано 14.12.2020, 17:57
1 | #32
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Remove destination object [Yes/No] <No>:n
Все-таки с моей версией лиспа у Вас хотя бы эта строка появилась.
Попробуйте ответить не "No", а "Yes", как я. Хотя, у меня и с "No" работает.
Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
no function definition: VLA-ENDUNDOMARK
Видимо, ответ могут дать только программисты...

Можно, конечно, тупо попробовать выйти из Автокада, и зайти снова.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 14.12.2020, 18:29
#33
Shadow_elf1979


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Попробуйте ответить не "No", а "Yes", как я. Хотя, у меня и с "No" работает.
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Можно, конечно, тупо попробовать выйти из Автокада, и зайти снова.
Пробовал. Результат неизменен ((. В любом случае большое спасибо за помощь.

Лично я грешу то ли на 19 год издания, то ли на MEP - возможно что-то из этого мешает работать с лиспом старых образцов. А если откомпилировать этот лисп в arx на рабочем автокаде?
Shadow_elf1979 вне форума  
 
Непрочитано 15.12.2020, 11:53
#34
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Лично я грешу то ли на 19 год издания, то ли на MEP...
Autocad MEP? Мне не послышалось?
А что на что поменять хотите? В нём большие возможности в этом плане!
VitalyAF вне форума  
 
Непрочитано 15.12.2020, 12:38
#35
Shadow_elf1979


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


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Autocad MEP? Мне не послышалось?
А что на что поменять хотите? В нём большие возможности в этом плане!
Не послышалось ))
Конкретно хотел поменять блоки, импортированные из DIALux 4.13 сторонним пользователем на собственные блоки с параметрами. 1 к одному, без изысков.

Если более широко - есть расстановка светильников полученная импортом из DIALux. Я хочу привести ее в соответствие с ГОСТ21.608, используя в качестве УГО собственные блоки с параметром "мощность". Собственно средства MEP как САПР по инженерке я пока не использую, поскольку этот файл мне еще передавать человеку, который MEP не использует.
Shadow_elf1979 вне форума  
 
Непрочитано 15.12.2020, 13:11
2 | #36
Oleg T


 
Регистрация: 27.12.2011
Сообщений: 1,458


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Конкретно хотел поменять блоки, импортированные из DIALux 4.13 сторонним пользователем на собственные блоки с параметрами. 1 к одному, без изысков.
Когда-то для собственных нужд написал простенький лиспик. Может, сгодится?

Код:
[Выделить все]
 ;-------------------------------------------------------
;Программа для замены блока другим по выбору на чертеже
;Работает и с прочими объектами
;-------------------------------------------------------
(defun c:change_objekt ()
	(setq v_repl_1 (getstring "\nУдалить объекты - Enter, оставить - 1"))
	(setq pr_1 (car (entsel "\n Выберите исходный объект")))
	(setq pr_1_ (cdr (assoc '0 (entget pr_1))))
	(setq t_2 (cdr (assoc '10 (entget pr_1))))
	(prompt "\n Выберите объекты, которые планируете заменить")
	(setq nab (ssget))
	(setq kol (sslength nab))
	(setq nab1 (ssadd))
	(setq n -1)
	(repeat kol
		(setq n (+ n 1))
		(setq pr_i (ssname nab n))
		(setq t_1 (cdr (assoc '10 (entget pr_i))))
			(setq lr_1 (assoc '8 (entget pr_i)))
		(setq ang_1 (assoc '50 (entget pr_i)))
		(command "_copy" pr_1 "" t_2 t_1)
		(setq pr_ (entget (entlast)))
			(setq lr_ (assoc '8 pr_))
		(setq ang_ (assoc '50 pr_))
			(setq pr_ (subst lr_1 lr_ pr_))
			(entmod pr_)
		(setq pr_ (subst ang_1 ang_ pr_))
		(entmod pr_)
		(ssadd pr_i nab1)
	)
	(if (= v_repl_1 "") (command "_erase" nab1 ""))
)
Oleg T вне форума  
 
Непрочитано 15.12.2020, 13:45
#37
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Конкретно хотел поменять блоки, импортированные из DIALux 4.13 сторонним пользователем на собственные блоки с параметрами. 1 к одному, без изысков.
собственные блоки - "Блоки" Autocad?
VitalyAF вне форума  
 
Непрочитано 15.12.2020, 13:52
#38
Shadow_elf1979


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


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
собственные блоки - "Блоки" Autocad?
Да. Своими руками. Пара примитивов и параметр.

----- добавлено через ~11 мин. -----


Цитата:
Сообщение от Oleg T Посмотреть сообщение
Когда-то для собственных нужд написал простенький лиспик. Может, сгодится?
Работает! Спасибо!
Shadow_elf1979 вне форума  
 
Непрочитано 15.12.2020, 14:19
#39
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


Цитата:
Сообщение от Shadow_elf1979 Посмотреть сообщение
Да. Своими руками. Пара примитивов и параметр.
Т.е. один блок заменить на другой нужен лиспик...!?
И MEP вы используете как Autocad...
А вообще из Диалюкс импортируется в MEP сразу в устройства Device со свойствами, к-рые сразу можно включать в цепи MEP, причём их можно "включить", отрендерить, получить картинку и таблицу...

Последний раз редактировалось VitalyAF, 15.12.2020 в 14:32.
VitalyAF вне форума  
 
Непрочитано 15.12.2020, 14:32
#40
Shadow_elf1979


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


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Т.е. один блок заменить на другой нужен лиспик...!?
Т.е. есть туева хуча (около 2000) блоков с разными именами (специфика DIALux), не подающиеся поиску (имя типа "*U997", где "*" - это просто символ), ни какой-либо корректировке. Так что replace тут ни разу не канает. И надо их все на единообразный блок.
Shadow_elf1979 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Замена ряда одних объектов другими

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35