1#!/usr/local/bin/python3.8 2from gi.repository import v_sim 3 4# Load the file to test. 5data = v_sim.Data.new() 6data.addFile("collisions.ascii",0,None) 7v_sim.visuBasicLoad_dataFromFile(data,None,0) 8 9# Parse the configuration files. 10v_sim.visuBasicParse_configFiles() 11# Or read only the given file. 12#v_sim.visuConfigFileLoad(v_sim.CONFIGFILE_RESOURCE, "v_sim.res", data) 13 14 15# Example of loop to create a dictionnary associating element name and radius. 16rad = {} 17dataIter = data.iterNew() 18data.iterStart(dataIter) 19while (dataIter.element != None): 20 rad[dataIter.element.name] = v_sim.renderingAtomicGet_radius(dataIter.element) 21 data.iterNextElement(dataIter) 22 23# Example with integrated iterators (still an issue with the 24# stop criterion) 25try: 26 for it in data.__iterElements__(): 27 rad[it.element.name] = v_sim.renderingAtomicGet_radius(it.element) 28except RuntimeError: 29 pass 30print "Radii: ", rad 31 32 33def hit(c1, r1, c2, r2): 34 return ( (c1.x-c2.x)**2 + (c1.y-c2.y)**2 + (c1.z-c2.z)**2 < (r1 + r2) ** 2 ) 35 36# With Python iterators. 37##collision = [] 38##try: 39## for it1 in data: 40## try: 41## for it2 in data: 42## if it1.node.number > it2.node.number and \ 43## hit(data.getNodeCoordinates(it1.node), rad[it1.element.name], \ 44## data.getNodeCoordinates(it2.node), rad[it2.element.name]): 45## collision.append((int(it1.node.number), int(it2.node.number))) 46## except RuntimeError: 47## pass 48##except RuntimeError: 49## pass 50##print collision 51 52# With V_Sim iterators 53print "Collision detection..." 54collision = [] 55it1 = data.iterNew() 56it2 = data.iterNew() 57data.iterStart(it1) 58while (it1.node is not None): 59 data.iterStart(it2) 60 while (it2.node is not None): 61 if it1.node.number > it2.node.number and \ 62 hit(data.getNodeCoordinates(it1.node), rad[it1.element.name], \ 63 data.getNodeCoordinates(it2.node), rad[it2.element.name]): 64 collision.append((int(it1.node.number), int(it2.node.number))) 65 data.iterNext(it2) 66 data.iterNext(it1) 67print collision 68