Skip to content

Commit

Permalink
git subrepo pull rsyn
Browse files Browse the repository at this point in the history
subrepo:
  subdir:   "rsyn"
  merged:   "99dc124"
upstream:
  origin:   "https://github.com/rsyn/rsyn.git"
  branch:   "master"
  commit:   "99dc124"
git-subrepo:
  version:  "0.3.1"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "a7ee886"
  • Loading branch information
gaflach committed Dec 26, 2017
1 parent 09d1bb3 commit dfbd880
Show file tree
Hide file tree
Showing 41 changed files with 1,028 additions and 370 deletions.
4 changes: 2 additions & 2 deletions rsyn/.gitrepo
Expand Up @@ -6,6 +6,6 @@
[subrepo]
remote = https://github.com/rsyn/rsyn.git
branch = master
commit = ac50dea117330c44b7e74211aca75e1f1f5d8d4b
parent = d4d83c8d527d1d0265c9e90a52cef4a3e4a80a7c
commit = 99dc1241ef523c416be2617c7c7bdd3eec15413f
parent = 09d1bb30dc611121087a3ce33968e806944d33bb
cmdver = 0.3.1
6 changes: 4 additions & 2 deletions rsyn/src/rsyn/gui/CanvasGL.cpp
Expand Up @@ -27,7 +27,7 @@ int CanvasGL::CANVAS_GL_ARGS[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SI
// -----------------------------------------------------------------------------

CanvasGL::CanvasGL(wxWindow* parent) :
wxGLCanvas(parent, wxID_ANY, CANVAS_GL_ARGS, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)
wxGLCanvas(parent, wxID_ANY, CANVAS_GL_ARGS, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE | wxWANTS_CHARS)
{

Connect( wxEVT_MOTION, wxMouseEventHandler(CanvasGL::onMouseMoved), NULL, this );
Expand Down Expand Up @@ -143,11 +143,13 @@ void CanvasGL::onMouseLeaveWindow(wxMouseEvent& event) {
// -----------------------------------------------------------------------------

void CanvasGL::onKeyPressed(wxKeyEvent& event) {
event.Skip();
} // end method

// -----------------------------------------------------------------------------

void CanvasGL::onKeyReleased(wxKeyEvent& event) {
event.Skip();
} // end method

// -----------------------------------------------------------------------------
Expand Down Expand Up @@ -335,7 +337,7 @@ void CanvasGL::adjustAspectRatio() {
void CanvasGL::prepare2DViewport(const int width, const int height, const bool clear) {
wxGLCanvas::SetCurrent(*clsContext);

glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // white background
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glDisable(GL_TEXTURE_2D); // textures
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_BLEND);
Expand Down
2 changes: 2 additions & 0 deletions rsyn/src/rsyn/gui/PropagationHandler.h
Expand Up @@ -13,6 +13,8 @@
* limitations under the License.
*/

// Source: https://forums.wxwidgets.org/viewtopic.php?t=6379

#ifndef PROPAGATION_HANDLER_H
#define PROPAGATION_HANDLER_H

Expand Down
72 changes: 68 additions & 4 deletions rsyn/src/rsyn/gui/canvas/GeometryManager.cpp
Expand Up @@ -224,13 +224,15 @@ GeometryManager::addRectangle(
const LayerId layerId,
const Box &box,
void * data,
const BoxOrientation orientation,
const GroupId groupId
) {
Object object;
object.type = RECTANGLE;
object.box = box;
object.area = (float) bg::area(box);
object.data = data;
object.orientation = orientation;

Layer &layer = layers[layerId];
layer.objects.push_back(object);
Expand Down Expand Up @@ -303,8 +305,9 @@ GeometryManager::addPath(
tracePathOutline(points, thickness/2, outlinePoints);

Object object;
object.type = POLYGON;
object.type = PATH;
object.data = data;
object.pathPoints = points;
for (const float2 &p : outlinePoints) {
bg::append(object.polygon, PolygonPoint(p.x, p.y));
} // end for
Expand All @@ -314,7 +317,7 @@ GeometryManager::addPath(
Layer &layer = layers[layerId];
layer.objects.push_back(object);

const ObjectId objectId = std::make_tuple(layerId, (int) (layer.objects.size() - 1));
const ObjectId objectId = std::make_tuple(layerId, (int) (layer.objects.size() - 1));
Box box;
bg::envelope(object.polygon, box);
layer.rtree.insert(std::make_pair(box, objectId));
Expand Down Expand Up @@ -460,6 +463,17 @@ void
GeometryManager::renderFocusedObject(
const ObjectId &objectId
) const {
if (objectId != previousFocusedObjectId) {
//renderFocusedObject_Core(previousFocusedObjectId);
renderFocusedObject_Core(objectId);
previousFocusedObjectId = objectId;
} // end if
} // end method

// -----------------------------------------------------------------------------

void
GeometryManager::renderFocusedObject_Core(const ObjectId &objectId) const {
if (!isObjectIdValid(objectId))
return;

Expand All @@ -470,7 +484,7 @@ GeometryManager::renderFocusedObject(
//glLogicOp(GL_INVERT);
//glEnable(GL_COLOR_LOGIC_OP);
glLineWidth(2);
glColor3ub(0, 0, 0);
glColor3ub(255, 255, 255);
glLineStipple(3, 0xAAAA);
glEnable(GL_LINE_STIPPLE);
glDisable(GL_DEPTH_TEST);
Expand All @@ -495,7 +509,7 @@ void
GeometryManager::renderHighlightedObjects() const {
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glLineWidth(2);
glColor3ub(0, 0, 0);
glColor3ub(255, 255, 255);
glDisable(GL_DEPTH_TEST);

for (const ObjectId &objectId : highlightedObjects) {
Expand Down Expand Up @@ -531,6 +545,50 @@ GeometryManager::renderRectangleOutline(const Layer &layer, const Object &object
glVertex3f(object.box.min_corner().get<0>(), object.box.max_corner().get<1>(), layer.z);
glEnd();

if (object.orientation != BOX_ORIENTATION_INVALID) {
const float d = (object.box.max_corner().get<1>() - object.box.min_corner().get<1>()) / 6;
const float xmin = object.box.min_corner().get<0>();
const float ymin = object.box.min_corner().get<1>();
const float xmax = object.box.max_corner().get<0>();
const float ymax = object.box.max_corner().get<1>();

float x0, y0, x1, y1;
switch (object.orientation) {
case BOX_ORIENTATION_SW:
x0 = xmin;
y0 = ymin + d;
x1 = xmin + d;
y1 = ymin;
break;
case BOX_ORIENTATION_SE:
x0 = xmax - d;
y0 = ymin;
x1 = xmax;
y1 = ymin + d;
break;
case BOX_ORIENTATION_NE:
x0 = xmax - d;
y0 = ymax;
x1 = xmax;
y1 = ymax - d;
break;
case BOX_ORIENTATION_NW:
x0 = xmin;
y0 = ymax - d;
x1 = xmin + d;
y1 = ymax;
break;
default:
assert(false);
} // end switch

glBegin(GL_LINES);
glVertex3f(x0, y0, layer.z);
glVertex3f(x1, y1, layer.z);
glEnd();

} // end if

if (object.hasLineColor) {
restoreDefaultColor();
} // end if
Expand Down Expand Up @@ -561,6 +619,12 @@ GeometryManager::renderPolygonOutline(const Layer &layer, const Object &object)

void
GeometryManager::renderPathOutline(const Layer &layer, const Object &object) const {
glBegin(GL_LINES);
for (const DBUxy &p : object.pathPoints) {
glVertex3f((GLfloat) p.x, (GLfloat) p.y, layer.z);
} // end for
glEnd();

renderPolygonOutline(layer, object);
} // end method

Expand Down
26 changes: 23 additions & 3 deletions rsyn/src/rsyn/gui/canvas/GeometryManager.h
Expand Up @@ -70,6 +70,14 @@ class GeometryManager {
PATH
}; // end enum

enum BoxOrientation {
BOX_ORIENTATION_INVALID,
BOX_ORIENTATION_SW,
BOX_ORIENTATION_SE,
BOX_ORIENTATION_NE,
BOX_ORIENTATION_NW
};

GeometryManager();

void reset();
Expand All @@ -86,7 +94,7 @@ class GeometryManager {
GroupId createGroup();
void addObjectToGroup(const ObjectId objectId, const GroupId groupId);

ObjectId addRectangle(const LayerId layerId, const Box &box, void * data = nullptr, const GroupId groupId = INVALID_GROUP_ID);
ObjectId addRectangle(const LayerId layerId, const Box &box, void * data = nullptr, const BoxOrientation orientation = BOX_ORIENTATION_INVALID, const GroupId groupId = INVALID_GROUP_ID);
ObjectId addPolygon(const LayerId layerId, const std::vector<DBUxy> &points, const float2 displacement, void * data = nullptr, const GroupId groupId = INVALID_GROUP_ID);
ObjectId addPath(const LayerId layerId, const std::vector<DBUxy> &points, const float thickness, void * data = nullptr, const GroupId groupId = INVALID_GROUP_ID);

Expand Down Expand Up @@ -160,20 +168,24 @@ class GeometryManager {

bool hasFillColor : 1;
bool hasLineColor : 1;
BoxOrientation orientation : 3;

Color fillColor;
Color lineColor;

// TODO: Maybe replace this by an OpenGL genlist (seeglGenLists).
// TODO: memory optimization... Only store this when the object is a
// polygon.
std::vector<std::tuple<GLenum, int>> tessellationType;
std::vector<float2> tessellationPoints;
std::vector<DBUxy> pathPoints;

// Client data.
void * data = nullptr;

Object() :
hasFillColor(false),
hasLineColor(false) {}
hasLineColor(false),
orientation(BOX_ORIENTATION_INVALID) {}
}; // end struct

struct Layer {
Expand All @@ -198,6 +210,8 @@ class GeometryManager {

GLUtriangulatorObj *tobj = nullptr;

mutable ObjectId previousFocusedObjectId = INVALID_OBJECT_ID;

mutable Color defaultColor;

Object &getObject(const ObjectId &objectId) {
Expand All @@ -216,6 +230,8 @@ class GeometryManager {
return layers[layerId];
} // end method

void renderFocusedObject_Core(const ObjectId &objectId) const;

public:
LineStippleMask getLayerLinePattern (const LayerId &layerId) const {
return layers[layerId].linePattern;
Expand All @@ -233,6 +249,10 @@ class GeometryManager {
return layers[layerId].fillColor;
} // end method

float getLayerZ(const LayerId &layerId) const {
return layers[layerId].z;
}

private:
void resortLayers();

Expand Down

0 comments on commit dfbd880

Please sign in to comment.