primera subida
This commit is contained in:
145
lib/postprocessor.py
Normal file
145
lib/postprocessor.py
Normal file
@@ -0,0 +1,145 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#-------------------------------------------------
|
||||
#-- textures on nurbs use cases heights and sun intensity
|
||||
#--
|
||||
#-- microelly 2016 v 0.3
|
||||
#--
|
||||
#-- GNU Lesser General Public License (LGPL)
|
||||
#-------------------------------------------------
|
||||
|
||||
|
||||
import cv2
|
||||
import geodat
|
||||
import matplotlib
|
||||
import numpy as np
|
||||
|
||||
|
||||
def getHeights(nsf,size=16):
|
||||
|
||||
kzs=np.zeros((size+1,size+1),np.float)
|
||||
for ux in range(size+1):
|
||||
for vx in range(size+1):
|
||||
u=float(ux)/size
|
||||
v=float(vx)/size
|
||||
p=nsf.value(u,v)
|
||||
kzs[ux,vx]=p[2]
|
||||
|
||||
kzs *= 0.001
|
||||
|
||||
# normalize
|
||||
kzs -= kzs.min()
|
||||
kzs /= kzs.max()
|
||||
return kzs
|
||||
|
||||
|
||||
def getNormals(nsf,size=16,direction=FreeCAD.Vector(0,0,1)):
|
||||
|
||||
direction.normalize()
|
||||
kzs=np.zeros((size+1,size+1),np.float)
|
||||
for ux in range(size+1):
|
||||
for vx in range(size+1):
|
||||
u=float(ux)/size
|
||||
v=float(vx)/size
|
||||
(t1,t2)=nsf.tangent(u,v)
|
||||
# calculate the normale vector and how it differs from the given direction
|
||||
n=t1.cross(t2)
|
||||
kzs[ux,vx]=n*direction
|
||||
|
||||
return kzs
|
||||
|
||||
|
||||
|
||||
|
||||
def createColor(kzs,size,mode):
|
||||
|
||||
img= np.zeros((size+1,size+1,3), np.uint8)
|
||||
|
||||
#cmap = matplotlib.cm.get_cmap('jet')
|
||||
cmap = matplotlib.cm.get_cmap('hsv')
|
||||
|
||||
for ux in range(size+1):
|
||||
for vx in range(size+1):
|
||||
t=kzs[ux,vx]
|
||||
if mode == 1: (r,g,b,a)=cmap(1-t)
|
||||
if mode == 2: (r,g,b,a)=cmap(t)
|
||||
img[size-vx,size-ux]=(255*r,255*g,255*b)
|
||||
|
||||
# cv2.applyColorMap(img, cv2.COLORMAP_JET)
|
||||
|
||||
#cv2.imshow('image2',img)
|
||||
fn='/tmp/image_'+str(size)+'.png'
|
||||
cv2.imwrite(fn,img)
|
||||
return fn
|
||||
|
||||
#
|
||||
#
|
||||
# use cases
|
||||
#
|
||||
|
||||
|
||||
nurbs=App.ActiveDocument.QuadNurbs
|
||||
|
||||
|
||||
|
||||
'''
|
||||
#
|
||||
# Height map
|
||||
#
|
||||
|
||||
s=64
|
||||
|
||||
kzs=getHeights(nurbs.Shape.Surface,s)
|
||||
fn=createColor(kzs,s,1)
|
||||
geodat.geodat_lib.addImageTexture(nurbs,fn,scale=(1,1))
|
||||
Gui.updateGui()
|
||||
App.ActiveDocument.Text.LabelText=["Height Map","colormap HSV",str(s**2) + " color pixel"]
|
||||
|
||||
'''
|
||||
|
||||
'''
|
||||
#
|
||||
# Height map animation with different solutions
|
||||
#
|
||||
|
||||
for s in 4,8,16,32:
|
||||
kzs=getHeights(nurbs.Shape.Surface,s)
|
||||
fn=createColor(kzs,s,1)
|
||||
geodat.geodat_lib.addImageTexture(nurbs,fn,scale=(1,1))
|
||||
Gui.updateGui()
|
||||
time.sleep(0.4)
|
||||
'''
|
||||
|
||||
'''
|
||||
#
|
||||
# How planar is the surface - normals
|
||||
#
|
||||
|
||||
for s in 4,8,16,32,64,256:
|
||||
kzs=getNormals(nurbs.Shape.Surface,s)
|
||||
fn=createColor(kzs,s,1)
|
||||
geodat.geodat_lib.addImageTexture(nurbs,fn,scale=(1,1))
|
||||
Gui.updateGui()
|
||||
time.sleep(0.4)
|
||||
'''
|
||||
|
||||
|
||||
#
|
||||
# flow of the sun from 6:00 a.m. until 6:00 p.m. in 60 steps
|
||||
#
|
||||
|
||||
for h in range(61):
|
||||
s=100
|
||||
|
||||
App.ActiveDocument.Text.LabelText=["Simulation Sun, Day time",str(6.0+ 12.0*h/60),str(s**2) + " color pixel"]
|
||||
|
||||
kzs=getNormals(nurbs.Shape.Surface,s,FreeCAD.Vector(np.cos(np.pi*h/60),-np.sin(np.pi*h/60),np.sin(np.pi*h/60)))
|
||||
|
||||
# evening sun
|
||||
# kzs=getNormals(nurbs.Shape.Surface,s,FreeCAD.Vector(-1,-1,2-0.05*h))
|
||||
|
||||
# from axo view
|
||||
# kzs=getNormals(nurbs.Shape.Surface,s,FreeCAD.Vector(1,-1,2-0.05*h))
|
||||
|
||||
fn=createColor(kzs,s,2)
|
||||
geodat.geodat_lib.addImageTexture(nurbs,fn,scale=(1,1))
|
||||
Gui.updateGui()
|
||||
Reference in New Issue
Block a user