Страница 1 из 1
Надо рисовать в Excell и знать координаты того что рисую.
Добавлено: 22 сен 2004, 08:26
patq
С уважением ко всем!
Подскажите! Как на листах Excell не только программно сформировать и прорисовывать объекты (кривые, плоскости, фигуры) но и программно узнать координаты любых точек этих объектов. Подскажите, может для этого есть стандартные библиотеки, либо надстройки, либо ….
Благодарен за любую информацию!
Добавлено: 22 сен 2004, 11:08
Naeel Maqsudov
Кажется это Вы задавали не так давно вопрос про сплайны, и координаты любых точек лежащих внутри сегментов кривой?
Так вот ситуация та же. Есть объект Shape, точнее есть интерфейс к COM-объекту Shape. Благодаря полиморфизму этот Shape может быть любой автофигурой MSOffice или иным внедренным в документ OLE-объектом. С другой стороны этот интерфейс НЕ ПОЗВОЛЯЕТ доступиться к данным о детялях самого объекта. А с третьей стороны сам этот объект реализует редакторы, которые позволяют работать с этим объектом интерактивно (перемещаемые мышью желтые маркеры у автофигур, свойства рисунка, или ассоциированное с OLE-объектом приложение).
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
PS
Может я и поспешил с ответом... Сегодня-завтра еще раз все проверю на всякий случай, но думаю, что я абсолютно прав.
Надо рисовать
Добавлено: 23 сен 2004, 09:29
patq
Naeel Maqsudov писал(а):Кажется это Вы задавали не так давно вопрос про сплайны, и координаты любых точек лежащих внутри сегментов кривой?
. . .
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
Доброго времени суток, ВСЕМ!
Да, это был я. И на тот вопрос я получил обстоятельный ответ, и с ним согласен.
Но проблема осталась и возникла мысль: можа кто-то где-то уже создал эти библиотеки, и их осталось взять и подключить к Excel. (Мечта любого нормального человека).
Ведь подобные задачи решены во многих конструкторских пакетах, должно же кого-то жизнь заставить доработать его под Excel.
С уважением, patq!
Добавлено: 29 сен 2004, 08:32
Naeel Maqsudov
можа кто-то где-то уже создал эти библиотеки
Будем надеяться. Может он и откликнется...
А Вы не смотрели, случайно, в AutoCAD-е нет ли такой возможности? Там точно такой же VBA используется.
Продолжение разговора о шейпах
Добавлено: 27 окт 2004, 13:36
AlexGur
Naeel!
Цитирую Ваши слова:
С другой стороны этот интерфейс НЕ ПОЗВОЛЯЕТ доступиться к данным о детялях самого объекта. А с третьей стороны сам этот объект реализует редакторы, которые позволяют работать с этим объектом интерактивно (перемещаемые мышью желтые маркеры у автофигур, свойства рисунка, или ассоциированное с OLE-объектом приложение).
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
Из хелпа все же вытекает, что все-таки позволяет, но как-то криво и с оговорками. Вот пример. Я в Word визуально рисую Polyline (т.е. freeform), выделяю ее, после чего запускаю свой макрос, чтобы узнать координаты узлов. Код почти буквально скопирован из хелпа по Nodes, только вместо конкретного шейпа я обращаюсь к Selection:
Код: Выделить всё
Sub ListNodesCoords()
Buf = ""
For i = 1 To Selection.ShapeRange.Nodes.Count
With Selection.ShapeRange.Nodes
ptsArr = .Item(i).Points
x = ptsArr(1, 1)
y = ptsArr(1, 2)
Buf = Buf & x & "," & y & Chr(13)
End With
Next i
MsgBox (Buf)
End Sub
При запуске VBA выдает ошибку:
Run-time error '13': Type mismatch и показывает ее в строке
ptsArr = .Item(i).Points
Аналогичная манипуляция с Vertices вместо Nodes приводит к аналогичной ошибке.
Не понимаю, в чем тут дело. Дык есть ли доступ к координатам этой полилинии или нет?
С уважением, AlexGur.
Добавлено: 28 окт 2004, 04:13
AlexGur
Ну, короче,
мой вопрос снят с повестки дня. Прошу прощения за глупость и наезд на Microsoft. Вот мой код (Freeform 39 уже должна быть нарисована, это у меня polyline):
Код: Выделить всё
Sub MyTest()
buf = ""
Set Nds = ActiveDocument.Shapes("Freeform 39").Nodes
With Nds
For i = 1 To Nds.Count
pointsArray = .Item(i).Points
currXvalue = pointsArray(1, 1)
currYValue = pointsArray(1, 2)
buf = buf & currXvalue & "," & currYValue & vbLf
Next i
MsgBox (buf)
End With
End Sub
Добавлено: 02 ноя 2004, 01:52
Naeel Maqsudov
Naeel! Цитирую Ваши слова:
Цитата: [....skip....]
Из хелпа все же вытекает, что все-таки позволяет, но как-то криво и с оговорками.
Узлы в полигоне - это базовая инфомация об автофигуре (как ширина и высота у прямоугольника). Исходный вопрос был не об узлах, а о любых точках сплайна.
Добавлено: 02 ноя 2004, 02:49
AlexGur
Да, Наиль, спасибо, я это уже понял - потому и извинился перед участниками за глупый вопрос. Сейчас, кстати, именно этим (вычислением любых промежуточных точек) я и занимаюсь, но только для полилиний, т.е. ломаных.
Теоретически это можно научиться делать и для кривых Безье, но здесь надо покопаться в сплайновых алгоритмах (не так это и сложно; просто в мои задачи это не входит).