Страница 1 из 1

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

Добавлено: 21 май 2004, 08:42
patq
Как программно узнать или вставить точку в сформированную кривую, если задавать одну координату.
Кривая создаю следующими командами:
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, лежащую на кривой.
На худой конец как вставить точку в кривую, задавая одну координату

Добавлено: 22 май 2004, 22:40
Naeel Maqsudov
Можно только двигать/добавлять/удалять узлы у данного ShapeObject через его коллекцию Nodes.

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

Добавлено: 25 май 2004, 09:00
patq
Обидно, ох как обидно

Добавлено: 26 май 2004, 08:54
patq
Naeel Maqsudov писал(а):Если же Вы хотите вычислить координаты точек не в узлах, а посередине сегмента, то увы, это недоступная информация. .... так как информация о точках из которых состоит сегмент кривой используется только в момент рисования сегмента кривой в контексте устройства (Device Context)
:?: Ой ли ведь Excell, в режиме добавки точек в кривую, меняет вид маркера при подводе его к этой кривой.
Откуда ж он это узнает, откуда эти координаты берет.
И почему нам не дает? Что, рылом не вышли?

Добавлено: 26 май 2004, 22:29
Naeel Maqsudov
Курсор-то меняется, но работа редакторов графических объектов MSOffice к VBA никакого отношения не имеет. У самого же графического объекта нет ни свойст ни методов, чтобы сделать то что Вы хотите. Так что увы... И не в рыле дело... ;)

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

Добавлено: 28 май 2004, 00:19
Naeel Maqsudov
Печально...

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

Выход: писать самому или искать что-то готовое.

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