def convertPosToLocalSpace(self, pos):
     assert type(
         pos) is list, "'%s' is not a list. Coordinate expected" % pos
     returnList = []
     for f in pos:
         returnList.append(distance.returnMayaSpaceFromWorldSpace(f))
     return returnList
    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 convertPosToLocalSpace(self,pos):
     assert type(pos) is list,"'%s' is not a list. Coordinate expected"%pos
     returnList = []
     for f in pos:
         returnList.append( distance.returnMayaSpaceFromWorldSpace(f))
     return returnList
    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!
        #>>> Make our stuff ======================================================
        if self._createMode and self._posBuffer: # Make our stuff
            #Delete the old stuff
            if self._createModeBuffer and not self.b_dragStoreMode:
                for o in self._createModeBuffer:
                    try:mc.delete(o)
                    except:pass
                self._createModeBuffer = []

            for i,pos in enumerate(self._posBuffer):
                for i2,v in enumerate(self.v_clampValues):
                    if v is not None:
                        pos[i2] = v
                #Let's make our stuff
                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]

                    mc.move (pos[0],pos[1],pos[2], nameBuffer)

                    for m in self.d_meshPos.keys():#check each mesh dictionary to see where it came from
                        if pos in self.d_meshPos[m]:#if the mesh has a match
                            attributes.storeInfo(nameBuffer,'cgmHitTarget',m)

                            #attributes.doSetAttr(nameBuffer,'localScaleX',(self.f_meshArea*.025))
                            #attributes.doSetAttr(nameBuffer,'localScaleY',(self.f_meshArea*.025))