Skip to content
This repository was archived by the owner on Dec 27, 2024. It is now read-only.

Commit c5de825

Browse files
committed
simple desktop 3d graphics
1 parent d465bad commit c5de825

File tree

9 files changed

+1885
-0
lines changed

9 files changed

+1885
-0
lines changed

desktop/graph3d/.idea/.gitignore

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

desktop/graph3d/.idea/uiDesigner.xml

Lines changed: 124 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package com.support.constraintlayout.extlib.graph3d;
2+
3+
import javax.swing.*;
4+
import java.awt.*;
5+
import java.awt.event.ComponentAdapter;
6+
import java.awt.event.ComponentEvent;
7+
import java.awt.event.MouseAdapter;
8+
import java.awt.event.MouseEvent;
9+
import java.awt.image.BufferedImage;
10+
import java.awt.image.DataBufferInt;
11+
12+
13+
public class Graph3dPanel extends JPanel {
14+
15+
SurfaceGen mSurfaceGen = new SurfaceGen();
16+
private BufferedImage mImage;
17+
private int[] mImageBuff;
18+
int mGraphType = 2;
19+
private float mLastTouchX0 = Float.NaN;
20+
private float mLastTouchY0;
21+
private float mLastTrackBallX;
22+
private float mLastTrackBallY;
23+
double mDownScreenWidth;
24+
25+
public Graph3dPanel() {
26+
27+
mSurfaceGen.calcSurface(-20, 20, -20, 20, true, (x, y) -> {
28+
double d = Math.sqrt(x * x + y * y);
29+
return 10 * ((d == 0) ? 1f : (float) (Math.sin(d) / d));
30+
});
31+
32+
addComponentListener(new ComponentAdapter() {
33+
@Override
34+
public void componentResized(ComponentEvent e) {
35+
onSizeChanged(e);
36+
}
37+
38+
});
39+
MouseAdapter mouseAdapter = new MouseAdapter() {
40+
@Override
41+
public void mouseReleased(MouseEvent e) {
42+
onMouseUP(e);
43+
}
44+
45+
@Override
46+
public void mousePressed(MouseEvent e) {
47+
onMouseDown(e);
48+
}
49+
50+
@Override
51+
public void mouseDragged(MouseEvent e) {
52+
onMouseDrag(e);
53+
}
54+
};
55+
addMouseListener(mouseAdapter);
56+
addMouseMotionListener(mouseAdapter);
57+
}
58+
59+
public void onSizeChanged(ComponentEvent c) {
60+
int width = getWidth();
61+
int height = getHeight();
62+
63+
if (width == 0 || height == 0) {
64+
return;
65+
}
66+
mImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
67+
mImageBuff = ((DataBufferInt) (mImage.getRaster().getDataBuffer())).getData();
68+
mSurfaceGen.setScreenDim(width, height, mImageBuff, 0x00FFFFFF);
69+
}
70+
71+
public void onMouseDown(MouseEvent ev) {
72+
mDownScreenWidth = mSurfaceGen.getScreenWidth();
73+
mLastTouchX0 = ev.getX();
74+
mLastTouchY0 = ev.getY();
75+
mSurfaceGen.trackBallDown(mLastTouchX0, mLastTouchY0);
76+
mLastTrackBallX = mLastTouchX0;
77+
mLastTrackBallY = mLastTouchY0;
78+
}
79+
80+
public void onMouseDrag(MouseEvent ev) {
81+
if (Float.isNaN(mLastTouchX0)) {
82+
return;
83+
}
84+
float tx = ev.getX();
85+
float ty = ev.getY();
86+
float moveX = (mLastTrackBallX - tx);
87+
float moveY = (mLastTrackBallY - ty);
88+
if (moveX * moveX + moveY * moveY < 4000f) {
89+
mSurfaceGen.trackBallMove(tx, ty);
90+
}
91+
mLastTrackBallX = tx;
92+
mLastTrackBallY = ty;
93+
repaint();
94+
}
95+
96+
public void onMouseUP(MouseEvent ev) {
97+
mLastTouchX0 = Float.NaN;
98+
mLastTouchY0 = Float.NaN;
99+
}
100+
101+
public void paintComponent(Graphics g) {
102+
int w = getWidth();
103+
int h = getHeight();
104+
if (mSurfaceGen.notSetUp()) {
105+
System.out.println("setup");
106+
mSurfaceGen.setUpMatrix(w, h);
107+
}
108+
109+
mSurfaceGen.render(mGraphType);
110+
if (mImage == null) {
111+
return;
112+
}
113+
g.drawImage(mImage, 0, 0, null);
114+
}
115+
116+
117+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.support.constraintlayout.extlib.graph3d;
2+
3+
import javax.swing.*;
4+
5+
public class Main {
6+
public static void main(String[] args) {
7+
JFrame frame = new JFrame("3d Plot");
8+
Graph3dPanel p = new Graph3dPanel();
9+
frame.setContentPane(p);
10+
frame.setBounds(100,100,500,500);
11+
frame.setVisible(true);
12+
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
13+
14+
}
15+
}

0 commit comments

Comments
 (0)