SketchUp / sketchup-stl

A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export.
http://extensions.sketchup.com/content/sketchup-stl
MIT License
248 stars 68 forks source link

Binary preview is solid black in macOS (but ASCII is ok) #163

Closed jsejcksn closed 7 years ago

jsejcksn commented 7 years ago

Here are some screenshots from the file preview pane:

ASCII

Binary

thomthom commented 7 years ago

The STL file only carry information about triangles. No materials or shading. I can't think of anything the exporter can do. This seem to be to be a Quick View issue.

(btw, attaching sample STL files would help when reporting issues.)

thomthom commented 7 years ago

Do this happen to binary STL files from SU only? Did you compare against binary files from other sources? (If so can you provide example files of what work and what doesn't?)

jsejcksn commented 7 years ago

Hi @thomthom:

I have attached the relevant files (the same ones in #162). I only have Fusion 360 and SketchUp installed.

stl-f-export-test.zip

jimfoltz commented 7 years ago

I wonder if the preview app is looking for a color in the "unused" bytes of the binary stl format?

jimfoltz commented 7 years ago

See issue #25 about color in stl files.

thomthom commented 7 years ago

The unused bytes are just reserved. the specs doesn't specify any color data. In any case, that uint16 "attribute-size` is written as 0 in the SketchUp exporter. Like all other exporters I've seen.

I'm downloading the STL now and will inspect it. This was one from SU, right? Have you seen an binary STL that didn't display as black?

Btw, what version of OSX are you using?

thomthom commented 7 years ago

I see now - the ZIP had examples from SU and Fusion. And the Fusion binary files doesn't display as black?

jsejcksn commented 7 years ago

The STLs exported from Fusion 360 display with the same style/color as the ASCII one exported from SketchUp (not solid black). I'm using macOS 10.12.2.

jimfoltz commented 7 years ago

The fusion binaries include a COLOR string in the header, where the SketchUp binaries do not. Maybe that's all it is.

irb(main):056:0* File.read("f-fusion360-zup-bin.stl", 80) 
=> "STLB ATF 2.0.0.9000 COLOR=\xA0\xA0\xA0\xFF   

irb(main):050:0* File.read("f-fusion360-yup-bin.stl", 80)
=> "STLB ATF 2.0.0.9000 COLOR=\xC2\xA0\xC2\xA0\xC2\xA0\xC3\xBF
jimfoltz commented 7 years ago

@jsejcksn Here is a SketchUp binary stl with a COLOR string in the header - can you try it in Quick View?

sketchup-bin-Z.zip

jsejcksn commented 7 years ago

Still looks the same:

1 2

But—the default orientation looks good. 👍

jimfoltz commented 7 years ago

One more please? Untitled.zip

jimfoltz commented 7 years ago

@jsejcksn I didn't change the orientation.

jsejcksn commented 7 years ago

Same 🤷‍♂️

default zoom

thomthom commented 7 years ago

Given that STL doesn't have any official color data I'm closing this as Won't Fix. The issue lies in the OS-X preview functionality.

jsejcksn commented 7 years ago

@jimfoltz Did you see this? https://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL Perhaps it has something to do with it.

thomthom commented 7 years ago

Hm... Using the comment section for unofficial data is one thing. But using the attribute byte count is troublesome. Those two bytes indicate the size of additional data. But they should not contain data themselves.

After these follows a 2-byte ("short") unsigned integer that is the "attribute byte count" – in the standard format, this should be zero because most software does not understand anything else.

By the specs the STL parsers should be reading the attribute byte count and skip past it unless they know what it represent.

jsejcksn commented 7 years ago

Ok. I'm definitely in favor of upholding standards.

jimfoltz commented 7 years ago

Is the STL preview a built-in, or a plugin for Quick Look?

jsejcksn commented 7 years ago

Built-in

thomthom commented 7 years ago

Finding reports of various issues with the STL preview in OS X: http://forums.autodesk.com/t5/design-validate-document/360-stl-export-and-mac-os-quick-look-is-blank/td-p/6264439

It appears that the STL viewer in El Capitan doesn't have full support for binary STL format.

thomthom commented 7 years ago

https://discussions.apple.com/thread/5593219?tstart=0 This thread indicate that third party applications can conflict.

thomthom commented 7 years ago

I had a look on a fairly fresh mac with 10.11.6;

screen shot 2016-12-20 at 14 33 10

The Fusion binary STL files didn't display at all. SketchUp binary STL files displayed as black. ASCII files worked fine.

jimfoltz commented 7 years ago

It would be nice to provide better support for the Mac binary preview. I unfortunately don't have one so I can't be of much help unless someone can come up with what exact format the preview app is looking for.

thomthom commented 7 years ago

If we got hold of an STL file in binary format that displayed correctly we could look at possible amendments to the exporter.

jimfoltz commented 7 years ago

@driven says[1] the "cube.stl" from here[2] looks normal in the Mac preview. It is a binary stl with nothing but spaces in the header.

  1. http://forums.sketchup.com/t/binary-stl-previews-on-mac/36184

  2. http://people.sc.fsu.edu/~jburkardt/data/stlb/stlb.html

driven commented 7 years ago

Found a few others that have more header content, in the Meshlab Sample's download... Here knot_max_simplified.STL and conrod.stl both display correctly...

john

jimfoltz commented 7 years ago

I wonder if Fusion 360 adds it's own plugin over-ride to the quick look viewer.

driven commented 7 years ago

AutoCad would never block other apps from reading it's content, would they...

john

driven commented 7 years ago

@jimfoltz, I converted both failing binary files using assimp, the Fusion one then displayed correctly but the SU one was still black...

so I then did a diff on the assimp versions and the SU > assimp has facet normal nan nan nan throughout, where the fusion > assimp always shows values facet normal 0 0 1 etc...

I think it shows that Assimp can't read any of the face normals and the I suspect 'quicklook' has the same issue...

EDIT: if I convert f-sketchup-ascii.stl to binary with Assimp, it shows correctly and has correct facet normals...

john

jimfoltz commented 7 years ago

I don't remember why the normals are not being included in the binary export - maybe it just never came up. Here is a binary stl exported from SketchUp with correct normals. How does it look?

2016-12-21.zip

driven commented 7 years ago

theticket

that works...

jimfoltz commented 7 years ago

Yay. Thank you for your invaluable insight and effort.

thomthom commented 7 years ago

Ah! I never noticed we wrote out 0,0,0 for the normals... Nice catch!

image

Thanks for being persistent and sticking with this one.

jimfoltz commented 7 years ago

OT: I just googled that editor - binary templates look like an incredibly useful feature.

thomthom commented 7 years ago

Yup - very nice editor. The templates is worth the cost by itself. There was a binary STL template available in their repository. I made some changes to it so that it could read the special header Fushion creates (extract version info and color info).