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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Изменение глобального масштаба для выноски в зависимости от высоты текста выноски

Изменение глобального масштаба для выноски в зависимости от высоты текста выноски

Ответ
Поиск в этой теме
Непрочитано 22.01.2018, 11:23 #1
Изменение глобального масштаба для выноски в зависимости от высоты текста выноски
olga87
 
Регистрация: 28.05.2007
Сообщений: 207

Здравствуйте Уважаемые программисты!
Подскажите пожалуйста лисп (Autocad 2007) для автоматизации следующего:
Есть объект "Выноска" с МТекстом (созданный командой "бвыноска"), нужно для этого объекта назначить через палитру "Свойства" для параметра "Глобальный масштаб размеров" значение в зависимости от высоты текста выноски. Например,
- если высота МТекста выноски = 5, то Глобальный масштаб размеров = 1
- если высота МТекста выноски = 50, то Глобальный масштаб размеров = 10
- если высота МТекста выноски = 500, то Глобальный масштаб размеров = 100,
и т.д.
При этом не меняя настройки текущего размерного стиля (как бы через палитру "Свойства").
Заранее спасибо!
Просмотров: 2104
 
Непрочитано 22.01.2018, 13:44
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


olga87, Лучше будет если приложишь файл с примером "как есть" и "как надо"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.01.2018, 14:35
#3
olga87


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


Например, после создания выноски (высота текста задается переменной TEXTSIZE):

Код:
[Выделить все]
(setq ss2 (entlast))
(if (<= (getvar "TEXTSIZE") 5)
(vla-put-scalefactor (vlax-ename->vla-object ss2) 1.0)
)
Вообще, может лучше посчитать количество символов в числе TEXTSIZE (считать только в целой части): например,
TEXTSIZE=5, то кол-во =1
TEXTSIZE=10, то кол-во =2
TEXTSIZE=100, то кол-во =3
TEXTSIZE=1045, то кол-во =4
и т.д.
и если:
кол-во =1, то (vla-put-scalefactor (vlax-ename->vla-object ss2) 1)
кол-во =2, то (vla-put-scalefactor (vlax-ename->vla-object ss2) 10)
кол-во =3, то (vla-put-scalefactor (vlax-ename->vla-object ss2) 100)
кол-во =4, то (vla-put-scalefactor (vlax-ename->vla-object ss2) 1000)
...
olga87 вне форума  
 
Непрочитано 22.01.2018, 15:08
#4
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Сдается мне, что изменение глобального масштаба размеров (а это DIMSCALE) приведет к переопределению вообще всего размерного стиля.
Setvar вне форума  
 
Автор темы   Непрочитано 22.01.2018, 20:12
#5
olga87


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


Строка, например,
Код:
[Выделить все]
(vla-put-scalefactor (vlax-ename->vla-object ss2) 10)
не меняет глобальный масштаб в настройках текущего размерного стиля, значение меняется только на палитре "Свойства" (разово).

----- добавлено через ~25 мин. -----
Код ниже считает количество всех символов в значении "(getvar "TEXTSIZE")" и соответственно задает значение глобального масштаба.

Код:
[Выделить все]
...
(setq ss2 (entlast))
(if (= (len '(getvar "TEXTSIZE")) 1) (vla-put-scalefactor (vlax-ename->vla-object ss2) 1))
(if (= (len '(getvar "TEXTSIZE")) 2) (vla-put-scalefactor (vlax-ename->vla-object ss2) 10))
(if (= (len '(getvar "TEXTSIZE")) 3) (vla-put-scalefactor (vlax-ename->vla-object ss2) 100))
...

(defun len (lst)
(cond ((null lst) 0) (t (+ 1 (len (cdr lst)))))
)
НО: как исправить, чтобы количество символов считалось только для целой части числа, например,
если (getvar "TEXTSIZE") = 3.5, то len должна быть =1 (а не 2 - как сейчас)?

Последний раз редактировалось olga87, 22.01.2018 в 20:38.
olga87 вне форума  
 
Непрочитано 22.01.2018, 22:24
#6
Кулик Алексей aka kpblc
Moderator

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


(fix (getvar "textsize")) ; ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.01.2018, 23:32
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от olga87 Посмотреть сообщение
НО: как исправить, чтобы количество символов считалось только для целой части числа
Сравнивать числа. Функция len и if не нужны. Нужен 1 cond
Код:
[Выделить все]
(setq ss2 (entlast))
(cond
  ((< (getvar "TEXTSIZE") 10)(vla-put-scalefactor (vlax-ename->vla-object ss2) 1)) ;_От 0 до 9.99
  ((< (getvar "TEXTSIZE") 100)(vla-put-scalefactor (vlax-ename->vla-object ss2) 10));_От 9.99 до 99.99
  (t (vla-put-scalefactor (vlax-ename->vla-object ss2) 100));_Все остальное
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.01.2018, 05:44
#8
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Действительно, DIMSCALE не меняется.
Setvar вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Изменение глобального масштаба для выноски в зависимости от высоты текста выноски

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произвольное изменение масштаба аннотаций при переходе из модели в лист и обратно Nik6 AutoCAD 12 03.11.2023 19:59
Наезжание текста и выноски на объекты в Размерах Isuma AutoCAD 4 16.04.2014 16:59
Самопроизвольное изменение масштаба аннотаций видового экрана saa AutoCAD 6 27.09.2012 14:00
Изменение width factor текста ie.spb Программирование 22 02.09.2010 17:08
Автоматический подбор высоты текста Ax3 Программирование 41 30.07.2007 14:06