purebasic.info

PureBasic forum
Текущее время: Вт сен 26, 2017 3:55 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: Вс май 07, 2017 10:57 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 879
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 12 раз.
Пункты репутации: 7
Всем привет, не стал создавать новую тему.
Вопрос такой, как в Line(), или LineXY() задать толщину линии. По умолчанию толщина (ширина) равна одному пикселю, а мне надо 2-3. Никита как то показывал пример с графиками, там была другая ширина, но этот пример я сейчас найти не смог, вполне возможно, что там апи применялись.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 11:29 am 
Не в сети
док

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 141
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Пункты репутации: 5
Ну и рисуй 2-3 рядом. Или Box используй.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 12:09 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1533
Откуда: Алматы
Благодарил (а): 10 раз.
Поблагодарили: 35 раз.
Пункты репутации: 5
так бокс пойдет только что на горизонтальной или вертикальной линии. наискось как боксом рисовать? :)

рисовать на + и - 1 пиксель от стартовой точки точно такую-же линию.

а вобще графические редакторы тема очень интересная :) сам такой делал для редактора юнитов сеговской Dune но... как наткнулся на один косяк и чот все вдохновение доделывать улетучилось. эх...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 12:14 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 879
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 12 раз.
Пункты репутации: 7
КЭС писал(а):
Ну и рисуй 2-3 рядом.

3 линии рядом, с координатами мучаться, как то не гламурно.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
      Box(0, 0, 200, 200, RGB(255, 255, 255))
      LineXY(0, 0, 200, 200, RGB(255,0,0))
      LineXY(1, 0, 200, 199, RGB(255,0,0))
      LineXY(2, 0, 200, 198, RGB(255,0,0))
      StopDrawing()
      ImageGadget(0, 0, 0, 200, 200, ImageID(0))
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf


КЭС писал(а):
Или Box используй.

В смысле в цикле? Так чтоли?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
      Box(0, 0, 200, 200, RGB(255, 255, 255))
      For i=0 To 200
        Box(i,i,2,2,RGB(255,0,0))
      Next i
      StopDrawing()
      ImageGadget(0, 0, 0, 200, 200, ImageID(0))
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf


Тоже как то негуманно.

Я думал, может есть способ просто задать толщину линии и всё.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 12:16 pm 
Не в сети
док

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 141
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Пункты репутации: 5
Да, про наискось не подумал, в голове вертикальные столбы графика нарисовались :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 2:40 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6162
Благодарил (а): 16 раз.
Поблагодарили: 165 раз.
Пункты репутации: 48
Простая процедура поможет.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedure LineXYB(x1,y1,x2,y2,color,b) ; b = толщина линии в пикселях
  If b<=0:b=1:EndIf
  For i = 1 To b
    LineXY(x1, y1, x2,y2,color)
    y1+1
    y2+1
  Next  
EndProcedure
 
 
If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
      Box(0, 0, 200, 200, RGB(255, 255, 255))
      LineXYB(0, 0, 200, 200, RGB(255,0,0),5)
      LineXYB(10, 30, 100, 150, RGB(0,255,0),10)
      StopDrawing()
      ImageGadget(0, 0, 0, 200, 200, ImageID(0))
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf



Но сейчас же есть в составе Пурика Vector 2D library. Там всё можно рисовать красиво.

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 3:11 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 512
Благодарил (а): 2 раз.
Поблагодарили: 26 раз.
Пункты репутации: 9
kvitaliy писал(а):
Но сейчас же есть в составе Пурика Vector 2D library. Там всё можно рисовать красиво.

С какой версии у Пурика Vector 2D library?
и что если на GDI или Opengl рисовать?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 3:52 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1533
Откуда: Алматы
Благодарил (а): 10 раз.
Поблагодарили: 35 раз.
Пункты репутации: 5
на 5.31 нету. надо смотреть чо там напиратили с выше версиями... но там чот все мутно :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 3:53 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 879
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 12 раз.
Пункты репутации: 7
kvitaliy писал(а):
Но сейчас же есть в составе Пурика Vector 2D library. Там всё можно рисовать красиво.

У меня 5,31, вроде нет такой библиотеки, хотя если честно, то я не особо слежу за нововведениями, обычно хватает стандартных функций.
Сергейчик писал(а):
и что если на GDI или Opengl рисовать?

Не пробовал некогда, мне просто надо начертить незамысловатый график, вникать во что то новое, для этой задачи слишком неразумно, хотя я учту ваш совет.

Пока остановился на тройной линии, а там поглядим, когда руки дойдут.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 07, 2017 5:16 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
m0t0d0r писал(а):
3 линии рядом
В чем сложность?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Procedure LineXY_Size(x1, y1, x2, y2, Color, Size=1)
  Size-1
  For i=0 To Size
    LineXY(x1+i, y1, x2, y2-i, Color)
  Next i
EndProcedure
 
If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255))
    LineXY_Size(0, 0, 200, 200, RGB(255,0,0), 3)
    StopDrawing()
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
 
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf



Или можно рисовать функциями библиотеки VectorDrawing
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
If OpenWindow(0, 0, 0, 200, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, 200, 200)
 
  If StartVectorDrawing(CanvasVectorOutput(0))
   
    MovePathCursor(0, 0)
    AddPathLine(200, 200)
   
    VectorSourceColor(RGBA(255, 0, 0, 255))
    StrokePath(10) ; Толщина линии.
   
    StopVectorDrawing()
  EndIf
 
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 09, 2017 3:49 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 512
Благодарил (а): 2 раз.
Поблагодарили: 26 раз.
Пункты репутации: 9
Пётр писал(а):
m0t0d0r писал(а):
3 линии рядом
В чем сложность?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Procedure LineXY_Size(x1, y1, x2, y2, Color, Size=1)
  Size-1
  For i=0 To Size
    LineXY(x1+i, y1, x2, y2-i, Color)
  Next i
EndProcedure
 
If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255))
    LineXY_Size(0, 0, 200, 200, RGB(255,0,0), 3)
    StopDrawing()
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
 
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf



Или можно рисовать функциями библиотеки VectorDrawing
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
If OpenWindow(0, 0, 0, 200, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, 200, 200)
 
  If StartVectorDrawing(CanvasVectorOutput(0))
   
    MovePathCursor(0, 0)
    AddPathLine(200, 200)
   
    VectorSourceColor(RGBA(255, 0, 0, 255))
    StrokePath(10) ; Толщина линии.
   
    StopVectorDrawing()
  EndIf
 
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf


Сложность может быть в некой корявости линий.
А библиотеки VectorDrawing как я понимаю в версии 5.31 тоже нету... :roll:


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 09, 2017 4:24 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Сергейчик писал(а):
библиотеки VectorDrawing как я понимаю в версии 5.31 тоже нету.
Появилась в версии 4.40.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 10, 2017 6:21 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 498
Благодарил (а): 46 раз.
Поблагодарили: 14 раз.
Пункты репутации: 5
Пётр писал(а):
Появилась в версии 4.40.

ну нехренасе!!! :shock: :shock: :shock:

в 540 наверно, в 531 ещё нет же


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 10, 2017 9:16 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
newJS писал(а):
в 540 наверно, в 531 ещё нет же
Значит пора обновить версию.
4.40 появилась полтора года назад...

В 5.31 никто эту библиотеку добавлять не будет. Но если очень хочется, то можно добавить самому. Для этого нужно скопировать папку с PB 5.31 в другое место и скопировать в нее следующие файлы из демо версии 5.40.
Цитата:
PureLibraries\VectorDrawing
PureLibraries\Gadget
PureLibraries\Windows\Libraries\gdiplus.lib
После этого можно будет запускать код с использованием VectorDrawing с выключенным отладчиком.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 10, 2017 10:08 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 879
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 12 раз.
Пункты репутации: 7
Да я 3 линии рядом сделал, вроде нормально смотрится, там график гибкий, поэтому корявость (просветы), между линиями не видны, а вот на длинных линиях есть такой косяк, некоторые пиксели остаются незакрашеными между линиями.
А что касается версий, я как то не гонюсь за ними, вполне достаточно стандартных функций

В принципе вопрос исчерпан, всем спасибо.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB