Skip to content

Commit 7293c94

Browse files
authored
Merge pull request #24 from CERN/DELPHI-645
Add support for second clipping plane
2 parents 514b464 + 6fce6ae commit 7293c94

12 files changed

Lines changed: 255 additions & 170 deletions

File tree

.github/workflows/codeql.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
# - https://gh.io/supported-runners-and-hardware-resources
2828
# - https://gh.io/using-larger-runners (GitHub.com only)
2929
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
30-
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
30+
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-22.04' }}
3131
permissions:
3232
# required for all workflows
3333
security-events: write
@@ -64,6 +64,8 @@ jobs:
6464
# or others). This is typically only required for manual builds.
6565
# - name: Setup runtime (example)
6666
# uses: actions/setup-example@v1
67+
- name: dependencies
68+
run: sudo apt install --fix-missing cmake gcc gfortran libx11-dev libglu1-mesa-dev libmotif-dev tcsh libxaw7-dev libglew-dev libdlm-dev libgl2ps-dev libpng-dev
6769

6870
# Initializes the CodeQL tools for scanning.
6971
- name: Initialize CodeQL

.github/workflows/ubuntu.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
jobs:
1010
build:
1111

12-
runs-on: ubuntu-latest
12+
runs-on: ubuntu-22.04
1313

1414
strategy:
1515
fail-fast: false
@@ -24,7 +24,7 @@ jobs:
2424
- uses: actions/checkout@v4
2525

2626
- name: dependencies
27-
run: sudo apt install cmake gcc gfortran libx11-dev libglu1-mesa-dev libmotif-dev tcsh libxaw7-dev libglew-dev libdlm-dev libgl2ps-dev
27+
run: sudo apt install --fix-missing cmake gcc gfortran libx11-dev libglu1-mesa-dev libmotif-dev tcsh libxaw7-dev libglew-dev libdlm-dev libgl2ps-dev libpng-dev
2828

2929
- name: clean
3030
run: make clean

src/CMakeLists.txt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.9...3.31)
22
PROJECT(PHIGS)
33

4+
SET(CMAKE_MODULE_PATH ${PHIGS_SOURCE_DIR}/cmake)
5+
6+
FIND_PACKAGE(PNG REQUIRED)
7+
FIND_PACKAGE(OpenGL REQUIRED)
8+
FIND_PACKAGE(X11 REQUIRED)
9+
FIND_PACKAGE(XMU REQUIRED)
10+
FIND_PACKAGE(Motif REQUIRED)
11+
FIND_PACKAGE(GLEW)
12+
FIND_PACKAGE(epoxy)
13+
414
if (APPLE)
515
set(CMAKE_C_COMPILER gcc)
616
set(CMAKE_C_COMPILER_ID GNU)
@@ -28,31 +38,21 @@ if (OPENPHIGS_FORCE_32)
2838
message(STATUS "PHIGS: Guess for 32bit: OPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY}")
2939
endif()
3040

31-
SET(CMAKE_MODULE_PATH ${PHIGS_SOURCE_DIR}/cmake)
3241
set(GLEW_VERBOSE ON)
3342

3443
# for debugging
3544
add_definitions(-g)
3645
# add_definitions(-DTEST)
3746
# add_definitions(-DDEBUG)
47+
# add_definitions(-DDEBUGL)
3848
# add_definitions(-DDEBUGINP)
3949

4050
#
4151
# use Motif widgets rather than Xaw
4252
add_definitions(-DMOTIF)
4353

44-
FIND_PACKAGE(PNG REQUIRED)
45-
FIND_PACKAGE(OpenGL REQUIRED)
46-
FIND_PACKAGE(X11 REQUIRED)
47-
FIND_PACKAGE(XMU REQUIRED)
48-
FIND_PACKAGE(Motif REQUIRED)
49-
5054
# use GLEW or epoxy
5155
if (USE_GLEW)
52-
if (APPLE)
53-
set (GLEW_USE_STATIC_LIBS "ON")
54-
endif()
55-
FIND_PACKAGE(GLEW)
5656
add_definitions(-DGLEW)
5757
set (GL_INCLUDES ${GLEW_INCLUDE_DIR})
5858
else()
@@ -112,7 +112,6 @@ if (USE_GLEW)
112112
m
113113
)
114114
else()
115-
FIND_PACKAGE(epoxy)
116115
SET(PHIGS_LIBRARIES
117116
phigs
118117
${XLIBS}

src/cmake/FindGLEW.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FIND_LIBRARY(GLEW_LIBRARIES
2+
NAMES GLEW
3+
PATHS /usr/lib
4+
PATHS /usr/X11/lib
5+
PATHS /usr/openwin/lib
6+
PATHS /opt/homebrew/lib)
7+
8+
IF (GLEW_LIBRARIES)
9+
SET (GLEW_FOUND TRUE)
10+
ENDIF (GLEW_LIBRARIES)
11+
12+
IF (GLEW_FOUND)
13+
MESSAGE (STATUS "Found GLEW:" ${GLEW_LIBRARIES})
14+
ELSE (GLEW_FOUND)
15+
MESSAGE (FATAL ERROR "Cannot find GLEW")
16+
ENDIF (GLEW_FOUND)

src/cmake/FindXMU.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ FIND_LIBRARY(XMU_LIBRARY
22
NAMES Xmu
33
PATHS /usr/lib
44
PATHS /usr/X11/lib
5-
PATHS /usr/openwin/lib)
5+
PATHS /usr/openwin/lib
6+
PATHS /opt/homebrew/lib)
67

78
IF (XMU_LIBRARY)
89
SET (XMU_FOUND TRUE)
910
ENDIF (XMU_LIBRARY)
1011

1112
IF (XMU_FOUND)
12-
MESSAGE (STATUS "Found Xmu:")
13+
MESSAGE (STATUS "Found Xmu:" ${XMU_LIBRARY})
1314
ELSE (XMU_FOUND)
1415
MESSAGE (FATAL ERROR "Cannot find Xmu")
1516
ENDIF (XMU_FOUND)

src/libphigs/c_binding/cb_extel.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,9 @@ void pset_model_clip_ind(
11491149
else if (clipi < 0) {
11501150
ERR_REPORT(PHG_ERH, ERR112);
11511151
}
1152+
else if (clipi > 2) {
1153+
ERR_REPORT(PHG_ERH, ERR112);
1154+
}
11521155
else {
11531156
args.el_type = PELEM_MODEL_CLIP_IND;
11541157
args.el_size = sizeof(Pint);
@@ -1183,7 +1186,7 @@ void pset_model_clip_vol3 (
11831186
if (PSL_STRUCT_STATE(PHG_PSL) != PSTRUCT_ST_STOP) {
11841187
ERR_REPORT(PHG_ERH, ERR5);
11851188
}
1186-
else if ( op < 0) {
1189+
else if ( op < 0 || op > 2) {
11871190
/* the value of op is not important as this is anyway not used */
11881191
ERR_REPORT(PHG_ERH, ERR112);
11891192
}

src/libphigs/f_binding/fb_el.c

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -751,51 +751,6 @@ FTN_SUBROUTINE(psiasf)(
751751
pset_indiv_asf(attrid, asfval);
752752
}
753753

754-
/*******************************************************************************
755-
* psmcli
756-
*
757-
* DESCR: set modelling clipping indicator
758-
* RETURNS: N/A
759-
*/
760-
FTN_SUBROUTINE(psmcli)(
761-
FTN_INTEGER(mclipi)
762-
)
763-
{
764-
Pint clipi = FTN_INTEGER_GET(mclipi);
765-
pset_model_clip_ind(clipi);
766-
}
767-
768-
/*******************************************************************************
769-
* psmcv3
770-
*
771-
* DESCR: set modelling clipping volume 3
772-
* RETURNS: N/A
773-
*/
774-
FTN_SUBROUTINE(psmcv3)(
775-
FTN_INTEGER(op),
776-
FTN_INTEGER(nhalfs),
777-
FTN_REAL_ARRAY(halfsp)
778-
)
779-
{
780-
Pint iop = FTN_INTEGER_GET(op);
781-
Pint num = FTN_INTEGER_GET(nhalfs);
782-
Phalf_space_list3 spacelist;
783-
Phalf_space3 list[num];
784-
int i;
785-
786-
spacelist.num_half_spaces = num;
787-
for (i=0; i<num; i++){
788-
list[i].point.x = FTN_REAL_ARRAY_GET(halfsp, 0 + i*6);
789-
list[i].point.y = FTN_REAL_ARRAY_GET(halfsp, 1 + i*6);
790-
list[i].point.z = FTN_REAL_ARRAY_GET(halfsp, 2 + i*6);
791-
list[i].norm.delta_x = FTN_REAL_ARRAY_GET(halfsp, 3 + i*6);
792-
list[i].norm.delta_y = FTN_REAL_ARRAY_GET(halfsp, 4 + i*6);
793-
list[i].norm.delta_z = FTN_REAL_ARRAY_GET(halfsp, 5 + i*6);
794-
}
795-
spacelist.half_spaces = &list[0];
796-
pset_model_clip_vol3(iop, spacelist);
797-
}
798-
799754
/*******************************************************************************
800755
* psedci
801756
*

src/libphigs/f_binding/fb_extel.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,3 +797,47 @@ FTN_SUBROUTINE(psisi)(
797797
Pint iindex = FTN_INTEGER_GET(ii);
798798
pset_int_style_ind(iindex);
799799
}
800+
/*******************************************************************************
801+
* psmcli
802+
*
803+
* DESCR: set modelling clipping indicator
804+
* RETURNS: N/A
805+
*/
806+
FTN_SUBROUTINE(psmcli)(
807+
FTN_INTEGER(mclipi)
808+
)
809+
{
810+
Pint clipi = FTN_INTEGER_GET(mclipi);
811+
pset_model_clip_ind(clipi);
812+
}
813+
814+
/*******************************************************************************
815+
* psmcv3
816+
*
817+
* DESCR: set modelling clipping volume 3
818+
* RETURNS: N/A
819+
*/
820+
FTN_SUBROUTINE(psmcv3)(
821+
FTN_INTEGER(op),
822+
FTN_INTEGER(nhalfs),
823+
FTN_REAL_ARRAY(halfsp)
824+
)
825+
{
826+
Pint iop = FTN_INTEGER_GET(op);
827+
Pint num = FTN_INTEGER_GET(nhalfs);
828+
Phalf_space_list3 spacelist;
829+
Phalf_space3 list[num];
830+
int i;
831+
832+
spacelist.num_half_spaces = num;
833+
for (i=0; i<num; i++){
834+
list[i].point.x = FTN_REAL_ARRAY_GET(halfsp, 0 + i*6);
835+
list[i].point.y = FTN_REAL_ARRAY_GET(halfsp, 1 + i*6);
836+
list[i].point.z = FTN_REAL_ARRAY_GET(halfsp, 2 + i*6);
837+
list[i].norm.delta_x = FTN_REAL_ARRAY_GET(halfsp, 3 + i*6);
838+
list[i].norm.delta_y = FTN_REAL_ARRAY_GET(halfsp, 4 + i*6);
839+
list[i].norm.delta_z = FTN_REAL_ARRAY_GET(halfsp, 5 + i*6);
840+
}
841+
spacelist.half_spaces = &list[0];
842+
pset_model_clip_vol3(iop, spacelist);
843+
}

src/libphigs/wsgl/wsgl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -605,8 +605,8 @@ void wsgl_begin_structure(
605605
wsgl->cur_struct.offset = 0;
606606
phg_mat_copy(wsgl->cur_struct.global_tran, wsgl->composite_tran);
607607
phg_mat_identity(wsgl->cur_struct.local_tran);
608-
wsgl_set_clip_ind(ws, 0); // FIXME
609-
wsgl_set_alpha_channel(ws, 1.0); // FIXME
608+
wsgl_set_clip_ind(ws, 0);
609+
wsgl_set_alpha_channel(ws, 1.0);
610610
wsgl_update_modelview(ws);
611611

612612
if (wsgl->render_mode == WS_RENDER_MODE_SELECT) {

src/libphigs/wsgl/wsgl_attr.c

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
#include "ws.h"
3636
#include "private/wsglP.h"
3737

38-
extern GLint clipping_ind, num_clip_planes, plane0, point0;
38+
extern GLint clipping_ind, num_clip_planes;
39+
extern GLint plane0, point0;
40+
extern GLint plane1, point1;
3941
extern GLint shading_mode;
4042
extern GLint ModelViewMatrix, ProjectionMatrix;
4143
extern GLint alpha_channel;
@@ -242,8 +244,13 @@ void wsgl_set_clip_ind(
242244
glUniform1i(clipping_ind, ind);
243245
if (ind == 1) {
244246
glEnable(GL_CLIP_PLANE0);
247+
glDisable(GL_CLIP_PLANE1);
248+
} else if (ind == 2) {
249+
glEnable(GL_CLIP_PLANE0);
250+
glEnable(GL_CLIP_PLANE1);
245251
} else {
246252
glDisable(GL_CLIP_PLANE0);
253+
glDisable(GL_CLIP_PLANE1);
247254
}
248255
}
249256
}
@@ -283,8 +290,10 @@ void wsgl_set_clip_vol3(
283290
int op, num;
284291
int * int_data = (int*) el_data;
285292
Phalf_space3 * list;
286-
Phalf_space3 volume0;
287-
Ppoint3 tmp1, tmp2, vol3, point3, pwc;
293+
Phalf_space3 volume0, volume1;
294+
Ppoint3 nn0, pt0; /* first plane */
295+
Ppoint3 nn1, pt1; /* second plane if any */
296+
Ppoint3 vol3, point3, pwc;
288297
Pmatrix3 vrc2wc, unity;
289298

290299
#ifdef GLEW
@@ -297,21 +306,43 @@ void wsgl_set_clip_vol3(
297306
op = int_data[0];
298307
num = int_data[1];
299308
list = (Phalf_space3 *)(&int_data[2]);
300-
volume0 = list[0];
301-
/* take a local copy of the data */
302-
tmp1.x = volume0.norm.delta_x;
303-
tmp1.y = volume0.norm.delta_y;
304-
tmp1.z = volume0.norm.delta_z;
305-
306-
tmp2.x = volume0.point.x;
307-
tmp2.y = volume0.point.y;
308-
tmp2.z = volume0.point.z;
309-
310-
glUniform1i(num_clip_planes, num);
311-
glUniform4f(plane0, tmp1.x, tmp1.y, tmp1.z, 0.);
312-
GLdouble eqn0[4] = {tmp1.x, tmp1.y, tmp1.z, 0.};
313-
glClipPlane(GL_CLIP_PLANE0, eqn0);
314-
glUniform4f(point0, tmp2.x, tmp2.y, tmp2.z, 0.);
309+
if (1 == num || 2 ==num){
310+
glUniform1i(num_clip_planes, num);
311+
/* first plane */
312+
volume0 = list[0];
313+
/* take a local copy of the data */
314+
nn0.x = volume0.norm.delta_x;
315+
nn0.y = volume0.norm.delta_y;
316+
nn0.z = volume0.norm.delta_z;
317+
318+
pt0.x = volume0.point.x;
319+
pt0.y = volume0.point.y;
320+
pt0.z = volume0.point.z;
321+
322+
glUniform4f(plane0, nn0.x, nn0.y, nn0.z, 0.);
323+
GLdouble eqn0[4] = {nn0.x, nn0.y, nn0.z, 0.};
324+
glClipPlane(GL_CLIP_PLANE0, eqn0);
325+
glUniform4f(point0, pt0.x, pt0.y, pt0.z, 0.);
326+
if (2 ==num){
327+
/* first plane */
328+
volume1 = list[1];
329+
/* take a local copy of the data */
330+
nn1.x = volume1.norm.delta_x;
331+
nn1.y = volume1.norm.delta_y;
332+
nn1.z = volume1.norm.delta_z;
333+
334+
pt1.x = volume1.point.x;
335+
pt1.y = volume1.point.y;
336+
pt1.z = volume1.point.z;
337+
338+
glUniform4f(plane1, nn1.x, nn1.y, nn1.z, 0.);
339+
GLdouble eqn1[4] = {nn1.x, nn1.y, nn1.z, 0.};
340+
glClipPlane(GL_CLIP_PLANE1, eqn1);
341+
glUniform4f(point1, pt1.x, pt1.y, pt1.z, 0.);
342+
}
343+
} else {
344+
glUniform1i(num_clip_planes, 0); /* ignore the call */
345+
}
315346
}
316347
}
317348

0 commit comments

Comments
 (0)