![]() |
|
|
|
#1
|
|||
|
|||
|
hi,
thanks for ur replay. I get an error when I ran the example. this is the error: HTML Code:
sensor = vizproximity.Sensor( vizproximity.CircleArea(1),source=male) AttributeError: 'module' object has no attribute 'CircleArea' |
|
#2
|
|||
|
|||
|
Make sure you have the latest version of Vizard. Go to Help > Check for Updates.
|
|
#3
|
|||
|
|||
|
I installed the latest version and the code worked. thanx a lot.
I added this code in a multi user environment with 1 server and 2 clients. I added the code in client 1 specifically, but once I run the client, the message appears immediately even though the avatar is very far from the target (radiation source). could you help me with this issue plz? this is my code for client: Code:
import viz
import viznet
import vizinfo
import vizinput
import viztask
import vizact
import vizshape
import vizproximity
viz.go()
viz.MainView.setPosition([0,0.1,0])
#viz.MainView.lookAt([50,25,-40])
#Enable full screen anti-aliasing (FSAA) to smooth edges
viz.setMultiSample(4)
#Increase the Field of View
viz.MainWindow.fov(60)
piazza = viz.add('piazza.osgb')
#maze = viz.add('tankmaze.wrl')
sphere = vizshape.addSphere(radius=0.2)
sphere.setPosition(0,0,20)
sphere.color(viz.RED)
text = viz.addText('radiation source',parent=sphere)
text.setPosition([-0.3,0.3,0])
text.setScale([0.2]*3)
text.color(viz.RED)
text.visible(viz.ON)
text_2D = viz.addText('radiation source area', viz.SCREEN )
text_2D.setPosition(0,0,20)
text_2D.color(viz.RED)
objects = {}
#
UPDATE = viznet.id('update')
CLIENT_DISCONNECTED = viznet.id('client_disconnected')
CHAT = viznet.id('chat')
#
SERVER_NAME=vizinput.input('Enter Server Name')
while not viznet.client.connect(SERVER_NAME,port_in=14951,port_out=14950):
if vizinput.ask('Could not connect to ' + SERVER_NAME + ' would you like to try another?'):
SERVER_NAME=vizinput.input('Enter Server Name')
else:
viz.quit()
break
#
objectList = ['duck.wrl','logo.wrl','vcc_male.cfg','vcc_female.cfg']
obj_choice=vizinput.choose('Connected. Select your character',objectList)
#
#Create proximity manager
manager = vizproximity.Manager()
#manager.setDebug(viz.ON)
#Add main viewpoint as proximity target
target = vizproximity.Target(viz.MainView)
manager.addTarget(target)
#Create sensor using male avatar
#avatar = viz.addAvatar('vcc_male2.cfg',pos=[0,0,4],euler=[180,0,0])
#avatar.state(1)
#sensor = vizproximity.Sphere(0.2, centre=(0,0,0))
sensor = vizproximity.Sensor( vizproximity.CircleArea(0.1),source=sphere)
manager.addSensor(sensor)
#Change state of avatar to talking when the user gets near
def EnterProximity(e):
text_2D.visible(viz.ON)
#text.visible(viz.ON)
#Change state of avatar to idle when the user moves away
def ExitProximity(e):
#text.visible(viz.OFF)
text_2D.visible(viz.OFF)
manager.onEnter(sensor,EnterProximity)
manager.onExit(sensor,ExitProximity)
#vizact.onkeydown('d',manager.setDebug,viz.TOGGLE)
#
def sendUpdate():
ori= viz.MainView.getEuler()
pos = viz.MainView.getPosition()
viznet.client.sendAll(UPDATE,client=viz.getComputerName(),object=obj_choice,pos=pos,ori=ori)
vizact.ontimer(.05,sendUpdate)
#
def update(e):
if e.client != viz.getComputerName():
try:
objects[e.client].setPosition(e.pos)
objects[e.client].setEuler(e.ori)
except KeyError:
objects[e.client] = viz.add(objectList[e.object],scale=[2,2,2],pos=e.pos,euler=e.ori)
objects[e.client].tooltip = e.client
viz.callback(UPDATE,update)
#
def client_disconnected(e):
objects[e.client].remove()
del objects[e.client]
viz.callback(CLIENT_DISCONNECTED,client_disconnected)
def onStopServer(e):
print 'Disconnected from server'
viz.quit()
viz.callback(viznet.SERVER_DISCONNECT_EVENT,onStopServer)
#
import viztip
tth = viztip.ToolTip()
tth.start()
tth.setDelay(0)
#
def updateChat(msg):
text.message('\n'.join(text.getMessage().split('\n')[1:])+'\n'+msg)
text = viz.addText('\n\n\n\n',viz.SCREEN)
text.alignment(viz.TEXT_LEFT_BOTTOM)
text.fontSize(25)
text.setPosition(.05,.08)
input = viz.addText('> _',viz.SCREEN)
input.fontSize(25)
input.setPosition(.032,.05)
input.visible(0)
def onChat(e):
updateChat(e.client+': '+e.chat)
viz.callback(CHAT,onChat)
talking = False
def onKeyDown(key):
global talking
if key == 'y' and not talking:
talking = True
input.message('> _')
input.visible(1)
elif key == viz.KEY_ESCAPE and talking:
talking = False
input.visible(0)
return True
elif talking and key == viz.KEY_RETURN:
talking = False
viznet.client.sendAll(CHAT,client=viz.getComputerName(),chat=input.getMessage()[2:-1])
input.visible(0)
elif talking and key == viz.KEY_BACKSPACE:
if len(input.getMessage()) > 3:
input.message(input.getMessage()[:-2]+'_')
elif len(key) > 1:
return False
elif talking and 32 <= ord(key) <= 126:
input.message(input.getMessage()[:-1]+key+'_')
viz.callback(viz.KEYDOWN_EVENT,onKeyDown,priority=-6)
thanx in advance. |
|
#4
|
|||
|
|||
|
Hi Maya,
You forgot to make text_2D invisible in the beginning. Code:
text_2D = viz.addText('radiation source area', viz.SCREEN )
text_2D.setPosition(0,0,20)
text_2D.color(viz.RED)
text_2D.visible(viz.OFF)
|
|
#5
|
|||
|
|||
|
hi Frank,
thanx for ur replay. I made the text invisible. but now, the text does not appear at all. am I doing something wrong? one more thing. in my case I have 1 server and 2 clients, I want the text to appear when either one of the clients (or both) reaches the radiation source. where do u recommend me to add the code for the proximity? (in client1 and client2 or in server side)? |
|
#6
|
|||
|
|||
|
I have tested it with the code below. With that code, the text appears when you enter the small red sphere.
Code:
import viz
import vizshape
import vizproximity
viz.go()
viz.MainView.setPosition([0,0.1,0])
#Enable full screen anti-aliasing (FSAA) to smooth edges
viz.setMultiSample(4)
#Increase the Field of View
viz.MainWindow.fov(60)
piazza = viz.add('piazza.osgb')
sphere = vizshape.addSphere(radius=0.2)
sphere.setPosition(0,0,20)
sphere.color(viz.RED)
text = viz.addText('radiation source',parent=sphere)
text.setPosition([-0.3,0.3,0])
text.setScale([0.2]*3)
text.color(viz.RED)
text.visible(viz.ON)
text_2D = viz.addText('radiation source area', viz.SCREEN )
text_2D.setPosition(0,0,20)
text_2D.color(viz.RED)
text_2D.visible(viz.OFF)
#Create proximity manager
manager = vizproximity.Manager()
#Add main viewpoint as proximity target
target = vizproximity.Target(viz.MainView)
manager.addTarget(target)
sensor = vizproximity.Sensor( vizproximity.CircleArea(0.1),source=sphere)
manager.addSensor(sensor)
#Change state of avatar to talking when the user gets near
def EnterProximity(e):
text_2D.visible(viz.ON)
print 'enter'
#Change state of avatar to idle when the user moves away
def ExitProximity(e):
text_2D.visible(viz.OFF)
print 'exit'
manager.onEnter(sensor,EnterProximity)
manager.onExit(sensor,ExitProximity)
Either way, the code for making the text appear should be on every party that needs to see the text. For instance, if the text has to appear on both clients, then both clients need the code for making the text visible and invisible. It seems like the condition to show the text on any machine is that one of the two clients enter the radiation zone. So in that case, you should at least communicate the state of each client to each other, and make the text appear when either one of them enters the radiation zone. You could also let each client communicate to the server whether they are in the radiation zone or not, and if one of the clients enters the radiation zone, you could let the server send a message to both clients. In both cases, you need a proximity sensor in client1 and client2, and somehow communicate the states of those clients to each other (either directly, or through the server). Please elaborate more on your specific problem if these suggestions do not point you in the desired direction. |
|
#7
|
|||
|
|||
|
uh ok it's working. but, I wanted the text to appear when the avatar is for example 1 meter far from the radiation source. this is supposed to be a dangerous area and the message is there to warn the avatar that this is an affected area with radiation. so, he is not supposed to get close from it.
I am using only 1 PC, it is the server and the 2 clients at the same time. there is a communication between server and clients: 1. server can communicate with client 1 2.server can communicate with client 2, but client 2 can't read its messages 3. client1 can communicate with client 2, but client 2 does not c the messages 4. client 1 communicate with 2, but again client2 can't c the messages client 2 can't c messages sent by server and client 1. mmm.. I think I will just add the text code in both clients and i want them to communicate with each other. thanx |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| input from a text file | dig | Vizard | 5 | 10-20-2013 02:20 AM |
| Lighting relevant text? | knightgba | Vizard | 1 | 01-26-2011 06:33 PM |
| Informationboxes with text | snoopy78 | Vizard | 3 | 07-16-2009 11:23 AM |
| Vizard tech tip: Text to Speech | Jeff | Vizard | 1 | 01-15-2009 10:39 PM |
| 3d Text with Transparent Borders | vjosh | Vizard | 3 | 12-01-2004 11:50 AM |