forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Visual Basic (http://forum.boolean.name/forumdisplay.php?f=62)
-   -   Line (http://forum.boolean.name/showthread.php?t=7483)

Ayrat 22.12.2008 02:56

Line
 
Проблема вот в чём:
начал делать проект на VB6 и в какой - то момент решил переделать его в VB.NET(Visual Studio 2005) ! Всё хоршо, однако всё тормозит отсутствие элемента Line и создание UserControla с прозрачным фоном!!!:'':SOS:
Как только не пробовал - делал контрол из нарисованной на нём линии и последующей обрезкой региона по линии - получается, но тормозит графика и глюки всякие, начал пробовать с DirectX9 SDK,но мозг сопротивляется почему то восприятию такой информации:'':wallbash:

Товарищи,Друзья и просто Хорошие люди !!! Уже месяц немогу продвинуться дальше из-за графики. Прошу Вас !!! Нужен всего лишь контрол( или класс) ,который рисует и перерисовывает линию при изменении координат концов (аналогично контролу Line в VB6,но имеющий свойство Bring to front!)
Заранее благодарен всем , кто примет участие в решении проблемы !!!

ABTOMAT 22.12.2008 03:29

Ответ: Line
 
С VB не знаком.
Могу предложить тупой способ - рисовать линию самому (исходя из уравнения y=kx+z), но это возможно если существует возможность нарисовать точку, разумеется.
Если интересно, у меня есть аналогичный код на BlitzBasic, думаю, его нетрудно перевести на VB

Ayrat 22.12.2008 11:27

Ответ: Line
 
Цитата:

Сообщение от ABTOMAT (Сообщение 92553)
С VB не знаком.
Могу предложить тупой способ - рисовать линию самому (исходя из уравнения y=kx+z), но это возможно если существует возможность нарисовать точку, разумеется.
Если интересно, у меня есть аналогичный код на BlitzBasic, думаю, его нетрудно перевести на VB

О BlitzBasic конечно первый раз слышу, но если не трудно, всё таки выложите, может поможет чем

ABTOMAT 22.12.2008 16:19

Ответ: Line
 
Держи, тут, оказывается, даже с каментами:

Код:

Function  ABLine(startX,startY,endX,endY)
        Local K#,B
        FuncX = EndX - StartX ; Вычисляем абсолютное направление отрезка, как бы
        FuncY = EndY - StartY ; Передвигая центр координат под стартовую точку
        If FuncX <> 0 K = FuncY/Float(FuncX) ; Таким образом, мы избавились от B и можем вычислить K - отношение Y к X
        ; Теперь, зная К, можно вычислить B, для этого изменяем алгебр. функцию Y=K*X+B, выражая из неё B:
        B = StartY-K*StartX
        ; Ну что ж, теперь у нас есть K и B. Можно приступить к построению линии
        If StartX < EndX
                MinX = StartX
                MaxX = EndX
        Else
                MinX = EndX
                MaxX = StartX
        End If
        ; Игрек тож
        If StartY < EndY
                MinY = StartY
                MaxY = EndY
        Else
                MinY = EndY
                MaxY = StartY
        End If
       
        If MinX = MaxX ; Если стартовый икс и конечный Икс равны, т.е. линия вертикальна...
                For Y=MinY To MaxY; Берём каждое значение Х в пределах указанного отрезка
                        X = MaxX ; ТО у Икс всегда одно и то же значение
                        Plot (X,Y) ; Рисуем точку по рассчитанным координатам
                Next
        Else
                For X=MinX To MaxX; Берём каждое значение Х в пределах указанного отрезка
                        Y = K*X+B ; Вычисляем Y
                        If Y>= MinY And Y<= MaxY Plot (X,Y) ; Рисуем точку по рассчитанным координатам
                Next
       
                ; Бугага! Одного Икса оказалось недостаточно! Нада теперяче сделать чтоб и по Y тоже рисовалось...
       
                For Y=MinY To MaxY; Берём каждое значение Х в пределах указанного отрезка
                        X = (Y-B)/K  ; Вычисляем Y
                        If X>= MinX And X<= MaxX Plot (X,Y) ; Рисуем точку по рассчитанным координатам
                Next
        End If
        ; Должно работать :)
End Function


impersonalis 22.12.2008 16:54

Ответ: Line
 
Начиная с
Цитата:

If MinX = MaxX
идут сомнительные селекции с жутковатым кодом.

ABTOMAT 22.12.2008 22:04

Ответ: Line
 
Сей код был писанмною год назад и модерации за ненадобностью не подвергался.
Я же не говорю, что он идеален.

impersonalis 22.12.2008 22:16

Ответ: Line
 
ok..

Tadeus 23.12.2008 00:43

Ответ: Line
 
Код:

Function DrawLine(x1,y1,x2,y2)
    e=2*y2-x2
    es=2*y2
    ed=2*y2-2*x2

    nx=x1
    ny=y1

    While nx<x2
        Plot nx,ny
        If (e>0) Then
            nx=nx+1
            ny=ny+1
            e=e+ed
        Else
            nx=nx+1
            e=e+es
        EndIf
    Wend
End Function

Вот классика жанра :-)

Ayrat 23.12.2008 00:47

Ответ: Line
 
Цитата:

Сообщение от ABTOMAT (Сообщение 92585)
.

Э-э-э-э друг! Спасибо конечно за желание помочь ! Но!

Проблема не в том как нарисовать линию, а как сделать контрол с прозрачным фоном, на котором рисуется линия или же как рисовать подвижную линию поверх других контролов(кнопок, picturebox-ов и т.п.)

ABTOMAT 23.12.2008 00:54

Ответ: Line
 
В таком случае я не до конца понимаю...
Ты используешь какие-то средства движка? Или WinAPI ? Или чего?

Harter 23.12.2008 21:51

Ответ: Line
 
Я тоже не совсем понял...
Не раз поднималась тема о том, как на Windwos Form в .NET повесить контролы, аналогичные элементам управления Shape, Shape из VB 6.0. Тогда однозначного решения так и не нашли.

Но все-таки Microsoft позаботилась об этой проблеме:
http://darkbrand.spaces.live.com/blo...2206!269.entry

pax 29.01.2009 16:55

Ответ: Line
 
Вложений: 1
Вот написал пример, времени много небыло, но думаю этого хватит :)

SBJoker 29.01.2009 17:03

Ответ: Line
 
Товарищ идёт неправильной дорогой, он использует элементы управления(controls) которые по сути ActiveX. Среди них есть Shape и Line, предназначенные исключительно для отображения статичных линий и фигур как элементов декора интерфейса для windows-приложений.

Для игр это неприменимо совсем.

Я бы товарищу посоветовал использовать PictureBox с свойством ScaleMode=vbPixels и рисовать там всё что ему необходимо.
Для это есть команда Line(x,y)-(x2,y2), color, type

Для манипуляций с растрами посоветую WinApi функцию BitBlt.

З.Ы. сам давным давно 2000-2002г мучал VB для создания игр. Встроеными возможностями рисования можно худо-бедно что-то сделать.

Dragonfly 31.01.2011 13:37

Ответ: Line
 
подождите а разве в 2005м VB нет функций рисования??
что-то вроде Me.CreateGraphics.DrawLine(Pens.Black ,1,1,100,100) для рисования на Form1 линии с началом в координате (1,1) и концом в координате (100,100)

2SBJocker:
если не ошибусь то это код от 6VB а он просит для 2005

SBJoker 31.01.2011 13:52

Ответ: Line
 
Пардон я действительно о VB6.
Но вот вам нет прощенья вы опоздали на два года со своим замечанием!


Часовой пояс GMT +4, время: 15:30.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot