You are not logged in.

#1 2017-02-04 00:10:21

jamesarm97
Member
Registered: 2017-02-02
Posts: 69

Please add rotate image or slicer option

The LCD screen the D7 and some other printer use is in portrait mode 1440x2560 and if used as is the images and screens on the webpage are squished because it is trying to display the images in s landscape mode. We can fix this by rotating (and flipping) the screen in the config.txt to make it landscape but then the slicer still seems to be thinking the screen is portrait and the images that you slice are rotated 90 and clipped. I cannot make the two sync up, even tried to change the x / y resolution to flip those and it will make it print right but we are back to portrait mode.

Offline

#2 2017-02-04 07:33:13

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

Change resolution to 2560x1440 and rotate it with help of config.txt see if it helps or not.

Offline

#3 2017-06-29 19:20:50

juliendelnatte
Member
Registered: 2017-06-07
Posts: 84

Re: Please add rotate image or slicer option

Same problem here and when I set : display_rotate=3 in config.txt, nanodlp crash (the popup image with raspberry pi logo on a white popup stay on screen and every projector action didn't work.)

Offline

#4 2017-06-29 20:31:28

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

Is it possible to get debug file? You should nt see raspberry pi logo at all.

Offline

#5 2017-06-29 21:52:14

juliendelnatte
Member
Registered: 2017-06-07
Posts: 84

Re: Please add rotate image or slicer option

here is the debug info if I insert display_rotate=3 in the config :

SIGABRT: abort
PC=0xb6cbbf70 m=0 sigcode=4294967290

goroutine 0 [idle]:

goroutine 1 [IO wait, 1 minutes]:
net.runtime_pollWait(0xb5a89120, 0x72, 0x0)
    /usr/local/go/src/runtime/netpoll.go:164 +0x44
net.(*pollDesc).wait(0x10ae6e3c, 0x72, 0x695a00, 0x10dd4d90)
    /usr/local/go/src/net/fd_poll_runtime.go:75 +0x28
net.(*pollDesc).waitRead(0x10ae6e3c, 0xffffffff, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:80 +0x24
net.(*netFD).accept(0x10ae6e00, 0x0, 0x697280, 0x10dd4d90)
    /usr/local/go/src/net/fd_unix.go:430 +0x15c
net.(*TCPListener).accept(0x10a0f230, 0x24c430, 0x10a3fcbc, 0x62694)
    /usr/local/go/src/net/tcpsock_posix.go:136 +0x20
net.(*TCPListener).Accept(0x10a0f230, 0x4b7890, 0x10cf3500, 0x699f50, 0x10ae1aa0)
    /usr/local/go/src/net/tcpsock.go:228 +0x3c
net/http.(*Server).Serve(0x10a0ab00, 0x699708, 0x10a0f230, 0x0, 0x0)
    /usr/local/go/src/net/http/server.go:2643 +0x1ac
github.com/tylerb/graceful.(*Server).Serve(0x10a4ecb0, 0x699708, 0x10a0f230, 0x699708, 0x10a0f230)
    /home/pi/go/src/github.com/tylerb/graceful/graceful.go:307 +0x2c4
github.com/tylerb/graceful.(*Server).ListenAndServe(0x10a4ecb0, 0x4a8b50, 0x1f)
    /home/pi/go/src/github.com/tylerb/graceful/graceful.go:147 +0x78
github.com/labstack/echo.(*Echo).StartServer(0x10aa6420, 0x10a0ab00, 0x1, 0x10ac53aa)
    /home/pi/go/src/github.com/labstack/echo/echo.go:554 +0x35c
main.webInit()
    /home/pi/printer/app/routes.go:155 +0x3038
main.main()
    /home/pi/printer/app/server.go:79 +0x248

goroutine 17 [syscall, 1 minutes, locked to thread]:
runtime.goexit()
    /usr/local/go/src/runtime/asm_arm.s:1017 +0x4

goroutine 5 [syscall, 1 minutes]:
os/signal.signal_recv(0x0)
    /usr/local/go/src/runtime/sigqueue.go:116 +0x154
os/signal.loop()
    /usr/local/go/src/os/signal/signal_unix.go:22 +0x14
created by os/signal.init.1
    /usr/local/go/src/os/signal/signal_unix.go:28 +0x30

goroutine 6 [chan receive, 1 minutes]:
projects/printer/app/move.(*speedStruct).calc(0x6bf2d8, 0x10a103c0)
    /home/pi/go/src/projects/printer/app/move/speed.go:92 +0x2c
created by projects/printer/app/move.init.1
    /home/pi/go/src/projects/printer/app/move/speed.go:29 +0x38

goroutine 49 [IO wait, 1 minutes]:
net.runtime_pollWait(0xb5a88ec8, 0x72, 0x10e07000)
    /usr/local/go/src/runtime/netpoll.go:164 +0x44
net.(*pollDesc).wait(0x10ddf73c, 0x72, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_poll_runtime.go:75 +0x28
net.(*pollDesc).waitRead(0x10ddf73c, 0x10e07000, 0x1000)
    /usr/local/go/src/net/fd_poll_runtime.go:80 +0x24
net.(*netFD).Read(0x10ddf700, 0x10e07000, 0x1000, 0x1000, 0x0, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_unix.go:250 +0x148
net.(*conn).Read(0x10d0bc58, 0x10e07000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:181 +0x58
net/http.(*connReader).Read(0x10e007e0, 0x10e07000, 0x1000, 0x1000, 0x248f74, 0x10ddf700, 0xd0e76c9a)
    /usr/local/go/src/net/http/server.go:754 +0x168
bufio.(*Reader).fill(0x10e00810)
    /usr/local/go/src/bufio/bufio.go:97 +0xf4
bufio.(*Reader).Peek(0x10e00810, 0x4, 0xe, 0x15cf57f0, 0x6bf198, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:129 +0x58
net/http.(*conn).serve(0x10cf3380, 0x699ed8, 0x10df1180)
    /usr/local/go/src/net/http/server.go:1850 +0x7a0
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2668 +0x234

goroutine 8 [chan receive]:
main.(*StatusStruct).FindIP(0x6bf4c0)
    /home/pi/printer/app/db.go:563 +0x60
created by main.(*StatusStruct).Load
    /home/pi/printer/app/db.go:543 +0x50

goroutine 29 [sleep, 1 minutes]:
time.Sleep(0xe11d6000, 0x37)
    /usr/local/go/src/runtime/time.go:59 +0x10c
main.updateControlPanel()
    /home/pi/printer/app/server.go:203 +0x54
created by main.afterIP
    /home/pi/printer/app/server.go:103 +0xe8

goroutine 46 [IO wait, 1 minutes]:
net.runtime_pollWait(0xb5a88fb8, 0x72, 0x10deb000)
    /usr/local/go/src/runtime/netpoll.go:164 +0x44
net.(*pollDesc).wait(0x10dde8fc, 0x72, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_poll_runtime.go:75 +0x28
net.(*pollDesc).waitRead(0x10dde8fc, 0x10deb000, 0x1000)
    /usr/local/go/src/net/fd_poll_runtime.go:80 +0x24
net.(*netFD).Read(0x10dde8c0, 0x10deb000, 0x1000, 0x1000, 0x0, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_unix.go:250 +0x148
net.(*conn).Read(0x10d0bb68, 0x10deb000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:181 +0x58
net/http.(*connReader).Read(0x10daf2f0, 0x10deb000, 0x1000, 0x1000, 0x248f74, 0x10dde8c0, 0xd0e76c5d)
    /usr/local/go/src/net/http/server.go:754 +0x168
bufio.(*Reader).fill(0x10daf320)
    /usr/local/go/src/bufio/bufio.go:97 +0xf4
bufio.(*Reader).Peek(0x10daf320, 0x4, 0xe, 0x215470b0, 0x6bf198, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:129 +0x58
net/http.(*conn).serve(0x10cf3140, 0x699ed8, 0x10dd17c0)
    /usr/local/go/src/net/http/server.go:1850 +0x7a0
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2668 +0x234

goroutine 48 [IO wait]:
net.runtime_pollWait(0xb5a88f40, 0x72, 0x10e03000)
    /usr/local/go/src/runtime/netpoll.go:164 +0x44
net.(*pollDesc).wait(0x10ddf63c, 0x72, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_poll_runtime.go:75 +0x28
net.(*pollDesc).waitRead(0x10ddf63c, 0x10e03000, 0x1000)
    /usr/local/go/src/net/fd_poll_runtime.go:80 +0x24
net.(*netFD).Read(0x10ddf600, 0x10e03000, 0x1000, 0x1000, 0x0, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_unix.go:250 +0x148
net.(*conn).Read(0x10d0bc48, 0x10e03000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:181 +0x58
net/http.(*connReader).Read(0x10e00780, 0x10e03000, 0x1000, 0x1000, 0x248f74, 0x10ddf600, 0xd0e76cb4)
    /usr/local/go/src/net/http/server.go:754 +0x168
bufio.(*Reader).fill(0x10e007b0)
    /usr/local/go/src/bufio/bufio.go:97 +0xf4
bufio.(*Reader).Peek(0x10e007b0, 0x4, 0xe, 0x1d316b50, 0x6bf198, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:129 +0x58
net/http.(*conn).serve(0x10cf3320, 0x699ed8, 0x10df10c0)
    /usr/local/go/src/net/http/server.go:1850 +0x7a0
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2668 +0x234

goroutine 26 [chan receive]:
main.wifiStatus()
    /home/pi/printer/app/wireless.go:80 +0xf4
created by main.wifiConnect
    /home/pi/printer/app/wireless.go:23 +0xc4

goroutine 15 [runnable]:
time.Sleep(0x5f5e100, 0x0)
    /usr/local/go/src/runtime/time.go:59 +0x10c
main.(*termStruct).readLine(0x6bee68, 0x8, 0x435800, 0x10a0f2b0)
    /home/pi/printer/app/term.go:48 +0x2b8
main.(*termStruct).Reader(0x6bee68)
    /home/pi/printer/app/term.go:37 +0xa8
created by main.main
    /home/pi/printer/app/server.go:57 +0x134

goroutine 16 [chan receive]:
main.(*monitorStruct).watch(0x6ce510)
    /home/pi/printer/app/slice-monitor.go:46 +0x7c
created by main.main
    /home/pi/printer/app/server.go:58 +0x150

goroutine 19 [chan receive]:
projects/printer/app/hw/monitor.Monitor()
    /home/pi/go/src/projects/printer/app/hw/monitor/monitor_linux.go:33 +0x7c
created by main.main
    /home/pi/printer/app/server.go:64 +0x260

goroutine 27 [IO wait]:
net.runtime_pollWait(0xb5a890a8, 0x72, 0x0)
    /usr/local/go/src/runtime/netpoll.go:164 +0x44
net.(*pollDesc).wait(0x10ae78fc, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:75 +0x28
net.(*pollDesc).waitRead(0x10ae78fc, 0x10a2cadc, 0x400)
    /usr/local/go/src/net/fd_poll_runtime.go:80 +0x24
net.(*netFD).readFrom(0x10ae78c0, 0x10a2cadc, 0x400, 0x400, 0x0, 0x0, 0x0, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_unix.go:277 +0x13c
net.(*UDPConn).readFrom(0x10a0f450, 0x10a2cadc, 0x400, 0x400, 0x4, 0x4, 0x10bd62a4, 0x4)
    /usr/local/go/src/net/udpsock_posix.go:47 +0x38
net.(*UDPConn).ReadFromUDP(0x10a0f450, 0x10a2cadc, 0x400, 0x400, 0x10bd6200, 0xdc, 0x0, 0x0)
    /usr/local/go/src/net/udpsock.go:97 +0x58
projects/printer/app/ssdp.Server(0x10ac5930, 0x2, 0x10aca11d, 0x8)
    /home/pi/go/src/projects/printer/app/ssdp/ssdp.go:57 +0x164
created by main.afterIP
    /home/pi/printer/app/server.go:101 +0x8c

goroutine 22 [select]:
github.com/tylerb/graceful.(*Server).manageConnections(0x10a4ecb0, 0x10ae6f00, 0x10ae6f40, 0x10ae6f80, 0x10ae6fc0, 0x10ae7000, 0x10ae7040)
    /home/pi/go/src/github.com/tylerb/graceful/graceful.go:364 +0x6a8
created by github.com/tylerb/graceful.(*Server).Serve
    /home/pi/go/src/github.com/tylerb/graceful/graceful.go:295 +0x224

goroutine 23 [select, 1 minutes, locked to thread]:
runtime.gopark(0x4b7bcc, 0x0, 0x49b50d, 0x6, 0x18, 0x2)
    /usr/local/go/src/runtime/proc.go:271 +0xfc
runtime.selectgoImpl(0x10addfa0, 0x0, 0xc)
    /usr/local/go/src/runtime/select.go:423 +0x119c
runtime.selectgo(0x10addfa0)
    /usr/local/go/src/runtime/select.go:238 +0x10
runtime.ensureSigM.func1()
    /usr/local/go/src/runtime/signal_unix.go:434 +0x2bc
runtime.goexit()
    /usr/local/go/src/runtime/asm_arm.s:1017 +0x4

goroutine 24 [chan receive, 1 minutes]:
github.com/tylerb/graceful.(*Server).handleInterrupt(0x10a4ecb0, 0x10ae7080, 0x10ae7180, 0x699708, 0x10a0f230)
    /home/pi/go/src/github.com/tylerb/graceful/graceful.go:419 +0x38
created by github.com/tylerb/graceful.(*Server).Serve
    /home/pi/go/src/github.com/tylerb/graceful/graceful.go:303 +0x2a4

goroutine 44 [IO wait, 1 minutes]:
net.runtime_pollWait(0xb5a89030, 0x72, 0x10dc3000)
    /usr/local/go/src/runtime/netpoll.go:164 +0x44
net.(*pollDesc).wait(0x10d8dabc, 0x72, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_poll_runtime.go:75 +0x28
net.(*pollDesc).waitRead(0x10d8dabc, 0x10dc3000, 0x1000)
    /usr/local/go/src/net/fd_poll_runtime.go:80 +0x24
net.(*netFD).Read(0x10d8da80, 0x10dc3000, 0x1000, 0x1000, 0x0, 0x697c58, 0x695a00)
    /usr/local/go/src/net/fd_unix.go:250 +0x148
net.(*conn).Read(0x10d0b9e0, 0x10dc3000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:181 +0x58
net/http.(*connReader).Read(0x10dae7e0, 0x10dc3000, 0x1000, 0x1000, 0x248f74, 0x10d8da80, 0xd0e76c98)
    /usr/local/go/src/net/http/server.go:754 +0x168
bufio.(*Reader).fill(0x10dae810)
    /usr/local/go/src/bufio/bufio.go:97 +0xf4
bufio.(*Reader).Peek(0x10dae810, 0x4, 0xe, 0x20e64978, 0x6bf198, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:129 +0x58
net/http.(*conn).serve(0x10cf2f60, 0x699ed8, 0x10db96a0)
    /usr/local/go/src/net/http/server.go:1850 +0x7a0
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2668 +0x234

trap    0x0
error   0x0
oldmask 0x4000
r0      0x0
r1      0x2ae
r2      0x6
r3      0x0
r4      0xb6dcc094
r5      0xb6f76420
r6      0x0
r7      0x10c
r8      0x1
r9      0xff
r10     0x6bf760
fp      0x0
ip      0xb6f768e0
sp      0xbea8f6f8
lr      0xb6cbbf44
pc      0xb6cbbf70
cpsr    0x20000010
fault   0x0

Offline

#6 2017-06-30 06:04:06

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

Looks like after program get killed. Are you receiving same message on every reboot?

Offline

#7 2017-06-30 19:21:10

juliendelnatte
Member
Registered: 2017-06-07
Posts: 84

Re: Please add rotate image or slicer option

Nop, I checked, I reseted my raspberry pi with a brand new SD Card and I didn't get any error but the screen didn't change anymore after the boot if I set "display_rotate=3" and still get the same problem with the 5"5 2K screen with the new installation.

Offline

#8 2017-06-30 19:35:02

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

Use one of ready made D7 SD card images as they are using same kind of screen.

Offline

#9 2017-07-01 13:16:11

juliendelnatte
Member
Registered: 2017-06-07
Posts: 84

Re: Please add rotate image or slicer option

I tested a D7 SD card image and have exactly the same problem. Like my setup, it works fine when the screen is in portrait mode. But the problem is : the orientation of the screen and so the build plate is in portrait mode. Every printer (fdm, sla,...) are in landscape mode. Here, the setup in portrait mode is a probleme because every STL must be configurate in portrait mode to and not in landscape like every printer to fit in the buildplate. So a image rotation would be greate to get a landscape screen and an easy setep when using meshmixer,...

Offline

#10 2017-07-03 07:44:24

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

It is not a nanodlp side issue, if you remove nanodlp from the RPi, you will still experience the same image issue. Try fix the config.txt without nanodlp whenever you can get correct picture run nanodlp. There is a chance somebody on raspberry pi forum could help you solve the issue, probably could be solved by forcing HDMI mode.

NanoDLP also could handle this issue by supporting image flip/rotation but it would not be ideal as it will cost processing power and I believe if we have this feature, no one will bother fix their HDMI mode settings on raspberry pi.

Offline

#11 2017-07-03 11:10:05

juliendelnatte
Member
Registered: 2017-06-07
Posts: 84

Re: Please add rotate image or slicer option

Hello, the display_rotate=3 work for statup image, startup line code,... everything work but when NanoDLP start, is do not work at this moment. Can you test it on your raspberry pi? I tester on a Pi2, Pi3 and PiZero. Same probleme each.

Thanks

Offline

#12 2017-07-03 17:20:04

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

Have you switched width and height values on nanodlp setup? It could be a reason for crash. I have not tested such cases.
To edit without UI, you can edit db/machine.json and switch width and height values.

Offline

#13 2017-07-05 19:59:59

jamesarm97
Member
Registered: 2017-02-02
Posts: 69

Re: Please add rotate image or slicer option

Also, setting display rotate to 3 undoes the mirror that is the D7 image. It is cosmetic and I have just adjusted all my programs bed sizes to be rotated 90. Shahin, maybe a simple option would be to add an option when importing the STL to the "Center, Object Center or Nothing" option and add Rotate STL. Just do a rotate 90 because that is where most of the issues are.

Offline

#14 2017-07-12 05:26:47

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

James,

Images need to rotated after rendering? For example resolution is 1920*1080 + 90deg rotation.
STL / SVG / SLC get rotated before rendering, and saved to same 1920*1080 canvas.

Or STL/SVG/SLC convert to png file and rotate it, it means we will have 1080*1920 image at the end.

Offline

#15 2017-07-12 13:03:05

jamesarm97
Member
Registered: 2017-02-02
Posts: 69

Re: Please add rotate image or slicer option

I am asking for an option to just automatically rotate the STL by 90 on import. An option like the "Center Object" on the Add STL screen. Many users are use to the landscape bed and when they import an STL that they think is oriented the right way, it is not because the screen in really in portrait mode. I created a modified profile for Simplify3d and changed the bed size to 70 x 120 and I can plate there and export the STLs and know they will import correctly. Just an option that would save having to do that as a pre-step before slicing. Image rotation takes too long, I actually have a script that I used in the beginning that would auto rotate each plate image after they are created but stopped using it and just try and make sure my STL files are the right orientation before importing. It seems like this would be a simple feature since you have the STL rotation if you were modifying a plate and moving the part around.

- James

Shahin wrote:

James,

Images need to rotated after rendering? For example resolution is 1920*1080 + 90deg rotation.
STL / SVG / SLC get rotated before rendering, and saved to same 1920*1080 canvas.

Or STL/SVG/SLC convert to png file and rotate it, it means we will have 1080*1920 image at the end.

Offline

#16 2017-07-12 22:38:34

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

OK, got it simply rotating source file will be enough. I believe machine setup will be better place to add such option than plate add or profile, right?

Offline

#17 2017-07-13 00:12:52

jamesarm97
Member
Registered: 2017-02-02
Posts: 69

Re: Please add rotate image or slicer option

If not too complicated maybe both places. The setup would be if the parts are always rotated wrong, but in my case I come across some that need to be rotated because they are longer than the width of the screen but would print if rotated. This would save a few steps going into another program just to rotate. I think a checkbox would do (Rotate Print 90) on the Add STL screen. That would be done pre-slicing so it would be faster than rotating all the slices.

Offline

#18 2017-07-25 14:13:10

jamesarm97
Member
Registered: 2017-02-02
Posts: 69

Re: Please add rotate image or slicer option

I see you added a rotate option under the Resin profiles, I guess it is a start but it really didn't make sense to put it there (not sure why you would rotate the stl 90 based on a resin profile). It should really be an option on Adding the STL like the Center / None option. Just a checkbox for Rotate 90. Not all STL's have to be rotated (small ones wouldn't), just larger ones that may need to fit the LCD differently, maybe even a smart auto rotate based on STL size and LCD resolution?

Offline

#19 2017-07-26 05:57:15

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

James,

I see it as a workaround for drivers which does not support rotation. Not a generally useful feature. If we add it to plate add page, for users who need it, they need to set it to rotation each time they add a new plate.

Offline

#20 2017-07-26 13:48:48

jamesarm97
Member
Registered: 2017-02-02
Posts: 69

Re: Please add rotate image or slicer option

I kind of see that point, but we just had someone post asking why his image was cut off on the side. His part was 74mm x 68mm and just imported the STL and sliced. He didn't notice that the part imported with the 74mm side oriented to the 70mm length of the lcd. Yes, the plate is always shown as vertical although it is horizontal but on the pi we correct the rotation but the webpage still shows vertical. That is one issue that is confusing and I just tell users to get use to it. The main reason this rotate feature was brought up is not for the general plate rotation to compensate for the pi not rotating the screen, but for when you have different STL files who's dimensions are too large for the screen unless rotated. I end up going into another FDM slicer like S3D and put my STL files on them and position them to fit then export to a new STL then import the STL knowing it will be rotated correctly to fit. Adding a simple rotate STL on import will give users the option to rotate the STL if the part is longer than wide and would fit if rotated. If nanodlp could read the STL size and auto rotate the part to fit the LCD size then that would be even a better option.

Offline

#21 2017-07-27 05:59:39

Shahin
Administrator
Registered: 2016-02-17
Posts: 3,541

Re: Please add rotate image or slicer option

It is not difficult to auto-rotate but I believe it will confusing. Will add error for larger than display plates and also rotate option for plate.

Offline

Board footer

Powered by FluxBB