автоматическое изменение текста в размераХ (количество*шаг=<>)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > автоматическое изменение текста в размераХ (количество*шаг=<>)

автоматическое изменение текста в размераХ (количество*шаг=<>)

Ответ
Поиск в этой теме
Непрочитано 06.08.2010, 12:29 #1
автоматическое изменение текста в размераХ (количество*шаг=<>)
olix
 
Санкт-Петербург
Регистрация: 16.03.2005
Сообщений: 89

наверно многие сталкивались - при нанесении привязок у повторяющейся арматуры ставим засечку на первой и последней и меняем текст Пример: n*шаг=<> / 6*200=<>
есть ли какое-то приложение или макрос который позволяет автоматически менять такие размеры?
а то позеленеть можно, если каждый раз так лезть в свойства размеров и менять
Просмотров: 7356
 
Непрочитано 06.08.2010, 12:56
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


в префиксе надо это писать (пример: 6х20=), а не в строке переопределения размеров. тогда с этими размерами будет работать команда наследования свойств _matchprop и будет немного легче
Хмурый вне форума  
 
Автор темы   Непрочитано 06.08.2010, 14:35
#3
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™


не поняла в каком таком префиксе?
olix вне форума  
 
Непрочитано 06.08.2010, 14:37
#4
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


у размеров есть свойства: префикс- то, что перед, и суффикс- то, что после
Хмурый вне форума  
 
Непрочитано 06.08.2010, 15:00
#5
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Имелось ввиду это?
Программа просит указать величину шага, а потом указать примитив размера.
В итоге текст в размере меняется с "Х" на "NxШАГ=Х". N - число, равное тому, сколько ШАГ умещается в Х - вычисляется в программе .
Код:
[Выделить все]
(defun test (/ *error* adoc name_ent list_ent dim_value n1)
  (vl-load-com)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ "Работа программы прервана пользователем")
  )
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  )
  (initget 6)
  (if (not _var_n)
    (setq _var_n0 100)
  )
  (setq	_var_n
	 (getint (strcat "\nВведите положительное целое число <"
			 (rtos _var_n0)
			 ">: "
		 )
	 )
  )
  (if (not _var_n)
    (setq _var_n _var_n0)
    (setq _var_n0 _var_n)
  )
  (setq name_ent (entsel "\nВыберите размер: "))
  (if name_ent
    (progn
      (setq list_ent (entget (car name_ent)))
      (while (not
	       (= (cdr (assoc 0 list_ent)) "DIMENSION")
	     )
	(setq name_ent (entsel "\nВыберите размер: "))
      )
      (setq list_ent  (entget (car name_ent))
	    dim_value (cdr (assoc 42 list_ent))
	    n1	      (rtos (/ dim_value _var_n) 2 0)
      )
      (entmod
	(subst
	  (cons	1
		(strcat	n1
			"x"
			(itoa _var_n)
			"=<>"
		)
	  )
	  (assoc 1 list_ent)
	  list_ent
	)
      )
    )
    (princ "Размер не выбран!")
  )
  (vla-endundomark adoc)
  (princ)
)

Последний раз редактировалось Makswell, 06.08.2010 в 15:12. Причина: Немного подправил код.
Makswell вне форума  
 
Автор темы   Непрочитано 06.08.2010, 15:20 это!!!!!
#6
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™


да, мысль эта, я задаю шаг, щёлкаю по размеру и он меняется.
но та ссылка что вы дали просит указать объект( и не совсем работает (
olix вне форума  
 
Непрочитано 06.08.2010, 15:25
#7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Так и должно работать:
Цитата:
Сообщение от olix Посмотреть сообщение
задаю шаг, щёлкаю по размеру и он меняется.
Что поконкрентней работает "не совсем"?
Makswell вне форума  
 
Автор темы   Непрочитано 06.08.2010, 16:00
#8
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™


пример:
я ставлю размер ( получается 4400)
копирую в командрую чтроку весь текст:
Код:
[Выделить все]
(defun test (/ *error* adoc name_ent list_ent dim_value n1)
  (vl-load-com)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ "Работа программы прервана пользователем")
  )
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  )
  (initget 6)
  (if (not _var_n)
    (setq _var_n0 100)
  )
  (setq	_var_n
	 (getint (strcat "\nВведите положительное целое число <"
			 (rtos _var_n0)
			 ">: "
		 )
	 )
  )
  (if (not _var_n)
    (setq _var_n _var_n0)
    (setq _var_n0 _var_n)
  )
  (setq name_ent (entsel "\nВыберите размер: "))
  (if name_ent
    (progn
      (setq list_ent (entget (car name_ent)))
      (while (not
	       (= (cdr (assoc 0 list_ent)) "DIMENSION")
	     )
	(setq name_ent (entsel "\nВыберите размер: "))
      )
      (setq list_ent  (entget (car name_ent))
	    dim_value (cdr (assoc 42 list_ent))
	    n1	      (rtos (/ dim_value _var_n) 2 0)
      )
      (entmod
	(subst
	  (cons	1
		(strcat	n1
			"x"
			(itoa _var_n)
			"=<>"
		)
	  )
	  (assoc 1 list_ent)
	  list_ent
	)
      )
    )
    (princ "Размер не выбран!")
  )
  (vla-endundomark adoc)
  (princ)
)

получаю ответ (_> )
ввожу нужный мне шаг 200
и тут получается что в командной стороке вводится 2 а где курсив только 00 и все виснит.. как-то так
olix вне форума  
 
Непрочитано 06.08.2010, 16:05
#9
Кулик Алексей aka kpblc
Moderator

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


Код скопирован не полностью - не хватает одной закрывающей скобки.
P.S. Прочти dwg.ru/pub/9
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.08.2010, 13:50
#10
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™


все заработало!!!!!!!! УРА!!!! супер штука!!! и оочень ускоряет работу!
Спасбо!!!
olix вне форума  
 
Непрочитано 12.08.2010, 16:25
#11
мозг

конструктор ПГС
 
Регистрация: 02.09.2007
Киев
Сообщений: 57


ка краз заинтересовался той же проблемой.
но у меня получается такое
Цитата:
Команда: (axb)
; ошибка: В функции *error* возникла ошибка:нет описания функции:
VLA-ENDUNDOMARK
мозг вне форума  
 
Непрочитано 12.08.2010, 16:29
#12
Кулик Алексей aka kpblc
Moderator

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


(vl-load-com) в самое начало лиспа добавить надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.08.2010, 16:41
#13
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Я там как раз это добавил спустя 12 минут после первоначального опубликования кода...
Makswell вне форума  
 
Непрочитано 12.08.2010, 16:48
#14
мозг

конструктор ПГС
 
Регистрация: 02.09.2007
Киев
Сообщений: 57


не работает
асад 2008 русский

пожно поставить вопрос по другому.

как в размере вида
200xA=<>
при его растягивании заставить <> делиться на 200 и возвращать число A ?

Последний раз редактировалось мозг, 12.08.2010 в 16:59.
мозг вне форума  
 
Автор темы   Непрочитано 12.08.2010, 17:30
#15
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™


я сделала LISp файл например shag.lsp
со следующим текстом, который советовали выше, добавила тольо название shag:

Код:
[Выделить все]
(defun C:shag (/ *error* adoc name_ent list_ent dim_value n1)
  (vl-load-com)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ "Работа программы прервана пользователем")
  )
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  )
  (initget 6)
  (if (not _var_n)
    (setq _var_n0 100)
  )
  (setq	_var_n
	 (getint (strcat "\nВведите положительное целое число <"
			 (rtos _var_n0)
			 ">: "
		 )
	 )
  )
  (if (not _var_n)
    (setq _var_n _var_n0)
    (setq _var_n0 _var_n)
  )
  (setq name_ent (entsel "\nВыберите размер: "))
  (if name_ent
    (progn
      (setq list_ent (entget (car name_ent)))
      (while (not
	       (= (cdr (assoc 0 list_ent)) "DIMENSION")
	     )
	(setq name_ent (entsel "\nВыберите размер: "))
      )
      (setq list_ent  (entget (car name_ent))
	    dim_value (cdr (assoc 42 list_ent))
	    n1	      (rtos (/ dim_value _var_n) 2 0)
      )
      (entmod
	(subst
	  (cons	1
		(strcat	n1
			"x"
			(itoa _var_n)
			"=<>"
		)
	  )
	  (assoc 1 list_ent)
	  list_ent
	)
      )
    )
    (princ "Размер не выбран!")
  )
  (vla-endundomark adoc)
  (princ))


подгружаем lisp file

Последний раз редактировалось Кулик Алексей aka kpblc, 12.08.2010 в 18:38.
olix вне форума  
 
Непрочитано 12.08.2010, 18:09
#16
мозг

конструктор ПГС
 
Регистрация: 02.09.2007
Киев
Сообщений: 57


не работает
мозг вне форума  
 
Непрочитано 12.08.2010, 21:03
1 | #17
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Тема "вертикальная выноска линейного размера"
http://forum.dwg.ru/showthread.php?t...EC%E5%F0%E0%22
пост 62 Команда DTO (Dimension text override)
Подойдет? Лисп классный, как и все от VVA, там кроме этой команды несколько других для раборы с размерами
Vova вне форума  
 
Непрочитано 13.08.2010, 10:15
#18
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Цитата:
Сообщение от мозг Посмотреть сообщение
как в размере вида
200xA=<>
при его растягивании заставить <> делиться на 200 и возвращать число A ?
Вставляй вместо А поле (field), в формулу которого забиваешь <>/200
ытя вне форума  
 
Непрочитано 13.08.2010, 10:41
#19
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Аналогичная фигня на VBA... В выпадающем списке задаем шаг, выбираем размер.. Также можно добавлять суффиксы - префиксы, заменять текст размера.. (двойной клик по форме - для введения нужного текста..)

Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 456
Размер:	10.4 Кб
ID:	43655  
Вложения
Тип файла: dvb 200хN_Равно.dvb (80.0 Кб, 82 просмотров)
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 13.08.2010, 10:56
#20
мозг

конструктор ПГС
 
Регистрация: 02.09.2007
Киев
Сообщений: 57


лисп то классный, но не то.
DTO это просто массовая перебивка размера. я правильно понимаю?

попробую объяснить (см. картинку)
у меня есть, допустим сетка 2000х2400.
образмериваю, забиваю в размер диапазон 200х12=
при этом само значение размера не перебиваю,
то есть если я увеличу сетку, например, до 3000, то и размер поменяется.
т. о. мне нужно исправить 200х12 на 200х15.
пару раз то перебить можно, но проблема возникает когда таких сеток может быть под сто.
вот я и интересуюсь, как можно оформить какую-нить формулу.

п.с. первый лисп так и не заработал.
п.с.2 поле с формулой <>/200 не работает,

апдейт.
работает с формулой, но в таком случае нужно брать для поля значение размера, соответственно берется каждый раз свой отдельный id,
а хотелось бы забить универсальную формулу во все размеры.
Миниатюры
Нажмите на изображение для увеличения
Название: dim.jpg
Просмотров: 74
Размер:	25.0 Кб
ID:	43659  

Последний раз редактировалось мозг, 13.08.2010 в 11:54.
мозг вне форума  
 
Непрочитано 13.08.2010, 11:32
#21
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


<>/200 - это я утрированно описал принцип. В формуле поля вместо <> должна быть ссылка(поле) на значение этого же размера.
ытя вне форума  
 
Непрочитано 13.08.2010, 11:43
#22
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от ытя Посмотреть сообщение
<>/200 - это я утрированно описал принцип. В формуле поля вместо <> должна быть ссылка(поле) на значение этого же размера.
Интересно, а как поле вставлять в префикс размера? У меня лично не получается..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 13.08.2010, 12:10
#23
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Вставить поле в посторонний текст, оттуда скопировать через свойства поля его описание в буфер. Из буфера вставить в формулу поля в префиксе размера.

В префикс, возможно не получиться, а в сам текст можно.

Последний раз редактировалось ытя, 13.08.2010 в 12:18. Причина: добавил
ытя вне форума  
 
Непрочитано 13.08.2010, 12:13
#24
Andrey V.

Structural engineer
 
Регистрация: 09.06.2010
Санкт-Петербург
Сообщений: 80


Присоединяюсь, хотелось бы, чтобы количество*шаг вставлялось в префикс размера. Я так понимаю, реализовать на лиспе, чтобы шаг в префиксе размера автоматически обновлялся при его изменении нереально? А можно ли тогда написать лисп, который бы находил и обновлял во всех размерах на чертеже (или из области выделения) шаг?
Andrey V. вне форума  
 
Непрочитано 26.01.2012, 09:28
#25
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994


Цитата:
Сообщение от ытя Посмотреть сообщение
Вставить поле в посторонний текст, оттуда скопировать через свойства поля его описание в буфер. Из буфера вставить в формулу поля в префиксе размера.
Не получается так сделать(
Префикс не становится "интеллектуальным". Там вообще появляются ####
crosandr вне форума  
 
Непрочитано 26.01.2012, 09:46
#26
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


открывайте текст размера через _ddedit (редактор текста) и вводите поля перед размерным числом или после
Хмурый вне форума  
 
Непрочитано 26.01.2012, 12:45
#27
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994


Цитата:
Сообщение от Хмурый Посмотреть сообщение
открывайте текст размера через _ddedit (редактор текста) и вводите поля перед размерным числом или после
Все так и делаю, в порядке, описанном в п.23.
Вот значение поля: %<\AcObjProp Object(%<\_ObjId -1238487136>%).Measurement \f "%lu2%pr0">% (величина размера)
вставляю этот текст перед размером и получаю ####
вставляю в префикс - такая же ситуация
Как лечить?
crosandr вне форума  
 
Непрочитано 26.01.2012, 14:04
#28
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


думаю, что сделать поле со ссылкой на сам объект, в котором это поле создано- нереально
Хмурый вне форума  
 
Непрочитано 26.01.2012, 14:44
#29
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994


Цитата:
Сообщение от Хмурый Посмотреть сообщение
думаю, что сделать поле со ссылкой на сам объект, в котором это поле создано- нереально
Получается так. Картина точь-в-точь, как в п.20. А жаль(( Интеллектуальная приставка к размеру не получается. Буду допиливать код из п.15
_regenall лечит

Последний раз редактировалось crosandr, 26.01.2012 в 15:06. Причина: был неправ
crosandr вне форума  
 
Непрочитано 26.01.2012, 15:17
#30
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Если использовать промежуточный текст, поле которого берет значение размера, то в сам размер можно вставить поле с ссылкой на этот текст. Последнее поле обновляется со 2-го раза. Текст можно поместить на невидимый слой.
Вложения
Тип файла: dwg
DWG 2010
Drawing1.dwg (107.8 Кб, 834 просмотров)

Последний раз редактировалось ытя, 26.01.2012 в 15:25. Причина: Выше правильное решение
ытя вне форума  
 
Непрочитано 26.01.2012, 15:31
#31
мозг

конструктор ПГС
 
Регистрация: 02.09.2007
Киев
Сообщений: 57


вотЪ, держите

в поле можно отредактировать шаг вместо 200.
Вложения
Тип файла: dwg
DWG 2007
размер.dwg (64.3 Кб, 865 просмотров)
мозг вне форума  
 
Непрочитано 26.01.2012, 16:33
#32
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994


Цитата:
Сообщение от мозг Посмотреть сообщение
вотЪ, держите
Поле внутри поля. Спасибо, будем эксперементировать.
crosandr вне форума  
 
Непрочитано 26.01.2012, 16:44
#33
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


хочу предупредить, что в какой-то неопределённый момент поля перестают вычислять значения по формулам....
Хмурый вне форума  
 
Непрочитано 26.01.2012, 17:29
#34
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994


Цитата:
Сообщение от Хмурый Посмотреть сообщение
поля перестают вычислять значения по формулам
автокадобаг?
crosandr вне форума  
 
Непрочитано 26.01.2012, 18:30
#35
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Цитата:
Сообщение от crosandr Посмотреть сообщение
автокадобаг?
да, очередной
Хмурый вне форума  
 
Непрочитано 27.01.2012, 11:45
#36
мозг

конструктор ПГС
 
Регистрация: 02.09.2007
Киев
Сообщений: 57


у меня все работает в 2008 и 2011
мозг вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > автоматическое изменение текста в размераХ (количество*шаг=<>)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Привязка текста в размерах Piton AutoCAD 30 05.01.2017 00:58
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
сжатие текста в размерах Axel_ AutoCAD 2 03.12.2007 14:15
Изменение значения текста в зависимости от Z координаты fortuna AutoCAD 20 21.12.2006 12:51
Изменение форматированного текста посредством lisp Tramp LISP 4 03.03.2006 11:28