📄 shaded.c
字号:
else set_fill_index( indxlist[0]); } else if (renderstyle == 2) {set_vertex_indices( indxlist, npvert[p]);} else {set_vertex_normals(dxlist,dylist,dzlist,npvert[p]);} if (renderstyle == 0) polyline_abs_3( xlist,ylist,zlist,npvert[p]); else polygon_abs_3( xlist, ylist, zlist, npvert[p]);}static float maxvw, vwpp, maxvdim;static float vlx, vby, vfz, vdx, vdy, vdz;static float minleft, maxright, minbot, maxtop, minback, maxfront;initvw() { int i; float ftmp; ftmp = bbox[0][1]; for (i = 1; i < 3; i++) if (bbox[i][1] > ftmp) ftmp = bbox[i][1]; maxvw = 16.0 * ftmp; vwpp = 2.0 * maxvw / 480.0; maxvdim = maxvw - ceil(vwpp); vlx = (bbox[0][0] + maxvw) / vwpp; vby = 100.0 + (bbox[1][0] + maxvw) / vwpp; vfz = 580.0 - (bbox[2][1] + maxvw) / vwpp; vdx = (bbox[0][1] - bbox[0][0]) / vwpp; vdy = (bbox[1][1] - bbox[1][0]) / vwpp; vdz = (bbox[2][1] - bbox[2][0]) / vwpp; minleft = bbox[0][0] - 5.0; maxright = bbox[0][1] + 5.0; minbot = bbox[1][0] - 5.0; maxtop = bbox[1][1] + 5.0; minback = bbox[2][0] - 5.0; maxfront = bbox[2][1] + 5.0; }getxyz(px, py, pz)float *px, *py, *pz; { int button; float mx, my, fx, fy; int checkreg(); setvwpv(); create_temporary_segment(); set_primitive_attributes( &PRIMATTS); set_charprecision(STRING); draw_labels(); draw_cursors(*px, *py, *pz); set_echo(LOCATOR, 1, 1); for (;;) { do await_any_button_get_locator_2(20000000,1,&button,&mx,&my); while(button == 0); if (button == 3) break; map_ndc_to_world_2( mx, my, &fx, &fy); switch (checkreg(fx, fy, button, px, py, pz)) { case 0: break; case 1: draw_front(*px, *py); break; case 2: draw_top(*pz); break; case 3: menu_select(); break; } } set_echo(LOCATOR, 1, 0); close_temporary_segment(); }setvwpv() { set_view_reference_point(0.0, 0.0, 0.0); set_view_plane_normal(0.0, 0.0, -1.0); set_view_plane_distance(0.0); set_projection(PARALLEL, 0.0, 0.0, 1.0); set_view_up_3(0.0, 1.0, 0.0); set_window(0.0, 1023.0, 0.0, 767.0); set_view_depth( 0.0, 1.0); set_window_clipping(FALSE); set_viewport_3(0.0, 1., 0.0, .75, 0.0, 1.); }draw_labels() { int i; move_abs_3(50.0, 680.0, 0.5); line_rel_2(0.0, -75.0); line_rel_2(75.0, 0.0); move_abs_2(45.0, 670.0); line_rel_2(5.0, 10.0); line_rel_2(5.0, -10.0); move_abs_2(115.0, 610.0); line_rel_2(10.0, -5.0); line_rel_2(-10.0, -5.0); move_abs_2(130.0, 612.0); text("x"); move_abs_2(48.0, 695.0); text("y"); move_abs_2(220.0, 605.0); text("Front View"); move_abs_2(0.0, 100.0); line_rel_2(480.0, 0.0); line_rel_2(0.0, 480.0); line_rel_2(-480.0, 0.0); line_rel_2(0.0, -480.0); for (i = 0; i <= 20; i++) { move_abs_2((float) 24 * i, 100.0); line_rel_2(0.0, i % 2 ? -5.0 : -10.0); } for (i = 0; i <= 20; i++) { move_abs_2(480.0, ((float) 24 * i) + 100.0); line_rel_2(i % 2 ? 5.0 : 10.0, 0.0); } move_abs_2(593.0, 605.0); line_rel_2(0.0, 75.0); line_rel_2(75.0, 0.0); move_abs_2(588.0, 615.0); line_rel_2(5.0, -10.0); line_rel_2(5.0, 10.0); move_abs_2(658.0, 685.0); line_rel_2(10.0, -5.0); line_rel_2(-10.0, -5.0); move_abs_2(673.0, 687.0); text("x"); move_abs_2(591.0, 600.0); text("z"); move_abs_2(763.0, 605.0); text("Top View"); move_abs_2(543.0, 100.0); line_rel_2(480.0, 0.0); line_rel_2(0.0, 480.0); line_rel_2(-480.0, 0.0); line_rel_2(0.0, -480.0); for (i = 0; i <= 20; i++) { move_abs_2(543.0, ((float) 24 * i) + 100.0); line_rel_2(i % 2 ? -5.0 : -10.0, 0.0); } }draw_cursors(x, y, z)float x, y, z; { draw_front(x, y); draw_top(z); }draw_front(x, y)float x, y; { static float vx = 240.0, vy = 340.0; set_line_index(0); move_abs_3(vx, 101.0, 0.5); line_rel_2(0.0, 478.0); move_abs_2(1.0, vy); line_rel_2(478.0, 0.0); set_line_index(1); move_abs_2(vlx, vby); line_rel_2(vdx, 0.0); line_rel_2(0.0, vdy); line_rel_2(-vdx, 0.0); line_rel_2(0.0, -vdy); vx = (x + maxvw) / vwpp; vy = 100.0 + (y + maxvw) / vwpp; move_abs_2(vx, 101.0); line_rel_2(0.0, 478.0); move_abs_2(1.0, vy); line_rel_2(478.0, 0.0); }draw_top(z)float z; { static float vz = 340.0; set_line_index(0); move_abs_3(544.0, vz, 0.5); line_rel_2(478.0, 0.0); set_line_index(1); move_abs_2(vlx + 543.0, vfz); line_rel_2(vdx, 0.0); line_rel_2(0.0, vdz); line_rel_2(-vdx, 0.0); line_rel_2(0.0, -vdz); vz = 580.0 - (z + maxvw) / vwpp; move_abs_2(544.0, vz); line_rel_2(478.0, 0.0); }int checkreg(vx, vy, butnum, px, py, pz)float vx, vy, *px, *py, *pz;int butnum; { float f; int insideobj(); if ((vx >= 0.0) && (vx <= 480.0) && (vy >= 100.0) && (vy <= 580.0)) { if (butnum == 1) { f = vx * vwpp - maxvw; f = f <= maxvdim ? f : maxvdim; f = f >= -maxvdim ? f : -maxvdim; if (insideobj(f, *py, *pz)) return(0); *px = f; return(1); } else { f = (vy - 100.0) * vwpp - maxvw; f = f <= maxvdim ? f : maxvdim; f = f >= -maxvdim ? f : -maxvdim; if (insideobj(*px, f, *pz)) return(0); *py = f; return(1); } } else if ((vx >= 543.0)&&(vx <= 1023.0)&&(vy >= 100.0)&&(vy <= 580.0)) { if (butnum == 2) { f = (580.0 - vy) * vwpp - maxvw; f = f <= maxvdim ? f : maxvdim; f = f >= -maxvdim ? f : -maxvdim; if (insideobj(*px, *py, f)) return(0); *pz = f; return(2); } else return(0); } else return(3); }int insideobj(x, y, z)float x, y, z; { if ((x < minleft) || (x > maxright)) return(0); if ((y < minbot) || (y > maxtop)) return(0); if ((z < minback) || (z > maxfront)) return(0); return(1); }build_menu(){ int i, j; create_retained_segment( 2); set_primitive_attributes( &PRIMATTS); move_abs_3( 100.,90.,0.0); set_text_index( 1); set_font( 1); set_charsize( 4.,3.); move_abs_2( 10., 70.); set_pick_id( 1); text("Edges"); move_abs_2( 210., 70.); set_pick_id( 2); text("Fast Shade"); move_abs_2( 410., 70.); set_pick_id( 3); text("Gouraud"); move_abs_2( 610., 70.); set_pick_id( 4); text("Phong diffuse"); move_abs_2( 810., 70.); set_pick_id( 5); text("Phong specular"); move_abs_2( 10., 40.); set_pick_id( 6); text("Grey"); move_abs_2( 210., 40.); set_pick_id( 7); text("Red"); move_abs_2( 410., 40.); set_pick_id( 8); text("Green"); move_abs_2( 610., 40.); set_pick_id( 9); text("Blue"); move_abs_2( 810., 40.); set_pick_id(10); text("Yellow"); close_retained_segment(); set_segment_detectability( 2, 1); set_segment_visibility( 2, FALSE);}menu_select(){ int done, segnam, pickid, butnum; int hue; set_segment_visibility( 2, TRUE); done = FALSE; while ( !done) { await_pick( 100000000, 1, &segnam, &pickid); /* pick menu item */ if (segnam == 0) { done = TRUE; } else if (segnam == 2) { if (pickid < 6) renderstyle = pickid -1; else if (pickid < 11) renderhue = pickid -6; } } if (renderhue == 0) define_color_indices( our_surface,0,255,red,grn,blu); else define_color_indices( our_surface,0,255,dred,dgrn,dblu); /* ambient,diffuse,specular,flood,bump,hue,style */ hue = renderhue; switch (renderstyle) { case 1: set_shading_parameters( .01, .96, .0, 0., 7.,hue,0); break; case 2: set_shading_parameters( .01, .96, .0, 0., 7.,hue,1); break; case 3: set_shading_parameters( .01, .95, .0, 0., 7.,hue,2); break; case 4: set_shading_parameters( .05, .50, .40, 0., 7.,hue,2); break; default: break; } set_segment_visibility( 2, FALSE);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -