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

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

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

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

наверно многие сталкивались - при нанесении привязок у повторяющейся арматуры ставим засечку на первой и последней и меняем текст Пример: n*шаг=<> / 6*200=<>
есть ли какое-то приложение или макрос который позволяет автоматически менять такие размеры?
а то позеленеть можно, если каждый раз так лезть в свойства размеров и менять
Просмотров: 7358
 
Непрочитано 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,409


Код скопирован не полностью - не хватает одной закрывающей скобки.
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,409


(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.
мозг вне форума  
Ответ
Вернуться   Форум 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