Подскажите программно узнать координаты кривой

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
patq
Сообщения: 32
Зарегистрирован: 22 апр 2004, 07:50
Откуда: г. Ижевск

Как программно узнать или вставить точку в сформированную кривую, если задавать одну координату.
Кривая создаю следующими командами:
With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 40, 45)
AddNodes msoSegmentCurve, msoEditingAuto, 140, 145
AddNodes msoSegmentCurve, msoEditingAuto, 160, 80
‘ закроем линию и присвоим ей имя
.ConvertToShape.Name = "Proba"
End With
Программно знаю как вставить точку по двум координатам
ActiveSheet.Shapes("Proba").Nodes.Insert 1, msoSegmentCurve, msoEditingAuto, 160, 200

П :?: одскажите как задать координату по оси X/Y и узнать координату по оси Y/X, лежащую на кривой.
На худой конец как вставить точку в кривую, задавая одну координату
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Можно только двигать/добавлять/удалять узлы у данного ShapeObject через его коллекцию Nodes.

При добавлении узла всегда указываются обе его координаты. Эта операция предназначена для изменения формы кривой. Если же Вы хотите вычислить координаты точек не в узлах, а посередине сегмента, то увы, это недоступная информация. Не у объектов Shape и BuildFreeForm, ни даже у функций функций WinAPI (Line and Curve Functions) нет такой возможности, так как информация о точках из которых состоит сегмент кривой используется только в момент рисования сегмента кривой в контексте устройства (Device Context)
patq
Сообщения: 32
Зарегистрирован: 22 апр 2004, 07:50
Откуда: г. Ижевск

Обидно, ох как обидно
Идущий, да осилит дорогу!
patq
Сообщения: 32
Зарегистрирован: 22 апр 2004, 07:50
Откуда: г. Ижевск

Naeel Maqsudov писал(а):Если же Вы хотите вычислить координаты точек не в узлах, а посередине сегмента, то увы, это недоступная информация. .... так как информация о точках из которых состоит сегмент кривой используется только в момент рисования сегмента кривой в контексте устройства (Device Context)
:?: Ой ли ведь Excell, в режиме добавки точек в кривую, меняет вид маркера при подводе его к этой кривой.
Откуда ж он это узнает, откуда эти координаты берет.
И почему нам не дает? Что, рылом не вышли?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Курсор-то меняется, но работа редакторов графических объектов MSOffice к VBA никакого отношения не имеет. У самого же графического объекта нет ни свойст ни методов, чтобы сделать то что Вы хотите. Так что увы... И не в рыле дело... ;)
patq
Сообщения: 32
Зарегистрирован: 22 апр 2004, 07:50
Откуда: г. Ижевск

Naeel Maqsudov писал(а):Курсор-то меняется, но работа редакторов графических объектов MSOffice к VBA никакого отношения не имеет. У самого же графического объекта нет ни свойст ни методов, чтобы сделать то что Вы хотите. )
Да, в методах и свойствах графических объектов, я также не нашел выхода на координаты. Это и послужило причиной обратиться к спецам.
Но координаты линий MSOffice при каждом обращении к линии вычисляет/знает. Зачем же писать программу для их вычисления.
patq писал(а): Фраза из моего письма: "И почему нам не дает? Что, рылом не вышли?" )
- относится к разработчикам Microsoft Office. Причина таковога: когда то давным-давно я решал подобную проблему. И в документации было описано решение, но не работало оно у меня. Я, описав проблему и предлагаемое документацией решение, обратился к разработчикам на их сайт. Ответили быстро, чему я обрадовался. Но прочитаное возмутило, там было вежлива написано: "Читай документацию".
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Печально...

Однако, разработчики часто любят держать свои решения в секрете.
Но координаты линий MSOffice при каждом обращении к линии вычисляет/знает. Зачем же писать программу для их вычисления.
Хотелось бы не писать, но увы, воспользоваться результатами написанного нельзя.
Т.е. есть COM-объект, который рисует гладкие кривые через заданные вершины (входними данными для него являются координаты вершин, выходными - линия в контексте устройства); есть другой объект который рисует линии. Входными данными для его функционирования являются клики и перемешения курсора мыши, а выходными - набор вершин.
Ваша задача совсем другая. Ни один из этих объектов не может по входным данным - набору вершин - выдавать координаты любой точки любого сегмента.

Выход: писать самому или искать что-то готовое.
Дионис
Сообщения: 153
Зарегистрирован: 11 июл 2005, 13:42
Откуда: Крым, Алушта
Контактная информация:

а мат.анализу эти графики поддаются? может, для их есть некая функция, зависящая от координаты/фазы (типа синус/косинус). тогда проще
Ответить