⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nurbs.py

📁 reduced python source for embedded apps
💻 PY
字号:
#! /usr/bin/env python# Rotate a 3D surface created using NURBS.## Press left mouse button to toggle surface trimming.# Press ESC to quit.## See the GL manual for an explanation of NURBS.from gl import *from GL import *from DEVICE import *TRUE = 1FALSE = 0ORDER = 4idmat = [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]surfknots = [-1, -1, -1, -1, 1, 1, 1, 1]def make_ctlpoints():	c = []	#	ci = []	ci.append((-2.5,  -3.7,  1.0))	ci.append((-1.5,  -3.7,  3.0))	ci.append((1.5,  -3.7, -2.5))	ci.append((2.5,  -3.7,  -0.75))	c.append(ci)	#	ci = []	ci.append((-2.5,  -2.0,  3.0))	ci.append((-1.5,  -2.0,  4.0))	ci.append((1.5,  -2.0,  -3.0))	ci.append((2.5,  -2.0,  0.0))	c.append(ci)	#	ci = []	ci.append((-2.5, 2.0,  1.0))	ci.append((-1.5, 2.0,  0.0))	ci.append((1.5,  2.0,  -1.0))	ci.append((2.5,  2.0,  2.0))	c.append(ci)	#	ci = []	ci.append((-2.5,  2.7,  1.25))	ci.append((-1.5,  2.7,  0.1))	ci.append((1.5,  2.7,  -0.6))	ci.append((2.5,  2.7,  0.2))	c.append(ci)	#	return cctlpoints = make_ctlpoints()trimknots = [0., 0., 0.,  1., 1.,  2., 2.,  3., 3.,   4., 4., 4.]def make_trimpoints():	c = []	c.append((1.0, 0.0, 1.0))	c.append((1.0, 1.0, 1.0))	c.append((0.0, 2.0, 2.0))	c.append((-1.0, 1.0, 1.0))	c.append((-1.0, 0.0, 1.0))	c.append((-1.0, -1.0, 1.0))	c.append((0.0, -2.0, 2.0))	c.append((1.0, -1.0, 1.0) )	c.append((1.0, 0.0, 1.0))	return ctrimpoints = make_trimpoints()def main():	init_windows()	setup_queue()	make_lights()	init_view()	#	set_scene()	setnurbsproperty( N_ERRORCHECKING, 1.0 )	setnurbsproperty( N_PIXEL_TOLERANCE, 50.0 )	trim_flag = 0	draw_trim_surface(trim_flag)	#	while 1:		while qtest():			dev, val = qread()			if dev == ESCKEY:				return			elif dev == WINQUIT:				dglclose(-1)	# this for DGL only				return			elif dev == REDRAW:				reshapeviewport()				set_scene()				draw_trim_surface(trim_flag)			elif dev == LEFTMOUSE:				if val:					trim_flag = (not trim_flag)		set_scene()		draw_trim_surface(trim_flag)def init_windows():	foreground()	#prefposition(0, 500, 0, 500)	wid = winopen('nurbs')	wintitle('NURBS Surface')	doublebuffer()	RGBmode()	gconfig()	lsetdepth(0x000, 0x7fffff)	zbuffer( TRUE )def setup_queue():	qdevice(ESCKEY)	qdevice(REDRAW)	qdevice(RIGHTMOUSE)	qdevice(WINQUIT)	qdevice(LEFTMOUSE) #trimmingdef init_view():	mmode(MPROJECTION)	ortho( -4., 4., -4., 4., -4., 4. )	#	mmode(MVIEWING)	loadmatrix(idmat)	#	lmbind(MATERIAL, 1)def set_scene():	lmbind(MATERIAL, 0)	RGBcolor(150,150,150)	lmbind(MATERIAL, 1)	clear()	zclear()	#	rotate( 100, 'y' )	rotate( 100, 'z' )def draw_trim_surface(trim_flag):	bgnsurface()	nurbssurface(surfknots, surfknots, ctlpoints, ORDER, ORDER, N_XYZ)	if trim_flag:		bgntrim()		nurbscurve(trimknots, trimpoints, ORDER-1, N_STW)		endtrim()	endsurface()	swapbuffers()def make_lights():	lmdef(DEFLMODEL,1,[])	lmdef(DEFLIGHT,1,[])	#	# define material #1	#	a = []	a = a + [EMISSION, 0.0, 0.0, 0.0]	a = a + [AMBIENT,  0.1, 0.1, 0.1]	a = a + [DIFFUSE,  0.6, 0.3, 0.3]	a = a + [SPECULAR,  0.0, 0.6, 0.0]	a = a + [SHININESS, 2.0]	a = a + [LMNULL]	lmdef(DEFMATERIAL, 1, a)	#	# turn on lighting	#	lmbind(LIGHT0, 1)	lmbind(LMODEL, 1)main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -