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

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

Помогите продумать поворот части выноски!

Ответ
Поиск в этой теме
Непрочитано 26.06.2007, 19:58
Помогите продумать поворот части выноски!
Tonic
 
Воронеж
Регистрация: 26.06.2007
Сообщений: 151

Добрый вечер!
Такое задание: создать программу для отрисовки выносной линии с цветом 132 и соем 6. Это я сделал. Теперь нужно с помощью кнопок на панели реализовать смещение (поворот) на +90, -90 и +180 градусов (как на рисунке), ещё создать кнопку, ответственную за изменение масштаба выноски (по умолчанию должно предлагаться <0.75>). Прикрепляю свои достижения на сегодняшний день и файл, где показано, что надо сделать. Буду благодарен за помощь и подсказки - я только недавно влился в ваши ряды =)
P.S. Язык нужен именно AutoLISP, не VisualLISP, т.к. программирование не для Автокада.

Цитата:
(defun c:vnsk (/ p1 p2 p3 p4 p5 p9 x1 x2 h th K tplus dtex TexP TexM ce bm osm ort col lay)

;; Сохранение значений и установка системных переменных и исходных данных
(setq ce (getvar "CMDECHO")
bm (getvar "BLIPMODE")
osm (getvar "OSMODE")
ort (getvar "ORTHOMODE")
col (getvar "CECOLOR")
lay (getvar "CLAYER")
)
(setvar "ORTHOMODE" 0)
(setvar "blipmode" 0)
(setvar "cmdecho" 0)
(setvar "OSMODE" 16383)
(setvar "CECOLOR" "132");Текущий цвет - 132
(setvar "CLAYER" "6");Текущий слой - 6
;; -----------------------------------------------------------------------

(setq p1 (getpoint "\nУкажите начальную точку выносной линии: "))
(setq p2 (getpoint p1 "\nУкажите точку полочки: "))
(command "_LINE" p1 p2 "");Построение линии выноски
(setvar "OSMODE" 0)


(setq x1 (nth 0 p1));Присвоение переменной x1 координаты точки p1
(setq x2 (nth 0 p2));Присвоение переменной x2 координаты точки p2


(setq h (getreal "\nВведите высоту шрифта <3.5>: "))

(if (<= h 0)
(setq h 3.5)
) ;end if

(setq th (* h 1.6))
(setq tplus (* h 0.285))


(setq p4 (list (nth 0 p2) (nth 1 p2) (nth 2 p2)))

(princ "Введите текст первой строки:")
(setq TexP (getstring 4 5));Ввод текста верхней строки с клавиатуры
(if (> x2 x1);Сравнение координат начала и конца линии выноски для определения её направления
(progn;Для случая, когда полочка идёт вправо от линии выноски
(setq p9 (list (+ (nth 0 p4) tplus) (+ (nth 1 p4) tplus) (nth 2 p4)))
(command "_TEXT" p9 h 0 TexP "");Размещение верхнего текста
(setq dtex (distance (nth 0 (textbox (entget (entlast)))) (nth 1 (textbox (entget (entlast))))))
(setq p5 (list (+ (nth 0 p4) dtex tplus) (nth 1 p4) (nth 2 p4)))
(command "_LINE" p4 p5 "");Отрисовка полочки

);end progn
(progn;Для случая, когда полочка идёт влево от линии выноски
(setq p9 (list (- (nth 0 p4) tplus) (+ (nth 1 p4) tplus) (nth 2 p4)))
(command "_TEXT" "в" "Р" p9 h 0 TexP "");Размещение верхнего текста
(setq dtex (distance (nth 0 (textbox (entget (entlast)))) (nth 1 (textbox (entget (entlast))))))
(setq p5 (list (- (nth 0 p4) dtex tplus) (nth 1 p4) (nth 2 p4)))
(command "_LINE" p4 p5 "");Отрисовка полочки
);end progn
);end if
(setq p4 (list (nth 0 p4) (- (nth 1 p4) th) (nth 2 p4)));Точка начала нижнего текста


(princ "Введите текст второй строки:")
(setq TexP (getstring 4 5));Ввод текста нижней строки с клавиатуры
(if (> x2 x1);Сравнение координат начала и конца линии выноски для определения её направления
(progn;Для случая, когда полочка идёт вправо от линии выноски
(setq p9 (list (+ (nth 0 p4) tplus) (+ (nth 1 p4) tplus) (nth 2 p4)))
(command "_TEXT" p9 h 0 TexP "");Размещение нижнего текста

);end progn
(progn;Для случая, когда полочка идёт влево от линии выноски
(setq p9 (list (- (nth 0 p4) tplus) (+ (nth 1 p4) tplus) (nth 2 p4)))
(command "_TEXT" "в" "Р" p9 h 0 TexP "");Размещение нижнего текста
);end progn
);end if

;; восстановление значений системных переменных
(setvar "BLIPMODE" bm)
(setvar "CMDECHO" ce)
(setvar "OSMODE" osm)
(setvar "ORTHOMODE" ort)
(setvar "CECOLOR" col)
(setvar "CLAYER" lay)
(princ)

(command "_REDRAW")

(princ);Выход
);end defun c
[ATTACH]1182873491.jpg[/ATTACH]
Просмотров: 11737
 
Непрочитано 02.07.2007, 20:21
#41
Кулик Алексей aka kpblc
Moderator

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


Пока дите дало посидеть за железкой, попробую ответить
Суховато... Программирование само по себе суше воблы Вот и разбавляют программеры его своим юмором
Суть прикола через DXF-программирование в том, что есть несколько групп, которые задавать бесполезно. Это -1, 5, и, как правило, 330 и 340 группы. Все остальное задавать, как правило, обязательно.
Для создания текстов и легких полилиний, насколько я помню, например, обязательно задавать 100-е группы; для отрезков достаточно создать только 0, 10 и 11 группы
Для создания отрезка с текущими настройками слоя, цвета, веса и типа линии достаточно вызвать
Код:
[Выделить все]
(entmakex (list (cons 0 "LINE") (cons 10 <StartPoint>) (cons 11 <EndPoint>)
Для более сложных примитивов зачастую все решается только эскпериментом
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите продумать поворот части выноски!