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

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

Перенос содержания атрибута с одного блока в другой

Ответ
Поиск в этой теме
Непрочитано 15.04.2014, 10:53 #1
Перенос содержания атрибута с одного блока в другой
Dima_90
 
Регистрация: 15.04.2014
Сообщений: 14

Здравствуйте.
Подскажите пожалуйста программу или что нибудь подобное которая может - анализировать значения тегов в атрибутах в одном блоке, и потом в других, выделенных блоках, искать атрибуты с такими же тегами и менять их значение, или вставлять в значения поле (ссылку на подобии %<\AcObjProp Object(%<\_ObjId 8796087810128>%).TextString>%) для связи значений между одним начальным блоком и остальными.

Другими словами есть блок "Розетка", в котором есть атрибуты со своими значениями (номер группы, мощность, ток, тип электроприемника).
Есть остальные динамические блоки (блок "номер линии", блок "описание оборудования"), в которых присутствует часть атрибутов с такими же тегами.
Нужно взять с блока "Розетка" значения атрибутов и внедрить их в блок "номер линии" и блок "описание оборудования".
Желательно чтобы при изменении значений в блоке "Розетка" менялись значения в блоках "номер линии" и "описание оборудования".
Просмотров: 5579
 
Непрочитано 15.04.2014, 11:08
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,108


dbConnect
trir вне форума  
 
Непрочитано 15.04.2014, 11:32
#3
Дима_

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


Цитата:
Сообщение от Dima_90 Посмотреть сообщение
Подскажите пожалуйста программу или что нибудь подобное
В этой ветке вопросы программирования обсуждаются. Если у Вас не получается реализовать данный вопрос програмно - укажите в чем сложность и на каком языке Вы это пытаетесь реализовать.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.04.2014, 13:30
#4
Dima_90


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


Что то не разобрался как сделать можно через dbConnect.
Как перекинуть эту тему в "Прочее. Программное обеспечение" ?

Последний раз редактировалось Dima_90, 15.04.2014 в 13:44.
Dima_90 вне форума  
 
Непрочитано 15.04.2014, 13:50
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,108


На розетку цепляется запись в таблице, на другие объекты представления/запросы...
trir вне форума  
 
Автор темы   Непрочитано 15.04.2014, 14:44
#6
Dima_90


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


Trir спасибо, буду разбираться
А какая нибудь программка есть на подобии КОПИРОВАТЬСВ чтобы тыкнул на блок у которого атрибуты вбиты, а потом выделил блоки к которым значения этих атрибутов нужно применить?
Dima_90 вне форума  
 
Непрочитано 15.04.2014, 16:07
#7
Кулик Алексей aka kpblc
Moderator

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


Ага, есть. Называется attout и потом attin
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.04.2014, 16:11
#8
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


Код:
[Выделить все]
 
(defun c:blabla (/ bl1 bl2 *error*)
	(defun *error* (msg)
		(setvar 'cmdecho ech)
		(alert "\nУППС ФАКИР БЫЛ ПЬЯН И ФОКУС НЕ УДАЛСЯ.\nПИШИТЕ НА МЫЛО:\n\n\tLEON.APPL2014@GMAIL.COM")
		(princ)
	)
(vl-load-com)
(setq ech (getvar 'cmdecho))
(setvar 'cmdecho 0)
(setq bl1 (vlax-ename->vla-object(car(entsel "\nSET BLOCK 1 :"))) bl2 (vlax-ename->vla-object(car(entsel "\nSET BLOCK 2 :"))))
(mapcar '(lambda (a)
					(mapcar '(lambda (b)
										(if (= (vla-get-tagstring b) (vla-get-tagstring a))
											(vla-put-textstring b (vla-get-textstring a))
										)
									)
							(vlax-safearray->list(vlax-variant-value(vla-getattributes bl2)))
					)
				)
		(vlax-safearray->list(vlax-variant-value(vla-getattributes bl1)))
)
(setvar 'cmdecho ech)
(princ)
)
вставляет аттрибуты из блока 1 в блок 2 по одинаковым тегам.
и все равно замучаешься тыркать по одному блоку.
возможны несколько вариантов решения твоей проблемы
1 долгий и бесплатный практически (скачать учебники и .... как завещал великий вождь)
2 быстрый и платный (ребята на решение этой проблемы мне не жалко ххххх американских рублей ну или русских тоже хорошо)
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Автор темы   Непрочитано 16.04.2014, 02:35
#9
Dima_90


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


Кулик Алексей aka kpblc
attout и потом attin я так понял меняет атрибуты только одних и тех же блоков. Ими удобно работать если сначала экспортировать данные, потом обработать через блокнот значения и импортировать сразу все атрибуты. Это не то что я хотел, хотя уже придумал где мне нужно будет это

nolte
Это практически то что я искал нужно только немножко доработать

Сейчас начал читать "AutoLISP и Visual LISP в среде AutoCAD" Полещук Н.Н., Лоскутов П.В.
и только что нашел тему "Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)"
В дополнение можете посоветовать какую нибудь хорошую книженцию, желательно чтоб там побольше примеров разобранных было?
И через какой редактор легче писать, есть же какая нибудь альтернатива блокноту, чтобы строчки как то выделяло?

Последний раз редактировалось Dima_90, 16.04.2014 в 02:47.
Dima_90 вне форума  
 
Непрочитано 16.04.2014, 04:47
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,108


ИМХО задачка для баз данных, а сними лучше использовать NET API
trir вне форума  
 
Непрочитано 16.04.2014, 08:43
#11
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Dima_90 Посмотреть сообщение
И через какой редактор легче писать, есть же какая нибудь альтернатива блокноту, чтобы строчки как то выделяло?
VLIDE : http://autolisp.ru/2009/09/10/vlide-misc-01/ + http://autolisp.ru/2009/09/12/vlide-misc-02/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.04.2014, 09:11
#12
Dima_90


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


Спасибо за помощь!!!
Немного подделал код, плохо понял что сделал, но получилось . Теперь он спрашивает 1ый раз исходный блок а потом второй и 3 разы блоки в которых нужно поменять атрибуты. Если 3го блока нету можно еще раз тыкнуть по 2 му.

Код:
[Выделить все]
 (defun c:бл (/ bl1 bl2 bl3 *error*)
(defun *error* (msg)
(setvar 'cmdecho ech)
(alert "\nУППС ФАКИР БЫЛ ПЬЯН И ФОКУС НЕ УДАЛСЯ.\nПИШИТЕ НА МЫЛО:\n\n\tLEON.APPL2014@GMAIL.COM")
(princ))
(vl-load-com)
(setq ech (getvar 'cmdecho))
(setvar 'cmdecho 0)
(setq bl1 (vlax-ename->vla-object(car(entsel "\nSET BLOCK 1 :"))) bl2 (vlax-ename->vla-object(car(entsel "\nSET BLOCK 2 :"))) bl3 (vlax-ename->vla-object(car(entsel "\nSET BLOCK 3 :"))))
(mapcar '(lambda (a)
(mapcar '(lambda (b)
(mapcar '(lambda (c)
(if (= (vla-get-tagstring b) (vla-get-tagstring a))
(vla-put-textstring b (vla-get-textstring a))
)
(if (= (vla-get-tagstring c) (vla-get-tagstring a))
(vla-put-textstring c (vla-get-textstring a))
)
)
(vlax-safearray->list(vlax-variant-value(vla-getattributes bl3)))
)
)
(vlax-safearray->list(vlax-variant-value(vla-getattributes bl2)))
)
)
(vlax-safearray->list(vlax-variant-value(vla-getattributes bl1)))
)
(setvar 'cmdecho ech)
(princ)
)
Dima_90 вне форума  
 
Непрочитано 16.04.2014, 09:56
#13
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


а если будет 4 или 5 блоков чего тогда. код таким образом мона растянуть до бесконечности.
я так думаю лучше было бы цикл для выбора блоков, а потом обработка каждого или обработка блоков, лежащих на линии определенной.

http://www.cad.dp.ua/sovets/lisp-functions/blockset.php
во ссылочка полезная надеюсь для тебя будет.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Автор темы   Непрочитано 16.04.2014, 16:10
#14
Dima_90


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


Nolte
Полностью согласен. Но с моими поверхностными знаниями программирования мне это будет тяжеловато. Этот программный код пока мне подходит. Сейчас я планирую немного почитать умных книжек и потом написать свой собственный код с Блэк Джеком и ...)))
За ссылку спасибо, интересная для изучения
Dima_90 вне форума  
 
Автор темы   Непрочитано 05.12.2014, 04:02
#15
Dima_90


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


Немного доработал, теперь можно промахиваться:

Код:
[Выделить все]
 (defun c:бл (/ BlOCK1 BlOCK2 BlOCK3 bl1 bl2 bl3 *error*)
  (defun *error* (msg)
    (setvar 'cmdecho ech)
    (alert
      "\Ошибка"
    )
    (princ)
  )
  (vl-load-com)
  (setq ech (getvar 'cmdecho))
  (setvar 'cmdecho 0)

  (setq BlOCK1 nil)
  (While (= BlOCK1 nil)
    (setq BlOCK1 (car (entsel "\nBLOCK 1 :")))
  )

  (setq BlOCK2 nil)
  (while
    (= BlOCK2 nil)
     (setq BlOCK2 (car (entsel "\nBLOCK 2 :")))
  )

  (setq BlOCK3 nil)
  (while
    (= BlOCK3 nil)
     (setq BlOCK3 (car (entsel "\nBLOCK 3 :")))
  )


  (setq bl1 (vlax-ename->vla-object BlOCK1))
  (setq bl2 (vlax-ename->vla-object BlOCK2))
  (setq bl3 (vlax-ename->vla-object BlOCK3))

  (mapcar
    '(lambda (a)
       (mapcar
         '(lambda (b)
	  (mapcar
	    '(lambda (c)

	       (if (= (vla-get-tagstring b) (vla-get-tagstring a))
	         (vla-put-textstring b (vla-get-textstring a))
	       )
	       (if (= (vla-get-tagstring c) (vla-get-tagstring a))
	         (vla-put-textstring c (vla-get-textstring a))
	       )
	     )
	    (vlax-safearray->list
	      (vlax-variant-value (vla-getattributes bl3))
	    )
	  )

	)
         (vlax-safearray->list
	 (vlax-variant-value (vla-getattributes bl2))
         )
       )
     )
    (vlax-safearray->list
      (vlax-variant-value (vla-getattributes bl1))
    )
  )
  (setvar 'cmdecho ech)
  (princ)
)

Последний раз редактировалось Dima_90, 05.12.2014 в 04:19.
Dima_90 вне форума  
 
Непрочитано 06.12.2014, 10:45
#16
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Посмотрите http://dwg.ru/dnl/12468. Может быть, поможет.
roaa вне форума  
 
Автор темы   Непрочитано 10.12.2014, 04:26
#17
Dima_90


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


Roaa
Спасибо, хорошая програмка с набором функций
Dima_90 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Перенос содержания атрибута с одного блока в другой



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос настроек AutoCAD с одного компьютера на другой... Chief Justice AutoCAD 11 03.12.2020 00:26
Как выделить элементы и перенести на нужный слой. Квадро Николай AutoCAD 11 03.10.2013 11:00
перенос всех линий слоя в блоках в другой слой Positron Программирование 6 10.02.2012 15:59
Изменить поле (формула) атрибута блока EfremenkoDO Программирование 5 08.04.2010 11:43
Перенос настроек AutoCAD на другой компьютер Алексей Викторович AutoCAD 8 09.09.2005 02:17