Поиск сообщества
Показаны результаты для тегов 'DrawLine'.
Найдено: 8 результатов
-
Добрый день, может туплю, или не туда копаю.. есть ли Firemonkey более менее стандартный способ рисовать на поверхности 3D фигур? в частности интересует сфера, есть две координаты, нужно провести чрез них линию, так что бы бы она легла на поверхность, или начертить фигуру так же лежащую на поверхности. или надо копать в глубь математики, и разбивать на множество отрезков, расчитывать каждую координату для каждой точки и т.д. ну а заливка фигур как понимаю только через материалы доступна в 3D, но можно залить ограниченную область на поверхности тогда ? нашел очень симпатичный пример на youtube от QuarkCube - Sketch3d, но там интерактивное рисование мышкой, и каждая линия это множество примитивов, все красиво но не совсем то ) пытаюсь рисовать скажем планету, и показать на ней треки, области, точки:)
- 6 ответов
-
- tviewport2d
- sphere
-
(и ещё 1 )
C тегом:
-
Здравствуйте, для проекта понадобилось рисовать разные 3d линии в зависимости от значения переменной, сначала решил проверить на совсем простом примере, но сразу возникли проблемы. В общем, в процедуре render организован case для переменной stage, в зависимости от её значения должны рисоваться разные линии, но этого не происходит, рисуется только первоначальная линия. Вот код процедуры : procedure TForm2.Dummy1Render(Sender: TObject; Context: TContext3D); var i:integer; begin case stage of 1:begin if Context.BeginScene then try Context.Clear(TAlphaColorRec.White); Context.DrawLine(TPoint3D.Create(3,3,0),TPoint3D.Create(3,-3,0),1,TAlphaColorRec.Black); finally Context.EndScene; end; end; 2:begin if Context.BeginScene then try Context.Clear(TAlphaColorRec.White); Context.DrawLine(TPoint3D.Create(-3,3,0),TPoint3D.Create(-3,-3,0),1,TAlphaColorRec.Black); finally Context.EndScene; end; end; end; end; Вот скрины работы программы. Снизу отображается значение переменной stage. Заранее спасибо.
-
Здравствуйте, начал делать проект о сечениях, нарисовал на viewport3D куб, поставил на грани несколько сфер и соединил их линиями (это была часть задумки). Потом решил добавить всему этому вращение, но когда начинаю вращать всё, что рисовалось в рендере пропадает, причём при отдалении камеры всё нормально. Не подскажете, как можно это исправить? Вот код рендера: procedure TForm2.Dummy1Render(Sender: TObject; Context: TContext3D); begin if Context.BeginScene then try Context.DrawLine(TPoint3D.Create(-3,3,-3),TPoint3D.Create(3,3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,-3),TPoint3D.Create(3,3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,-3),TPoint3D.Create(-3,-3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,-3),TPoint3D.Create(-3,-3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,3),TPoint3D.Create(3,3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,3),TPoint3D.Create(3,3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,3),TPoint3D.Create(-3,-3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,3),TPoint3D.Create(-3,-3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,-3),TPoint3D.Create(-3,3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,-3),TPoint3D.Create(3,-3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,-3,3),TPoint3D.Create(-3,-3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,3,3),TPoint3D.Create(3,3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(Sphere1.Position.X,Sphere1.Position.Y,Sphere1.Position.Z), TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(Sphere3.Position.X,Sphere3.Position.Y,Sphere3.Position.Z), TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z),1,TAlphaColorRec.Black); finally Context.EndScene; end; end; Вот код вращения procedure TForm2.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if ssleft in shift then begin Dummy2.RotationAngle.X:=Dummy2.RotationAngle.X-((Y-rot.Y)*0.3); Dummy2.RotationAngle.Y:=Dummy2.RotationAngle.Y-((X-rot.X)*0.3); Rot:=PointF(X,Y); end; end; Процедура масштабирования procedure TForm2.Viewport3D1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); begin CameraZ.Position.Z:=CameraZ.Position.Z+WheelDelta/40; end; На изображениях показано как работает программа И ещё один вопрос если позволите. Обнаружил, что если ставить отображение камеры и объектов на viewport3d как screen, то не получается сменить стандартную камеру. Можно ли это исправить? Заранее спасибо.
-
Здравствуйте, для проекта понадобилось рисовать линии в 3d графике, но возникла такая проблема, можете подсказать, что не так? Вот часть кода procedure TForm2.Sphere1Render(Sender: TObject; Context: TContext3D); var v1,v2:TPoint3D; begin if Context.BeginScene then try v1:=TPoint3D.Create(Sphere1.Position.X,Sphere1.Position.Y,Sphere1.Position.Z); v2:=TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z); Context.drawline(v1,v2,1,TAlphaColorRec.Black); finally Context.EndScene; end; end; На изображении результат работы программы.
-
Доброго всем времени суток. Хочу снова поднять вопрос про отрисовку линий на канве, обсуждавшейся здесь С горизонтальными и вертикальными линиями проблем нет, при смещении на половину от толщины линии всё прекрасно выглядит. Однако при отрисовке линий под различными углами такой финт не проходит: слева VCL, справа FMX Линия всё так же размазывается, в итоге визуально утолщается и становится не такой чёткой. Как всё же добиться такого же результата как на VCL? Интересует только Windows. const OFFSET_LINE = 0.5; ... Image.Bitmap.Canvas.BeginScene; Image.Bitmap.Canvas.Stroke.Kind := TBrushKind.Solid; Image.Bitmap.Canvas.Stroke.Thickness := 1.0; Image.Bitmap.Canvas.DrawLine( PointF(10.0 - OFFSET_LINE, 10.0 - OFFSET_LINE), PointF(500.0 - OFFSET_LINE, 10.0 - OFFSET_LINE), 1.0); Image.Bitmap.Canvas.DrawLine( PointF(10.0 - OFFSET_LINE, 10.0 - OFFSET_LINE), PointF(10.0 - OFFSET_LINE, 500.0 - OFFSET_LINE), 1.0); Image.Bitmap.Canvas.DrawLine( PointF(10.0 - OFFSET_LINE, 10.0 - OFFSET_LINE), PointF(500.0 - OFFSET_LINE, 500.0 - OFFSET_LINE), 1.0); Image.Bitmap.Canvas.EndScene;
-
Подскажите пожалуйста глупому человеку , как можно загрузив изображение: buf: TBitmap; buf.LoadFromFile('.bmp'); Определить цвет нужного мне пикселя (X,Y), и нарисовать хотя бы линию этого цвета на форме используя обычный: Canvas.DrawLine
- 2 ответа
-
- TMapAccess
- TCanvas
-
(и ещё 3 )
C тегом:
-
Привет, Всем! Заметил странности отображения ломанных линий с помощью DrawPath. При острых углах ломанной она начинает выходить за координаты точек излома. Как на рисунке: Красным цветом построена линия с помощью DrawLine, зеленой с помощью DrawPath по одним и тем же координатам. procedure TFMain.Button1Click(Sender: TObject); var Pa:TPathData; p1,p2,p3,p4:TPointF; begin p1:=PointF(10,10); p2:=PointF(200,20); p3:=PointF(10,30); p4:=PointF(400,40); Pa:=TPathData.Create; Pa.MoveTo(p1); Pa.LineTo(p2); Pa.LineTo(p3); Pa.LineTo(p4); PaintBox.Bitmap.Canvas.BeginScene; PaintBox.Bitmap.Canvas.Stroke.Color:=claGreen; PaintBox.Bitmap.Canvas.Stroke.Thickness:=1;//PenWidth; PaintBox.Bitmap.Canvas.DrawPath(Pa,1.0); PaintBox.Bitmap.Canvas.EndScene; Pa.Free; PaintBox.Bitmap.Canvas.BeginScene; PaintBox.Bitmap.Canvas.Stroke.Color:=claRed; PaintBox.Bitmap.Canvas.DrawLine(p1,p2,1.0); PaintBox.Bitmap.Canvas.DrawLine(p2,p3,1.0); PaintBox.Bitmap.Canvas.DrawLine(p3,p4,1.0); PaintBox.Bitmap.Canvas.DrawLine(p1,p2,1.0); PaintBox.Bitmap.Canvas.EndScene; end; Можно заметить что зеленая линия немножко выходит за красную. Этого можно избежать только если строить линию с разрывами. Подозреваю что это связано с радиусом загиба кривой, вот только где его убрать? Можно как-нибудь элегантно сделать чтобы кривая линия строилась точно по координатам с помощью DrawPath?
-
Приветствую! Не понятная ситуация с шириной линии. Рисую горизонтальную линию на канве толщиной толщиной 1 пиксель. Если линия лежит вдоль целых координат, например Y=100 то толщина линии реально получается 2 пикселя. А если координаты дробные, например 50.5 то линия в один пиксель. Вот как это выглядит: Т.е. я так понимаю, что координаты канвы начинаются не с нуля, а с 0.5. Как сделать чтобы отображение целых координат было точно в пиксель?