And here is a python schell script to make step 4 (create the lookuptable) automatic.
apartment = FindSource("sample_apartment.obj") vtklevel = apartment.GetClientSideObject() lut = GetColorTransferFunction('MaterialIds') arr = vtklevel.GetOutput().GetFieldData().GetAbstractArray(0) lut.InterpretValuesAsCategories = 1 ll = [] for x in range(0, arr.GetNumberOfTuples()): ll.append(str(x)) ll.append(arr.GetValue(x)) David E DeMarle Kitware, Inc. Principal Engineer 21 Corporate Drive Clifton Park, NY 12065-8662 Phone: 518-881-4909 On Tue, May 22, 2018 at 1:51 PM, David E DeMarle <dave.dema...@kitware.com> wrote: > On Tue, May 22, 2018 at 12:34 PM, David E DeMarle < > dave.dema...@kitware.com> wrote: > >> >> On Tue, May 22, 2018 at 10:34 AM, Jonathan Borduas < >> jonathan.bord...@caboma.com> wrote: >> >>> Hi David, >>> >>> I was able to complete all the steps. As you probably know, the step >>> four was tedious. >>> >>> However I couldn’t get the result I wanted since I couldn’t assign the >>> right textures to the right areas. Is there a mechanism to assign the >>> texture just like we assign materials ? >>> I guess this is what you mean by “multi-texture isn’t implemented yet”. >>> I could probably extract all objects using a connectivity filter and then >>> manually assign the textures, but again it is a tedious process for complex >>> objects. >>> >>> >> Better to do it in the code. We read in all of the texture coordinates >> when we read the .obj and all of the texture files when we read the .mtl -> >> we just aren't using the right set of texture coordinates in all cases yet. >> That is most of what I mean by multitexture. >> >> Is there a roadmap as to when the multi-texture could be implemented ? >>> >> >> I'm hoping for 5.6 in a couple of months time. Although this is important >> it may very well slip because of other priorities. >> >> > > In the meantime, this python programmable filter is a workaround. > > pdi = self.GetInput() > > pdo = self.GetOutput() > > pdo.ShallowCopy(pdi) > > > arraynames = [] > > arrays = {} > > for a in range(0,pdi.GetPointData().GetNumberOfArrays()): > > array = pdi.GetPointData().GetArray(a) > > if array.GetNumberOfComponents() != 2: > > continue > > arrname = array.GetName() > > pdo.GetPointData().RemoveArray(arrname) > > arraynames.append(arrname) > > arrays[arrname] = array > > > tcoords = vtk.vtkFloatArray() > > tcoords.SetName("TCoords") > > tcoords.SetNumberOfComponents(2) > > pdo.GetPointData().SetTCoords(tcoords) > > # todo numpy this to make it 100x faster > > for p in range(0, pdi.GetNumberOfPoints()): > > tcoord = [0,0] > > for arrname in arrays: > > candidate = arrays[arrname].GetTuple2(p) > > if candidate[0] == -1 and candidate[1] == -1: > > continue > > tcoord = candidate > > tcoords.InsertNextTuple2(tcoord[0],tcoord[1]) > > > > > >> It would be great to have readers that can load >>> texture/Geometry/Materials files such as .obj (.mtl and .png), .fbx and >>> .dwg. >>> >> >> Agreed. >> >> >>> Best regards, >>> >>> >>> >>> Jonathan Borduas >>> >>> >>> >>> *From:* David E DeMarle <dave.dema...@kitware.com> >>> *Sent:* Friday, May 18, 2018 10:58 AM >>> *To:* Jonathan Borduas <jonathan.bord...@caboma.com> >>> *Cc:* paraview@public.kitware.com >>> *Subject:* Re: [Paraview] OSPRay textures and materials mapping >>> >>> >>> >>> Hi Jonathan. >>> >>> >>> >>> Yes you can do that. >>> >>> >>> >>> 1) File->Load OSPRay Materials, switch the file type from "OSPRay >>> Material Files (*.json)" to "Wavefront Material FIles (*.mtl)". That will >>> let you load all of the materials and textures. They should all show up in >>> the Material list. >>> >>> >>> >>> 2) The OSPRay Material selection (on Display section of Properties Tab >>> advanced) will have all of the individual materials listed in it + a few >>> others including "Value Indexed" which is all the way at the bottom. Choose >>> that it means "use the categorical color lookup table to decide what >>> material to use for each block and or polygon" >>> >>> >>> >>> 3) Now change the scalar array to color by to "Material Id", a cell >>> aligned array which has the material index to use for each cell. >>> >>> >>> >>> 4) Make up a categorical lookup table. >>> >>> open spreadsheet view, switch to Field Data, look at the Material >>> Names. >>> >>> open the color map editor for the "Material Id", click on Interpret >>> Values As Categories and the color will change from bluewhitered to >>> extremely YELLOW. >>> >>> add annotations, value 0 should be the name of the first entry in the >>> Material Names array. >>> >>> >>> >>> Notes: >>> >>> * I have the trivial script somewhere that I used for the SC17 demo that >>> makes up the lookup table for you. I'll try and dig that up. >>> >>> * in general it isn't a 1:1 match between mtl and ospray, in particular >>> multitextures are not yet implemented >>> >>> * along those lines, the mtl parser I whipped up >>> $PVSRC/VTK/Rendering/OSPRay/vtkMaterialLibrary::InternalParseMTL >>> recognizes a "type" extension outside of mtl that lets you bring in >>> ospray's nice materials instead of the default OBJMaterial. Glass and Metal >>> are particularly nice. >>> >>> >>> >>> At some point I'll get around to making this all automatic. Patches are >>> welcome in the meantime. >>> >>> >>> >>> good luck >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> David E DeMarle >>> Kitware, Inc. >>> Principal Engineer >>> 21 Corporate Drive >>> <https://maps.google.com/?q=21+Corporate+Drive+%0D%0AClifton+Park,+NY+12065&entry=gmail&source=g> >>> Clifton Park, NY 12065-8662 >>> Phone: 518-881-4909 >>> >>> >>> >>> On Fri, May 18, 2018 at 10:25 AM, Jonathan Borduas < >>> jonathan.bord...@caboma.com> wrote: >>> >>> Hi, >>> >>> I tried rendering an .obj file running OSPRay that was exported from >>> PCon Planner Version 7.7 Patch 1. The original file is a .dwg >>> >>> >>> >>> I used the PathThracer mode. However, attached to the .obj there is an >>> .mtl file containing 50+ materials and 50+ texture (.png) files. >>> >>> I didn’t find an automated way to map all polydata of the .obj with >>> their respective material and texture file and rendering them using OSPRay. >>> >>> It seems that I have to assign the material and texture to each polydata >>> one-by-one. >>> >>> >>> >>> Is there a feature that will automatically map the respective textures >>> and materials ? >>> >>> Here is the link to download the original .dwg file. >>> https://www.easterngraphics.com/pcon/en/wp-content/uploads/2 >>> 015/03/sample_apartment.dwg >>> >>> You will need to export it to .obj using PCon Planner Version 7.7 Patch >>> 1 with the File/Export/Geometry menu. >>> I couldn’t share the .obj file since the size is 60mb+ >>> >>> >>> >>> Thank you >>> >>> >>> >>> Jonathan Borduas >>> >>> >>> >>> >>> _______________________________________________ >>> Powered by www.kitware.com >>> >>> Visit other Kitware open-source projects at >>> http://www.kitware.com/opensource/opensource.html >>> >>> Please keep messages on-topic and check the ParaView Wiki at: >>> http://paraview.org/Wiki/ParaView >>> >>> Search the list archives at: http://markmail.org/search/?q=ParaView >>> >>> Follow this link to subscribe/unsubscribe: >>> https://public.kitware.com/mailman/listinfo/paraview >>> >>> >>> >> >> >
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Search the list archives at: http://markmail.org/search/?q=ParaView Follow this link to subscribe/unsubscribe: https://public.kitware.com/mailman/listinfo/paraview