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

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

Редактирование коэффициента сжатия

Ответ
Поиск в этой теме
Непрочитано 22.07.2008, 11:07 #1
Редактирование коэффициента сжатия
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Задача такая:
Есть куча чертежей (как обычно ) в которых куча однострочных текстов содержащих от 6 до 12 символов. Выравнивание у них всегда либо "влево" либо "вправо". Коэффициент сжатия всегда при изменениях варьируется. Но стандартно он не превышает 0.8 В зависимости от того как расположена близ лежащая линия изменяется коэффициент сжатия (вручную - что утомительно методом подбора). Изменяется он ступенчато до двух знаков после запятой. (0.8; 0.79; 0.78 ... 0.45)
Необходимо написать програмку которая будет это делать автоматически.
Т.е. например у меня есть горизонтальная линия справа от нее написан текст который либо слишком сжат либо переваливает через линию. Выбираем линию и потом тексты. При выборе очередного текста он автоматом изменяет коэффициент сжатия на необходимый.

Вложения
Тип файла: dwg
DWG 2004
коэффициент сжатия.dwg (39.2 Кб, 1886 просмотров)

__________________
Поезд который устал от ржавого здравомыслия рельсов...
Просмотров: 7106
 
Автор темы   Непрочитано 22.07.2008, 11:15
#2
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Дополнение:
хотелосьбы еще добавить к этой программе возможность править в прямоугольнике текст который также либо сжат либо выходит за пределы. Выравнивание может быть либо по левому краю либо по правому либо по середине.

Совсем забыл, расстояние от текста до линии должно быть 1 ... 1.5мм (хорошо бы это можно былобы править)
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 22.07.2008, 11:51
#3
Aragorn

Продажа навыков и умений
 
Регистрация: 20.11.2004
Сибирь
Сообщений: 2,498


Aragorn вне форума  
 
Автор темы   Непрочитано 22.07.2008, 12:06
#4
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Aragorn, ?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 22.07.2008, 22:24
#5
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Если хочешь написать программу самостоятельно (прочитал в соседнем посте, что желание такое у тебя есть), то подсказываю примерный алгоритм действий:
1) Выбираешь какую-либо из колонок текстов:
Код:
[Выделить все]
(vl-remove-if 'listp (mapcar (function cadr) (ssnamex (ssget '((0 . "TEXT")))))); возвращает список имен объектов-тект (ename)
2) Таким же образом выбираешь полилинию, которая должна ограничивать текст, правда в твоем случае лучше указать ее при помощи ввода двух точек - не придется вычислять координаты нужного отрезка.
Затем для каждого из текстов:
3) Вычисляешь нужные точечные пары: 41 - сжатие, 11 - координаты точки выравнивания (если текст выровнен вправо).
Код:
[Выделить все]
(cdr (assoc 41(entget имя_из_полученного_ранее_списка)))
4) При помощи функции "textbox" вычисляешь координаты рамки которая описывается вокруг текста. Далее из этих координат можно вычислить длину текста.
5) Вычисляешь расстояние мечду точкой выравнивания и линией - это длина текста, которая должна быть.
6) Вычисляешь коэффициент сжатия, который должен быть для достижения нужной длины текста и модифицирешь объект.
7) Переходишь к следующему объекту,если нет объектов,то выход.
Donhuan вне форума  
 
Автор темы   Непрочитано 23.07.2008, 09:26
#6
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Donhuan, спасибо. Попробую сам написать.
Сразу вопрос:
Допустим секущей рамкой я выбираю кучу ненужных объектов как мне отделить только текст? Чтобы выбрался только текст. Наверно придется доработать потому как выбирать текст без "тире" не нужно. Короче заморочек много ...
Работать программа должна так: (ну как я хотел бы)
1. Выбирать нужно допустим лист целый на котором присутствует любые объекты. Программа должна выбирать именно то что нужно и формировать список нужных текстов. При этом выравнивание как я написал в первом посте может быть только двух типов.
2. При нажатии Enter должен изменятся выбранный текст в нужном соответствии.

Для начала нужно разобраться с первым пунктом. Правильно ли я мыслю, что должен формироваться именно список нужных объектов? или этот процесс выглядит как-то подругому? Какие функции мне нужны для выполнения первого пункта?
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 23.07.2008 в 09:33.
Shoorup вне форума  
 
Непрочитано 23.07.2008, 09:45
#7
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(ssget '((0 . "TEXT") (1 . "*-*"))) ; выбор текстов, где есть "-"
(ssget '((0 . "TEXT") (1 . "~*-*"))); выбор текстов без "-"
P.S. Смотри wcmatch
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.07.2008, 15:43
#8
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Кулик Алексей aka kpblc, не могу понять со списками
(ssget '((0 . "TEXT"))) - почему так правильно
(ssget '(0 . "TEXT")) - а так нет?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.07.2008, 16:04
#9
Кулик Алексей aka kpblc
Moderator

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


Потому что первый можно перевести как
Код:
[Выделить все]
(ssget (list (cons 0 "TEXT")))
(ssget) принимает только списки из точечных пар, а у тебя во втором варианте просто точечная пара (это недостаточно).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.07.2008, 16:55
#10
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Всеравно ступор со списками
(cons 0 "TEXT") - функция cons создаст точечную пару (0 . "TEXT") .
(list (cons 0 "TEXT")) - а такое вызовет ошибку
зато вот такое:
(list '(cons 0 "TEXT")) - почемуто правильно
Вопрос:
почему тогда правильно это:
(ssget (list (cons 0 "TEXT")))
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.07.2008, 19:26
#11
Кулик Алексей aka kpblc
Moderator

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


Shoorup, сравни:
Код:
[Выделить все]
_$ (cons 0 "TEXT")
(0 . "TEXT")
_$ (list (cons 0 "TEXT"))
((0 . "TEXT"))
_$ (list '(cons 0 "TEXT"))
((CONS 0 "TEXT"))
_$
Разница есть?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.07.2008, 09:25
#12
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Есть...
в первом случае создается точечная пара, во втором список с точечной парой, в третьем список из списка. Так?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Автор темы   Непрочитано 24.07.2008, 10:10
#13
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


По задаче:
Как предложил Donhuan, во втором пункте #5 мне на первом этапе лучше попробовать указать две точки по которым нужно ровнять. Или что более универсально но мне кажется сложней, выбрать один или несколько прямоугольников в виде полилиний на чертеже которые и есть сама клемма и отступить от нее 1 мм. Получается коэффициент сжатия нужно расчитать так: Берем расстояние от полилинииклеммы отступаем 1 мм вправо и влево от нее. Расчитываем расстояние от точки вставки текста до полученной линии. Устанавливаем коэффициент сжатия чтобы текст не заходил за эту линию и максимально к ней приближался но не превышал КЖ 0.8
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 24.07.2008, 10:20
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Shoorup,
Теперь прорабатываешь главу 2 "Основы язка LISP" .
И должны отпасть вопросы про:
- QUOTE,
- атомы, списки,
- голову списка (head) и его хвост (tail)
- логические значения ИСТИНА и ЛОЖЬ
- пустой список
+ выполнить все упражнения в vlide
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.07.2008, 16:34
#15
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


какая функция внесет изменения в точечную пару?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 28.07.2008, 16:55
#16
Кулик Алексей aka kpblc
Moderator

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


это как? (cons <Значение> <Значение>), что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.07.2008, 17:06
#17
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Ну допустим я выделил нужный мне текст и хочу внести в его свойства определенные изменения. Получается мне нужно "раскрыть его" и внести в соответствующие точечные пары изменения. Допустим был текст с КС 0.8 - после применения стал 07
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 28.07.2008, 17:08
#18
Кулик Алексей aka kpblc
Moderator

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


Модификация ename-представлений примитивов
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.07.2008, 17:24
#19
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Мне там ничего не понятно. Слишком сложно для моего уровня. Может подскажешь как для чайника что делать?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 28.07.2008, 20:52
#20
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Мне там ничего не понятно. Слишком сложно для моего уровня. Может подскажешь как для чайника что делать?
Просто добавь в свою программу эти функции и используй их, как используешь функции Лиспа.
А по поводу изменений точечных пар почитай про функии "assoc" и "subst". Просто в указанной теме все уже сделали, упростив тебе задачу.
Donhuan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактирование коэффициента сжатия



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование однострочного текста на чертеже Nick Fur AutoCAD 12 10.03.2012 08:10
Редактирование размеров Piton AutoCAD 12 10.02.2010 23:06
при выборе команды редактирование текста вырубается Acad Nikolays AutoCAD 4 24.10.2007 09:14
Редактирование атрибутов/внешней ссылки. Alan AutoCAD 2 09.03.2006 17:09