Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Май 2019, 13:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [Решено] Кривые Безье в Draw  (Прочитано 3060 раз)
0 Пользователей и 1 Гость смотрят эту тему.
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Стартовое сообщение: 30 Май 2016, 23:34 »

Вот код:
Sub DrawClosedBezierShape
Dim oDoc
Dim oPage
 'Страница для рисования
Dim oShape 'Фигура для вставки
Dim oCoords 'Координаты многоугольника для вставки
oCoords = createUnoStruct("com.sun.star.drawing.PolyPolygonBezierCoords")
REM Заливка в фактических координатах. Первая и последняя точки
REM - обычные точки, а средние точки - контрольные точки Безье.
'MsgBox oCoords.dbg_methods просмотп методов
MsgBox oCoords.dbg_properties

 oCoords.Coordinates = Array(_
    Array(_
      CreatePoint( 1000, 1000 ),_
      CreatePoint( 3000, 4000 ),_
      CreatePoint( 3000, 4000 ),_
      CreatePoint( 5000, 1000 )_
    )_
  )
  oCoords.Flags = Array(_
    Array(_
      com.sun.star.drawing.PolygonFlags.NORMAL,_
      com.sun.star.drawing.PolygonFlags.CONTROL,_
      com.sun.star.drawing.PolygonFlags.CONTROL,_
      com.sun.star.drawing.PolygonFlags.NORMAL _
    )_
  )
oDoc = ThisComponent
oPage = createDrawPage(ThisComponent, "Test Draw", True)
oShape = oDoc.createInstance("com.sun.star.drawing.ClosedBezierShape")
oPage.add(oShape)
oShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT
oShape.PolyPolygonBezier = oCoords
End Sub
у Питоньяка он работает, на ура. У него это группа макросов Draw, стр 566.
Выделил в свой модуль что бы поработать.
вот в этой строке: oCoords.Coordinates = Array(_
ругается на "Подпрограмма или функция не определена.", ведь тут объект который объявлен и правильно заполнен, в чём проблема подскажите
« Последнее редактирование: 5 Июнь 2016, 22:15 от spyAndrey » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 710


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 31 Май 2016, 07:22 »

Выделил в свой модуль что бы поработать.
вот в этой строке: oCoords.Coordinates = Array(_
ругается на "Подпрограмма или функция не определена.", ведь тут объект который объявлен и правильно заполнен, в чём проблема подскажите
В макросе есть ссылка на две функции: CreatePoint() и createDrawPage(), а вы их не скопировали в модуль, ругается на их отсутствие.
Вот они:
Код:
Function CreatePoint(ByVal x As Long,ByVal y As Long) As com.sun.star.awt.Point
  Dim oPoint
  oPoint = createUnoStruct("com.sun.star.awt.Point")
  oPoint.X = x : oPoint.Y = y
  CreatePoint = oPoint
End Function

Function createDrawPage(oDoc, sName$, bForceNew As boolean) As Variant
  Dim oPages 'Все рисованные страницы
  Dim oPage  'Одна рисованная страница
  Dim i%     'Основная индексная переменная
  oPages = oDoc.getDrawPages()
If oPages.hasByName(sName) Then
REM Если нам требуется новая страница, удалим страницу
If bForceNew Then
      oPages.remove(oPages.getByName(sName))
    Else
REM Не требуется новая страница, поэтому возвращаем найденную страницу REM и затем выходим из функции.
createDrawPage = oPages.getByName(sName)
Exit Function
End If
End If
  REM Не нашли страницу или нашли и удалили ее.
  REM Создаем новую страницу, задаем имя и возвращаем страницу.
  oPages.insertNewByIndex(oPages.getCount())
  oPage = oPages.getByIndex(oPages.getCount()-1)
  oPage.setName(sName)
  createDrawPage = oPage
End Function
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #2: 31 Май 2016, 15:33 »

Да, эти функции, я тоже скопировал, но программа ругается именно на эту строку:
 oCoords.Coordinates = Array(_
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 31 Май 2016, 15:55 »

После символа подчеркивания не должно быть пробела (а перед ним - лучше поставить)
Или удалить все символы подчеркивания в этом операторе - записать его в одну длинную строку без переносов
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 710


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #4: 31 Май 2016, 16:19 »

Да, эти функции, я тоже скопировал, но программа ругается именно на эту строку:
 oCoords.Coordinates = Array(_
Скопировал все три макроса из этой темы, запустил в Apache OpenOfficeLibreOffice запускал утром), работает без проблем.
После символа подчеркивания не должно быть пробела (а перед ним - лучше поставить)
Или удалить все символы подчеркивания в этом операторе - записать его в одну длинную строку без переносов
При копировании из PDF нужно всё проверять, иногда такая фигня копируется Шокирован...   , но насчёт пробелов, в Apache они не влияют (добавлял и до и после подчёркивания, хотя иногда замечал, что это влияет, не помню в каких офисах)

Если можно, выложите образец документа.
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #5: 31 Май 2016, 17:02 »

да, я вроде из одного документа в другой копировал, прямо из Питоньяка.
Попробую убрать лишние символы
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #6: 31 Май 2016, 18:21 »

Думаю собака порывается вот в чём, предполагаю, что Питоньяк работает над документом с Windows, А я копирую Переношу и т.д. в Linux. Вот поэтому с кодировками и концом строки что то...
Решение пока ищу
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #7: 31 Май 2016, 19:06 »

Попробовал копировать вставлять через буфер обмена в Windows версии офиса не а, не помогло.
И попытки в одну строку писать и "увидеть" неправильные переносы строки ничего не дали (
А помогло вот что, в редакторе макросов, панели инструментов "Макрос" есть две хорошие кнопки: "Сохранить BASIC" и "Вставить код на BASIC".
Вот этими кнопками можно вполне корректно перенести весь текст модуля, затем удалить не нужный код, ну а дальше обрабатывать напильником... )
Можно ставить статус темы Решено!
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 710


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 31 Май 2016, 19:16 »

Думаю собака порывается вот в чём, предполагаю, что Питоньяк работает над документом с Windows, А я копирую Переношу и т.д. в Linux. Вот поэтому с кодировками и концом строки что то...
Питоньяк во многих местах писал, что работает и проверяет макросы и в Windows и в Linux. На Маке тоже проблем нет. Скорей всего это у вас "инцидент местного значения".
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #9: 31 Май 2016, 21:53 »

Что бы быть до конца честным, все таки проблема была не в кодировках и концах строк, а в пропущенной функции, вот она:
Function CreatePoint(ByVal x As Long,ByVal y As Long) As com.sun.star.awt.Point
  Dim oPoint
  oPoint = createUnoStruct( "com.sun.star.awt.Point" )
  oPoint.X = x : oPoint.Y = y
  CreatePoint = oPoint
End Function
Она используется при заполнении массива, вот на её отсутствие программа и ругалась... Подмигивающий
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #10: 31 Май 2016, 22:08 »

Некоторое послесловие, то чего я добивался это вот этот код:
 oCoords.Coordinates = Array(_
    Array(_
      CreatePoint( 1000, 1000 ),_
      CreatePoint( 2000, 1000 ),_
      CreatePoint( 2000, 1000 ),_
       CreatePoint( 2000, 2000 ),_
      CreatePoint( 2000, 5000 ),_
      CreatePoint( 2000, 6000 ),_
       CreatePoint( 2000, 6000 ),_
      CreatePoint( 1000, 6000 )_
    )_
  )
  oCoords.Flags = Array(_
    Array(_
      com.sun.star.drawing.PolygonFlags.NORMAL,_
      com.sun.star.drawing.PolygonFlags.CONTROL,_
      com.sun.star.drawing.PolygonFlags.CONTROL,_
      com.sun.star.drawing.PolygonFlags.NORMAL,_
      com.sun.star.drawing.PolygonFlags.NORMAL,_
      com.sun.star.drawing.PolygonFlags.CONTROL,_
      com.sun.star.drawing.PolygonFlags.CONTROL,_
      com.sun.star.drawing.PolygonFlags.NORMAL _
    )_
  )
Собственно от кода Питоньяка он не слишком отличается, вместо двух вершим в полигоне у меня их четыре.
Но, полистав его документы и немного интернет, приступил к научному тыку Улыбка вот вывод:
(Не пинать если что опять пропустил в описаниях;) или математик не сильный)
у меня в полигоне пара прямых отрезков и пара с кривыми Безье, то что выяснил, это что между двух точек, где идёт кривая, должны быть ДВЕ точки которые нужны для вычисления кривой Безье.
соответственно крайние NORMAL, а внутренние две CONTROL.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 710


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #11: 31 Май 2016, 22:42 »

Что бы быть до конца честным, все таки проблема была не в кодировках и концах строк, а в пропущенной функции, вот она:
Function CreatePoint(ByVal x As Long,ByVal y As Long) As com.sun.star.awt.Point
  Dim oPoint
  oPoint = createUnoStruct( "com.sun.star.awt.Point" )
  oPoint.X = x : oPoint.Y = y
  CreatePoint = oPoint
End Function
Она используется при заполнении массива, вот на её отсутствие программа и ругалась... Подмигивающий

А кто-то весь день искал способ переноса макросов с помощью двух кнопок и напильника Смеющийся

В макросе есть ссылка на две функции: CreatePoint() и createDrawPage(), а вы их не скопировали в модуль, ругается на их отсутствие.
Да, эти функции, я тоже скопировал, но программа ругается именно на эту строку:
 oCoords.Coordinates = Array(_
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #12: 1 Июнь 2016, 21:40 »

Да, как говориться дело было не в бобине... Смеющийся
Но благодаря кнопочкам и методу исключения, всё таки нашёл причину "глюка", но и кнопки полезны т.к. при переносах текстов особенно между ОС и кодировками исключается глюки связанные с кодировками, а они тоже бывают жестокими Плачущий
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!