Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2009, 02:51   #1
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Рисование автофигур в документах Word

Я этим увлёкся как только мне подарили комп. Прошу!.. Смотрите!

В приложенном файле мною (не от руки — а от VBA) нарисованы фигуры цвета хаки, салатного и маджента.

Программа использует формулу эпициклоиды (и циклоиды со сдвигом).

Добавлено через 21 ч 30 мин

Для семерых смелых (уже посмотревших), и особенно Алекса, прилагаю файл TrophyRave.doc — конкретно с прицелом на испытания! Программа теперь называется TwelveNodes и запускается по Alt-D. (Недочёты, указанные ниже, устранил.)
Вложения
Тип файла: doc Trophy.doc (38.0 Кб, 58 просмотров)
Тип файла: doc TrophyRave.doc (31.5 Кб, 53 просмотров)

Последний раз редактировалось Sasha_Smirnov; 04.06.2009 в 00:29.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 03.06.2009, 20:01   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Странно, но фигуры получаются неимоверных размеров. И комп виснет, потому как ему трудно это переварить.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 04.06.2009, 00:08   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Word 97 не виснет, но — спасибо за риск!

Например, на моём древнем процессоре (166 МГц) даже при нескольких десятках узлов на дугу циклоиды (а самих дуг сотни!) рисунок возникает секунды через 3.

Если б были замечания по коду, я бы знал, как развить эту тему*.

А так остаётся только предъявить готовое, хотя весь кайф — меняя коэффициенты, получать замысловатые фигуры. «Замысловатость» особо заметна, если число узлов дробное (оно вводится в инпутбокс с клавиатуры).
___________________________________ ________
* в частности, «негабаритные» циклоиды я сжимал другим макросом — теперь усовершенствовал: сжимается само

Последний раз редактировалось Sasha_Smirnov; 04.06.2009 в 01:57.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 04.06.2009, 03:13   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Если вводить число до 3-х, то еще нормально.. На 4-х уже вылезает за границу листа на четверть.
При вводе больше 6 строится за несколько секунд, но подтормаживает.
Попробовал ввести 26.454 - ворд умер ) Пришлось добить..
А так забавно )

По TrophyRave:
Вот эта мне больше нравится ) Все быстро строится даже при больших значениях (>50), ничего не виснет..
Фигурки интересные получаются ) Больше 70 вводить нет смысла..

Вот такая на 44.34555 вылезла:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.06.2009, 00:58   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Яйцо налицо!

Sazary, премного благодарен вам за храбрость и оптимизм!

Фактически вы за меня сделали очень важные пояснения.

Вообще-то, вместе с Алексом, открыли машинный аспект этой программы — её время выполнения. Я и не ожидал, что на "мелкозернистых" мониторах (каковые, судя по всему, у вас) время столь ощутимо возрастает. Впрочем, оно и понятно: ведь построение ведётся по пикселам ЭКРАНА. (Это видно по тому, что на ЖК-мониторе то же яйцо немного растянуто по вертикали.)

P/s: у вас дробь через точку, но вообще, для пользователя-непрограммиста, надо бы настроить ввод дробей и через запятую... лень.

P/s-2: в Trophy.doc программа kУзловНаДугу строит не одну, а две похожие фигуры, и они, строго говоря, не циклоиды, а узловые линии, и хотя их узлы лежат на циклоиде, но порядок их соединения случаен — отсюда и всевозможные выверты.

Последний раз редактировалось Sasha_Smirnov; 05.06.2009 в 12:39. Причина: размер по вертикали зависит от соотношения высоты пиксела к его ширине... плохо?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.06.2009, 01:31   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Пара иллюстраций того, что получается в Trophy.doc: при вводе 11.


А вот эта на 8:


Цитата:
Сообщение от Sasha_Smirnov
но вообще, для пользователя-непрограммиста, надо бы настроить ввод дробей и через запятую... лень.
Да перебьются Пускай приучаются точку писать )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.06.2009, 01:39   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Коллекция случайностей

Так они (да и программисты) теперь* и нарисуют сами!

Вот похожую фигуру (число циклов 24.4...) раскрасил. А ещё интересно (правая кнопка мыши -> Формат автофигуры) вообще убрать цвет (а так он белый).

А ещё, по правой кнопке мыши, есть команда Начать изменение узлов. Их (узлы) можно таскать, а также удалять — прижав Ctrl и щёлкая по узлу мышью.

__________________________________
* типа «теперь Вы можете звонить, просто нажав на кнопку!»
Изображения
Тип файла: jpg Eggy.jpg (46.3 Кб, 134 просмотров)

Последний раз редактировалось Sasha_Smirnov; 05.06.2009 в 14:14. Причина: фичи.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.06.2009, 14:24   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Странно, но фигуры получаются неимоверных размеров. И комп виснет, потому как ему трудно это переварить.
Я думаю, трудность переваривания связана с тем, что в новых Виндовозах «плакатные» размеры документа Word не предусмотрены, ибо рулят графпакеты. А Word 97 «виснет» как раз на малых автофигурках — он не может построить слишком близко друг к другу стоящие пикселы.

Потому-то я и сделал синтез циклоид в удобоваримом («плакатном») масштабе, с последующим сжатием.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.06.2009, 19:23   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Рисование звёздчатых многоугольников

Дам ещё один примерчик «авторисования». Запуск — по Alt-Y.

Код:
Sub YojOfNeedles() 'Макрос записан 29.05.2005 User''рисует в документе «ёжиков»'

Const RoX = 200, RoY = 200, pi = 3.1415926535898
Const ShiftX = 300 'сдвиг начала координат от левого края листа, в пикселах'
Const ShiftY = 220 'сдвиг начала координат от верхнего края листа, в пикселах'
Static unite As Integer
Dim x() As Single, y() As Single                        'массивы абсцисс и ординат'
Dim k As Integer, Nn As Integer, N As Integer
Dim nS As String, dia As Integer

nS = Val(InputBox("How many (3 " & Chr(151) & " 1111)?", "POLIGON RANK", 7))
If IsNumeric(nS) = False Then Exit Sub          'ВЫХОД, если ввели не число'
N = CInt(nS)
If nS < 3 Then Exit Sub
If N > 111 Then dia = MsgBox("Это много! Надо?", vbCritical + vbYesNo)
If dia = vbNo Then Exit Sub

ReDim x(N) 'установка размерности - количество вычисляемых точек = N + 1'
ReDim y(N) '(от нулевой - начальной - до N-й, с координатами (x(N);y(N))'

Do
    x(Nn) = RoX * Cos((Nn - 1) * 2 * pi / N) + ShiftX
    y(Nn) = RoY * Sin((Nn - 1) * 2 * pi / N) + ShiftY
    If Nn = N Then Exit Do
    Nn = Nn + 1
Loop

With ActiveDocument.Shapes
    For k = 1 To N / (2 - N Mod 2)
    .AddLine(x(k), y(k), x((k + N \ 2) Mod N), y((k + N \ 2) Mod N)).Select
    Next k
            If Not unite = vbYes Then _
            unite = MsgBox("Группировать стороны?", vbQuestion + vbYesNo)
    If unite = vbYes Then .SelectAll: Selection.ShapeRange.Group.Select
End With
        
End Sub
В отличие от автофигур, эти фигуры неокрашиваемые (нет заливки).
Вложения
Тип файла: doc MakeUrchins.doc (52.0 Кб, 30 просмотров)

Последний раз редактировалось Sasha_Smirnov; 06.06.2009 в 12:42. Причина: опечатка (абцисс).
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.06.2009, 21:26   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А почему предупреждение выскакивает так рано (>33)? Или оно не для того, чтобы уберечь от зависания?


А эта на 1444:


Sasha_Smirnov, думаю, если прилагать скрины с результатом, то и добровольцев будет больше )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вытаскивание слов из автофигур Busine2009 Microsoft Office Word 4 28.05.2009 07:15
Рисование графиков в Microsoft Word AleksP Microsoft Office Word 1 19.09.2008 07:50
Как настроить печать автофигур в ms word??? 181988 Помощь студентам 1 08.09.2008 13:42
Кто может скинуть инфу о XmL-документах Parcenson Общие вопросы Delphi 4 27.08.2008 15:34