def run(): channel = grpc.insecure_channel('localhost:50051') stub = GRPC.FPSimulationStub(channel) started = False i = 0 for y in range(16): color = Proto.Color(r=0, g=0, b=0, a=255) req = Proto.LedSetColorRequest(objLabel="DigitastLed00" + str(y), color=color) stub.led_setColor(req) while True: for button in stub.getButtonStates(Proto.Empty()): if button.objLabel == "StartBtn": started = True elif button.objLabel == "StopBtn": started = False if started: color = Proto.Color(r=255, g=0, b=0, a=255) req = Proto.LedSetColorRequest(objLabel="DigitastLed00" + str(i), color=color) stub.led_setColor(req) i = i + 1 i = i % 16 sleep(1)
def led_setColor(self, request, context): try: obj = FreeCAD.ActiveDocument.getObjectsByLabel(request.objLabel)[0] obj.Proxy.setColor(obj, request.color) except IndexError: FreeCAD.Console.PrintError( "Object not found with label " + request.objLabel + "\n") return Proto.Empty()
def movePotentiometerToValue(self, request, context): try: obj = FreeCAD.ActiveDocument.getObjectsByLabel(request.objLabel)[0] _commandedValues[obj.Name] = request.value except IndexError: FreeCAD.Console.PrintError( "Object not found with label " + request.objLabel + "\n") return Proto.Empty()
def display_clearDisplay(self, request, context): try: obj = FreeCAD.ActiveDocument.getObjectsByLabel(request.objLabel)[0] obj.Proxy.clearDisplay(obj, color = None) except IndexError: FreeCAD.Console.PrintError( "Object not found with label " + request.objLabel + "\n") return Proto.Empty()
def display_drawRectangle(self, request, context): try: obj = FreeCAD.ActiveDocument.getObjectsByLabel(request.objLabel)[0] obj.Proxy.drawRectangle(obj, request.data) except IndexError: FreeCAD.Console.PrintError( "Object not found with label " + request.objLabel + "\n") return Proto.Empty()
def run(): channel = grpc.insecure_channel('localhost:50051') stub = GRPC.FPSimulationStub(channel) cursorChanged = False resReq = Proto.DisplayResolutionRequest(objLabel="FPSimDisplay") resolution = stub.display_getResolution(resReq) pixPos1 = Proto.PixelPos(x=resolution.x / 2, y=resolution.y / 2) pixPos2 = Proto.PixelPos(x=resolution.x / 2, y=resolution.y / 2) prevPixPos1 = deepcopy(pixPos1) prevPixPos2 = deepcopy(pixPos2) colRed = 0 colGreen = 0 colBlue = 0 FREQ_MAX_HZ = 30.0 freqRedHz = 0.0 freqGreenHz = 0.0 freqBlueHz = 0.0 ampRedFactor = 1.0 ampGreenFactor = 1.0 ampBlueFactor = 1.0 lastEraserPotiVal = None mode = Modes.DRAW_POINTS LedOnColor = Proto.Color(r=255, g=0, b=0, a=255) LedOffColor = Proto.Color(r=0, g=0, b=0, a=255) req = Proto.LedSetColorRequest(objLabel="Mode1Led", color=LedOnColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode2Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode3Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode4Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode5Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="ColorModLed", color=LedOffColor) stub.led_setColor(req) font = Proto.FontData(path="truetype/ttf-bitstream-vera/VeraIt.ttf", size=40) req = Proto.DisplaySetActiveFontRequest(objLabel="FPSimDisplay", data=font) stub.display_setActiveFont(req) txt = Proto.TextData(pos=Proto.PixelPos(x=10, y=10), color=Proto.Color(r=0, g=255, b=0, a=255), text="Im a draw-toy") req = Proto.DisplayDrawTextRequest(objLabel="FPSimDisplay", data=txt) stub.display_drawText(req) colorAutomationOn = False t = 0.0 while True: for button in stub.getButtonStates(Proto.Empty()): if button.objLabel == "Mode1Btn": if mode != Modes.DRAW_POINTS: req = Proto.LedSetColorRequest(objLabel="Mode1Led", color=LedOnColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode2Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode3Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode4Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode5Led", color=LedOffColor) stub.led_setColor(req) mode = Modes.DRAW_POINTS elif button.objLabel == "Mode2Btn": if mode != Modes.DRAW_CONNECTOR_LINES: req = Proto.LedSetColorRequest(objLabel="Mode1Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode2Led", color=LedOnColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode3Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode4Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode5Led", color=LedOffColor) stub.led_setColor(req) mode = Modes.DRAW_CONNECTOR_LINES elif button.objLabel == "Mode3Btn": if mode != Modes.DRAW_LINES: req = Proto.LedSetColorRequest(objLabel="Mode1Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode2Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode3Led", color=LedOnColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode4Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode5Led", color=LedOffColor) stub.led_setColor(req) mode = Modes.DRAW_LINES elif button.objLabel == "Mode4Btn": if mode != Modes.DRAW_RECTANGLES: req = Proto.LedSetColorRequest(objLabel="Mode1Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode2Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode3Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode4Led", color=LedOnColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode5Led", color=LedOffColor) stub.led_setColor(req) mode = Modes.DRAW_RECTANGLES elif button.objLabel == "Mode5Btn": if mode != Modes.DRAW_RECTANGLES_FULL: req = Proto.LedSetColorRequest(objLabel="Mode1Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode2Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode3Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode4Led", color=LedOffColor) stub.led_setColor(req) req = Proto.LedSetColorRequest(objLabel="Mode5Led", color=LedOnColor) stub.led_setColor(req) mode = Modes.DRAW_RECTANGLES_FULL elif button.objLabel == "ColorAutomationBtn": if button.state == Proto.BUTTON_PRESSED: if colorAutomationOn: colorAutomationOn = False req = Proto.LedSetColorRequest(objLabel="ColorModLed", color=LedOffColor) stub.led_setColor(req) else: colorAutomationOn = True req = Proto.LedSetColorRequest(objLabel="ColorModLed", color=LedOnColor) stub.led_setColor(req) for potentiometer in stub.getPotentiometerValues(Proto.Empty()): if potentiometer.objLabel == "PotRed": colRed = potentiometer.value if potentiometer.objLabel == "PotGreen": colGreen = potentiometer.value if potentiometer.objLabel == "PotBlue": colBlue = potentiometer.value if potentiometer.objLabel == "PotEraser": if not lastEraserPotiVal: lastEraserPotiVal = potentiometer.value if lastEraserPotiVal != potentiometer.value: pixColor = Proto.Color(r=0, g=0, b=0, a=255) X1 = int(float(lastEraserPotiVal * resolution.x) / 1024.0) X2 = int( float(potentiometer.value * resolution.x) / 1024.0) P1 = Proto.PixelPos(x=X1, y=0) P2 = Proto.PixelPos(x=X2, y=resolution.y - 1) rectData = Proto.RectangleData(p1=P1, p2=P2, pixelColor=pixColor, filled=True) req = Proto.DisplayDrawRectangleRequest( objLabel="FPSimDisplay", data=rectData) stub.display_drawRectangle(req) lastEraserPotiVal = potentiometer.value if potentiometer.objLabel == "PotFreqRed": freqRedHz = (potentiometer.value * FREQ_MAX_HZ) / 64.0 if potentiometer.objLabel == "PotFreqGreen": freqGreenHz = (potentiometer.value * FREQ_MAX_HZ) / 64.0 if potentiometer.objLabel == "PotFreqBlue": freqBlueHz = (potentiometer.value * FREQ_MAX_HZ) / 64.0 for encoderIncrementsAnswer in stub.getEncoderIncrements( Proto.Empty()): if encoderIncrementsAnswer.objLabel == "X_POS1": pixPos1.x += encoderIncrementsAnswer.increments if pixPos1.x < 0: pixPos1.x = 0 if pixPos1.x > resolution.x - 1: pixPos1.x = resolution.x - 1 cursorChanged = True elif encoderIncrementsAnswer.objLabel == "Y_POS1": pixPos1.y += encoderIncrementsAnswer.increments if pixPos1.y < 0: pixPos1.y = 0 if pixPos1.y > resolution.y - 1: pixPos1.y = resolution.y - 1 cursorChanged = True elif encoderIncrementsAnswer.objLabel == "X_POS2": pixPos2.x += encoderIncrementsAnswer.increments if pixPos2.x < 0: pixPos2.x = 0 if pixPos2.x > resolution.x - 1: pixPos2.x = resolution.x - 1 cursorChanged = True elif encoderIncrementsAnswer.objLabel == "Y_POS2": pixPos2.y += encoderIncrementsAnswer.increments if pixPos2.y < 0: pixPos2.y = 0 if pixPos2.y > resolution.y - 1: pixPos2.y = resolution.y - 1 cursorChanged = True for touchValueAnswer in stub.getTouchValue(Proto.Empty()): if touchValueAnswer.objLabel == "TouchSurface": if touchValueAnswer.pos.x != -1: pixPos1.x = touchValueAnswer.pos.x pixPos1.y = touchValueAnswer.pos.y cursorChanged = True if touchValueAnswer.objLabel == "AmpRedTouch": if touchValueAnswer.pos.x != -1: ampRedFactor = touchValueAnswer.pos.x / 100.0 if touchValueAnswer.objLabel == "AmpGreenTouch": if touchValueAnswer.pos.x != -1: ampGreenFactor = touchValueAnswer.pos.x / 100.0 if touchValueAnswer.objLabel == "AmpBlueTouch": if touchValueAnswer.pos.x != -1: ampBlueFactor = touchValueAnswer.pos.x / 100.0 if colorAutomationOn: if freqRedHz > 0.0 and ampRedFactor > 0.0: req = Proto.MovePotentiometerRequest( objLabel="PotRed", value=int(( (math.sin(t * freqRedHz) * ampRedFactor + 1.0) / 2.0) * 255.0)) stub.movePotentiometerToValue(req) if freqGreenHz > 0.0 and ampGreenFactor > 0.0: req = Proto.MovePotentiometerRequest( objLabel="PotGreen", value=int( ((math.sin(t * freqGreenHz) * ampGreenFactor + 1.0) / 2.0) * 255.0)) stub.movePotentiometerToValue(req) if freqBlueHz > 0.0 and ampBlueFactor > 0.0: req = Proto.MovePotentiometerRequest( objLabel="PotBlue", value=int( ((math.sin(t * freqBlueHz) * ampBlueFactor + 1.0) / 2.0) * 255.0)) stub.movePotentiometerToValue(req) if cursorChanged: cursorChanged = False pixColor = Proto.Color(r=colRed, g=colGreen, b=colBlue, a=255) if mode == Modes.DRAW_POINTS: pix1 = Proto.PixelData_ARGB32(pos=pixPos1, color=pixColor) pix2 = Proto.PixelData_ARGB32(pos=pixPos2, color=pixColor) pixDataList = Proto.PixelDataList_ARGB32() pixDataList.pixelData.extend([pix1]) pixDataList.pixelData.extend([pix2]) req = Proto.DisplaySetPixelsRequest_ARGB32( objLabel="FPSimDisplay", pixelDataList=pixDataList) stub.display_setPixels_ARGB32(req) elif mode == Modes.DRAW_CONNECTOR_LINES: lineData1 = Proto.LineData(p1=prevPixPos1, p2=pixPos1, pixelColor=pixColor) lineData2 = Proto.LineData(p1=prevPixPos2, p2=pixPos2, pixelColor=pixColor) req = Proto.DisplayDrawLineRequest(objLabel="FPSimDisplay", data=lineData1) stub.display_drawLine(req) req = Proto.DisplayDrawLineRequest(objLabel="FPSimDisplay", data=lineData2) stub.display_drawLine(req) elif mode == Modes.DRAW_LINES: lineData = Proto.LineData(p1=pixPos1, p2=pixPos2, pixelColor=pixColor) req = Proto.DisplayDrawLineRequest(objLabel="FPSimDisplay", data=lineData) stub.display_drawLine(req) elif mode == Modes.DRAW_RECTANGLES: rectData = Proto.RectangleData(p1=pixPos1, p2=pixPos2, pixelColor=pixColor, filled=False) req = Proto.DisplayDrawRectangleRequest( objLabel="FPSimDisplay", data=rectData) stub.display_drawRectangle(req) elif mode == Modes.DRAW_RECTANGLES_FULL: rectData = Proto.RectangleData(p1=pixPos1, p2=pixPos2, pixelColor=pixColor, filled=True) req = Proto.DisplayDrawRectangleRequest( objLabel="FPSimDisplay", data=rectData) stub.display_drawRectangle(req) prevPixPos1 = deepcopy(pixPos1) prevPixPos2 = deepcopy(pixPos2) if colorAutomationOn: t = t + 0.01 sleep(0.01)