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

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

автоматическая запись значений в описание блока

Ответ
Поиск в этой теме
Непрочитано 27.08.2011, 10:38 #1
автоматическая запись значений в описание блока
Jоhnny
 
всё что связано с упорядоченным движением заряженных частиц
 
М.О.
Регистрация: 27.07.2007
Сообщений: 1,693

Здравствуйте уважаемые форумчане. В очередной раз прошу помощи с решением одной задачи. В идеале хотелось бы получить программу (или макрос), работающую по следующему алгоритму: при выполнении которой сначала выдавался бы запрос на построение замкнутого контура, потом происходило вычисление его площади, после чего создавался бы блок, включающий в себя этот контур и в поле Name или Description описания вхожения блока автоматически подставлялось значение площади. Перепробовал много разных вариантов написания макроса, но самая большая проблема это именно автоматическая подстановка значений в описание блока, с остальным думаю справлюсь. В лиспе не силён, есть 3 книги Полищука, кое-что от туда для себя узнал, но результата пока нет.
Заранее спасибо.
Просмотров: 3856
 
Непрочитано 27.08.2011, 10:58
#2
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


http://www.caduser.ru/forum/index.ph...ID=2&TID=19345
Nike вне форума  
 
Автор темы   Непрочитано 28.08.2011, 11:15
#3
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


Цитата:
Сообщение от Nike Посмотреть сообщение
Кое что от туда полезного для себя узнал, но всё же там нет главного - как автоматически подставить значение площади в имя блока.
Jоhnny вне форума  
 
Непрочитано 28.08.2011, 11:41
#4
Кулик Алексей aka kpblc
Moderator

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


В имя блока?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.08.2011, 21:33
#5
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


(vl-cmdf "_-block" (rtos Площадь 2 0) и т.д.) ???
Или я что-то не понял???
E-degtyarev вне форума  
 
Непрочитано 28.08.2011, 23:16
#6
Кулик Алексей aka kpblc
Moderator

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


А как бы тот факт, что площади у разных фигур могут совпадать, не учитывается?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.08.2011, 08:32
#7
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А как бы тот факт, что площади у разных фигур могут совпадать, не учитывается?
Да, теоретически, такое событие может иметь место быть. Хотя маловероятно.
Можно приклеить к площади какой-то индекс, например, получить текущее время и добавить к площади эту цифирь, отделив их как-то друг от друга.
PS: все зависит от конкретной задачи.
E-degtyarev вне форума  
 
Непрочитано 29.08.2011, 08:45
#8
Кулик Алексей aka kpblc
Moderator

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


Намного проще будет создавать поле и объединять его в группу с элементом-владельцем.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.08.2011, 10:04
#9
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А как бы тот факт, что площади у разных фигур могут совпадать, не учитывается?
kpblc прав, так не пойдёт. Возможна ли запись значения площади в поле Description блока. При вводе _-block запроса на ввод этого значения не выводится . И ещё один момент: после создания блока "с клавиатуры" и указания всех значений что там запрашиваются блок куда-то исчезает, но его можно легко вставить командой _insert, но мне хотелось бы чтобы он автоматически вставал на тже самое место (или не исчезал после создания, может дело в какой-нибудь системной переменной). Я пробовал вставлять также "с клавиатуры", при создании и вставке блока указываю @ как символ последней введённой точки, но вставляется он всё равно в том месте в котором в текущий момент расположен курсор.
E-degtyarev можшь пояснить что ты тут написал?
Цитата:
(vl-cmdf "_-block" (rtos Площадь 2 0) и т.д.) ???
P.S. попозже выложу пример того что пока у меня получилось.

Последний раз редактировалось Jоhnny, 29.08.2011 в 10:45.
Jоhnny вне форума  
 
Непрочитано 29.08.2011, 12:27
#10
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Вставляйте площадь в атрибут блока и будет вам счастье.
Victor вне форума  
 
Автор темы   Непрочитано 29.08.2011, 12:50
#11
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


Цитата:
Сообщение от Victor Посмотреть сообщение
Вставляйте площадь в атрибут блока и будет вам счастье.
Каким образом? я хочу чтобы это происходило автоматически. Я представляю сбе примерно такой алгоритм: создаю контур, вычисляю площадь и записываю значение в какую-то переменнную, потом создаю блок и в атрибуты передаю значение переменной (вот здесь проблема).
Jоhnny вне форума  
 
Непрочитано 29.08.2011, 12:55
#12
Сергей Богатов


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Намного проще будет создавать поле и объединять его в группу с элементом-владельцем.
Присоединяюсь. Это хороший вариант.

Вопрос автору: а для чего делать именно блоки? Дальше они будут как-то обрабатываться? Или что?
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 29.08.2011, 13:03
#13
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Создайте блок PLS с атрибутом а лучше с двумя.
Потом кликайте внутри замкнутого контура. Запуск plm
Вложения
Тип файла: lsp plm.lsp (739 байт, 44 просмотров)
Victor вне форума  
 
Автор темы   Непрочитано 29.08.2011, 13:58
#14
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


Цитата:
Сообщение от Сергей Богатов Посмотреть сообщение
Присоединяюсь. Это хороший вариант.

Вопрос автору: а для чего делать именно блоки? Дальше они будут как-то обрабатываться? Или что?
Если коротко, то да.
Цитата:
Создайте блок PLS с атрибутом а лучше с двумя.
Потом кликайте внутри замкнутого контура. Запуск plm
в моём случае я хочу сам создавать блоки и присваивать им имена (т.е. ручной ввод), а вот площадь чтобы сама подставлялась в атрибуты.
Возможен ли такой алгоритм: сначла команда _.block - присваиваем имя, потом вместо select object - pline, вычисление площади и запись в атрибут?
Цитата:
Намного проще будет создавать поле и объединять его в группу с элементом-владельцем.
Хороший вариант. Только можно ли сделать так чтобы не выскакивало диалоговое окно, а было настроено например что брать мы будем именно площадь? И почему-то _-field не работает.

Последний раз редактировалось Jоhnny, 29.08.2011 в 15:01.
Jоhnny вне форума  
 
Непрочитано 29.08.2011, 18:43
#15
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Попробуй. Запуск (test) со скобками. Сильно не проверял, будут ошибки, пиши.
PS. запишет "значения площади в поле Description блока".
Вложения
Тип файла: lsp test.LSP (1.7 Кб, 48 просмотров)

Последний раз редактировалось Oliver_88, 29.08.2011 в 19:35. Причина: (vl-load-com)
Oliver_88 вне форума  
 
Непрочитано 30.08.2011, 00:08
#16
Кулик Алексей aka kpblc
Moderator

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


Зачем реакторы на такую задачу прицеплять, хоть убей не понимаю... На скорую руку накидал свой вариант, без блоков.
Код:
[Выделить все]
 (vl-load-com)

(defun c:mkgrp (/ adoc _kpblc-objectidtoobject make-group-and-field)

  (defun _kpblc-objectidtoobject (obj id)
    (if	(> (vl-string-search "x64" (getvar "platform")) 0)
      (vla-objectidtoobject32 obj id)
      (vla-objectidtoobject obj id)
      ) ;_ end of if
    ) ;_ end of defun

  (defun make-group-and-field (ent / pt minp maxp midp fld gr)
    (if	(and ent
	     (setq ent (vlax-ename->vla-object ent))
	     (vlax-property-available-p ent 'area)
	     ) ;_ end of and
      (cond
	((or (and (wcmatch (strcase (vla-get-objectname ent)) "*POLYLINE,*SPLINE")
		  (equal (vla-get-closed ent) :vlax-true)
		  ) ;_ end of and
	     (wcmatch (strcase (vla-get-objectname ent)) "*CIRCLE")
	     ) ;_ end of or
	 (vla-getboundingbox ent 'minp 'maxp)
	 (setq minp (vlax-safearray->list minp)
	       maxp (vlax-safearray->list maxp)
	       midp (mapcar '(lambda (a b) (* (+ a b) 0.5)) minp maxp)
	       fld  (vla-addtext
		      (_kpblc-objectidtoobject adoc (vla-get-ownerid ent))
		      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
			      (vl-princ-to-string
				(if (> (vl-string-search "x64" (getvar "platform")) 0)
				  (vlax-invoke-method (vla-get-utility adoc) "GetObjectIdString" ent :vlax-false)
				  (rtos (vla-get-objectid ent) 2 0)
				  ) ;_ end of if
				) ;_ end of vl-princ-to-string
			      ">%).Area \\f \"%lu6%qf1\">%"
			      ) ;_ end of strcat
		      (vlax-3d-point midp)
		      (if (= (vla-get-height (vla-get-activetextstyle adoc)) 0.)
			(vlax-variant-value (vla-getvariable adoc "textsize"))
			(vla-get-height (vla-get-activetextstyle adoc))
			) ;_ end of if
		      ) ;_ end of vla-addtext
	       gr   (vla-add (vla-get-groups adoc) "*")
	       ) ;_ end of setq
	 (vla-appenditems
	   gr
	   (vlax-make-variant
	     (vlax-safearray-fill
	       (vlax-make-safearray
		 vlax-vbobject
		 '(0 . 1)
		 ) ;_ end of vlax-make-safearray
	       (list ent fld)
	       ) ;_ end of vlax-safearray-fill
	     ) ;_ end of vlax-make-variant
	   ) ;_ end of vla-AppendItems
	 )
	) ;_ end of cond
      (princ "\nНичего не выбрано или объект не имеет свойства площади")
      ) ;_ end of if
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (while (= (type (setq	ent (vl-catch-all-apply
			      (function
				(lambda	()
				  (car (entsel "\nВыберите примитив <Отмена> : "))
				  ) ;_ end of lambda
				) ;_ end of function
			      ) ;_ end of vl-catch-all-apply
			) ;_ end of setq
		  ) ;_ end of type
	    'ename
	    ) ;_ end of =
    (make-group-and-field ent)
    ) ;_ end of while
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Ну не нравится мне применение здесь блоков, не нравится! Достаточно его отмасштабировать (даже с одинаковыми коэффициентами) - и все, привет, значение площади неверное.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.08.2011, 08:33
#17
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Цитата:
Сообщение от kpblc
Зачем реакторы на такую задачу прицеплять, хоть убей не понимаю...
С реакторами туговато пока, вот и учусь.
Цитата:
Сообщение от kpblc
Ну не нравится мне применение здесь блоков, не нравится!
Мне тоже. Хотел сначала предложить чтоб он сам мулевал что хотит, а потом уж лисп, но см. выше.
Oliver_88 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > автоматическая запись значений в описание блока

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описание блока в видовой экран Андрей Будзинский AutoCAD 7 24.09.2010 20:21
Поля атрибутов вложенного блока не отображают своих значений hwd AutoCAD 7 23.12.2009 08:40
Автоматическая настройка масштаба блока при вызове его горячими клавишами Геннадий+ AutoCAD 1 22.11.2009 12:16
Подскажите, пожалуйста, как сделать описание (description) для блока? Ламер AutoCAD 5 27.08.2009 14:33
Описание блока Малюк AutoCAD 3 27.06.2007 14:15