def updatePos(self,debugReport = False): """ Get updated position data via shooting rays """ if not self.meshList: return guiFactory.warning("No mesh objects have been added to '%s'"%(self.name)) buffer = screenToWorld(int(self.x),int(self.y))#get world point and vector! self.clickPos = buffer[0] #Our world space click point self.clickVector = buffer[1] #Camera vector self.posBuffer = []#Clear our pos buffer for m in self.meshList:#Get positions per mesh piece #First get the distance to try to check checkDistance = self.getDistanceToCheck(m) #print ("Checking distance of %s"%checkDistance) if m not in self.meshPosDict.keys(): self.meshPosDict[m] = [] self.meshUVDict[m] = [] if mc.objExists(m): if self.mode == 'surface': buffer = findMeshIntersection(m, self.clickPos , self.clickVector, checkDistance) if buffer is not None: hit = self.convertPosToLocalSpace( buffer['hit'] ) self.posBuffer.append(hit) self.startPoint = self.convertPosToLocalSpace( buffer['source'] ) self.meshPosDict[m].append(hit) self.meshUVDict[m].append(buffer['uv']) else: buffer = findMeshIntersections(m, self.clickPos , self.clickVector , checkDistance) if buffer: conversionBuffer = [] #Need to convert to local space for hit in buffer['hits']: conversionBuffer.append(self.convertPosToLocalSpace( hit )) self.posBuffer.extend(conversionBuffer) self.startPoint = self.convertPosToLocalSpace( buffer['source'] ) self.meshPosDict[m].extend(conversionBuffer) self.meshUVDict[m].extend(buffer['uvs']) if not self.posBuffer: if debugReport:guiFactory.warning('No hits detected!') return if self.clampSetting and self.clampSetting < len(self.posBuffer): if debugReport:guiFactory.warning("Position buffer was clamped. Check settings if this was not desired.") self.posBuffer = distance.returnPositionDataDistanceSortedList(self.startPoint,self.posBuffer) self.posBuffer = self.posBuffer[:self.clampSetting] if self.mode == 'midPoint': self.posBuffer = [distance.returnAveragePointPosition(self.posBuffer)] if self.posBuffer: #Check for closest and just for hits if self.closestOnly and self.mode != 'intersections': buffer = distance.returnClosestPoint(self.startPoint,self.posBuffer) self.posBuffer = [buffer] else:pass #guiFactory.warning("No hits detected") if self.createMode and self.posBuffer: # Make our stuff #Delete the old stuff if self.createModeBuffer and not self.dragStoreMode: for o in self.createModeBuffer: try:mc.delete(o) except:pass self.createModeBuffer = [] for pos in self.posBuffer: if len(pos) == 3: baseScale = distance.returnMayaSpaceFromWorldSpace(10) if self.createMode == 'joint': nameBuffer = mc.joint(radius = 1) #attributes.doSetAttr(nameBuffer,'radius',1) mc.select(cl=True) else: nameBuffer = mc.spaceLocator()[0] for m in self.meshPosDict.keys():#check each mesh dictionary to see where it came from if pos in self.meshPosDict[m]:#if the mesh has a match attributes.storeInfo(nameBuffer,'cgmHitTarget',m) attributes.doSetAttr(nameBuffer,'localScaleX',(self.meshArea*.025)) attributes.doSetAttr(nameBuffer,'localScaleY',(self.meshArea*.025)) attributes.doSetAttr(nameBuffer,'localScaleZ',(self.meshArea*.025)) break mc.move (pos[0],pos[1],pos[2], nameBuffer) self.createModeBuffer.append(nameBuffer) else: if debugReport:guiFactory.warning("'%s' isn't a valid position"%pos) if self.dragStoreMode: if self.posBuffer: for p in self.posBuffer: self.returnList.append(p) mc.refresh()#Update maya to make it interactive!
def updatePos(self, debugReport=False): """ Get updated position data via shooting rays """ if not self.meshList: return guiFactory.warning( "No mesh objects have been added to '%s'" % (self.name)) buffer = screenToWorld(int(self.x), int(self.y)) #get world point and vector! self.clickPos = buffer[0] #Our world space click point self.clickVector = buffer[1] #Camera vector self.posBuffer = [] #Clear our pos buffer for m in self.meshList: #Get positions per mesh piece #First get the distance to try to check checkDistance = self.getDistanceToCheck(m) #print ("Checking distance of %s"%checkDistance) if m not in self.meshPosDict.keys(): self.meshPosDict[m] = [] self.meshUVDict[m] = [] if mc.objExists(m): if self.mode == 'surface': buffer = findMeshIntersection(m, self.clickPos, self.clickVector, checkDistance) if buffer is not None: hit = self.convertPosToLocalSpace(buffer['hit']) self.posBuffer.append(hit) self.startPoint = self.convertPosToLocalSpace( buffer['source']) self.meshPosDict[m].append(hit) self.meshUVDict[m].append(buffer['uv']) else: buffer = findMeshIntersections(m, self.clickPos, self.clickVector, checkDistance) if buffer: conversionBuffer = [] #Need to convert to local space for hit in buffer['hits']: conversionBuffer.append( self.convertPosToLocalSpace(hit)) self.posBuffer.extend(conversionBuffer) self.startPoint = self.convertPosToLocalSpace( buffer['source']) self.meshPosDict[m].extend(conversionBuffer) self.meshUVDict[m].extend(buffer['uvs']) if not self.posBuffer: if debugReport: guiFactory.warning('No hits detected!') return if self.clampSetting and self.clampSetting < len(self.posBuffer): if debugReport: guiFactory.warning( "Position buffer was clamped. Check settings if this was not desired." ) self.posBuffer = distance.returnPositionDataDistanceSortedList( self.startPoint, self.posBuffer) self.posBuffer = self.posBuffer[:self.clampSetting] if self.mode == 'midPoint': self.posBuffer = [ distance.returnAveragePointPosition(self.posBuffer) ] if self.posBuffer: #Check for closest and just for hits if self.closestOnly and self.mode != 'intersections': buffer = distance.returnClosestPoint(self.startPoint, self.posBuffer) self.posBuffer = [buffer] else: pass #guiFactory.warning("No hits detected") if self.createMode and self.posBuffer: # Make our stuff #Delete the old stuff if self.createModeBuffer and not self.dragStoreMode: for o in self.createModeBuffer: try: mc.delete(o) except: pass self.createModeBuffer = [] for pos in self.posBuffer: if len(pos) == 3: baseScale = distance.returnMayaSpaceFromWorldSpace(10) if self.createMode == 'joint': nameBuffer = mc.joint(radius=1) #attributes.doSetAttr(nameBuffer,'radius',1) mc.select(cl=True) else: nameBuffer = mc.spaceLocator()[0] for m in self.meshPosDict.keys( ): #check each mesh dictionary to see where it came from if pos in self.meshPosDict[ m]: #if the mesh has a match attributes.storeInfo(nameBuffer, 'cgmHitTarget', m) attributes.doSetAttr(nameBuffer, 'localScaleX', (self.meshArea * .025)) attributes.doSetAttr(nameBuffer, 'localScaleY', (self.meshArea * .025)) attributes.doSetAttr(nameBuffer, 'localScaleZ', (self.meshArea * .025)) break mc.move(pos[0], pos[1], pos[2], nameBuffer) self.createModeBuffer.append(nameBuffer) else: if debugReport: guiFactory.warning("'%s' isn't a valid position" % pos) if self.dragStoreMode: if self.posBuffer: for p in self.posBuffer: self.returnList.append(p) mc.refresh() #Update maya to make it interactive!
conversionBuffer.append(self.convertPosToLocalSpace( hit )) self._posBuffer.extend(conversionBuffer) self.d_meshPos[m].extend(conversionBuffer) self.d_meshUV[m].extend(buffer['uvs']) self.startPoint = self.convertPosToLocalSpace( buffer['source'] ) if not self._posBuffer: log.warning('No hits detected!') return if self.b_clampSetting and self.b_clampSetting < len(self._posBuffer): log.warning("Position buffer was clamped. Check settings if this was not desired.") self._posBuffer = distance.returnPositionDataDistanceSortedList(self.startPoint,self._posBuffer) self._posBuffer = self._posBuffer[:self.b_clampSetting] if self.mode == 'midPoint': self._posBuffer = [distance.returnAveragePointPosition(self._posBuffer)] if self._posBuffer: #Check for closest and just for hits if self.b_closestOnly and self.mode != 'intersections': buffer = distance.returnClosestPoint(self.startPoint,self._posBuffer) self._posBuffer = [buffer] else:pass #log.warning("No hits detected") #>>> Make our stuff ====================================================== if self._createMode and self._posBuffer: # Make our stuff #Delete the old stuff