"""Script Written By Luis Quinones
Script Copywritten by complicitMatter + computationalMatter
www.complicitmatter.com
www.computationalmatter.com
Script Version Wednesday, June 29, 2011"""
import rhinoscriptsyntax as rs
from System.Drawing import Color
def ColorAction(centroid,eval,ave):
index = rs.PointArrayClosestPoint(centroid,eval)
closestTest = centroid[index]
result = ave[index]
#print result
return result
def Main():
strLayer = rs.AddLayer("OffsetMesh",Color.White)
strLayer2 = rs.AddLayer("BaseMesh",Color.White)
strLayer4 = rs.AddLayer("BaseCrvs",Color.White)
strLayer5 = rs.AddLayer("Construction_Curves")
strLayer6 = rs.AddLayer("Profile_Curves")
strip = []
scaleFactor = rs.RealBox("Set The Scale",4,"SCALE DOMINATION")
scaleFactor2 = rs.RealBox("Multiplier_# for color value",1,"DONT DO IT")
offsetFactor = rs.RealBox("OffsetValue for MeshOffset",-5,"OFFSET")
newMeshBase = rs.GetObject("BaseMesh_To_Offset",rs.filter.mesh)
rs.ObjectLayer(newMeshBase,strLayer2)
offsetMesh = rs.MeshOffset(newMeshBase,offsetFactor)
rs.ObjectLayer(offsetMesh,strLayer)
newCrvBase = rs.GetObjects("GetCrvs",rs.filter.curve)
rs.ObjectLayer(newCrvBase,strLayer4)
strObject = rs.GetObject("Select Painted Mesh",rs.filter.mesh)
strLayerAA = rs.AddLayer("PTSTORE")
arrFaces = rs.MeshFaces(strObject,True)
color = rs.MeshVertexColors(strObject)
faceVerts = [0]
centroid = []
ave = []
if arrFaces:
i = 0
count2 = 0
while(i < len(arrFaces)):
arrFace = arrFaces[i],arrFaces[i+1],arrFaces[i+2],arrFaces[i+3]
if arrFace[2][0] == arrFace[3][0] and arrFace[2][1] == arrFace[3][1] and arrFace[2][2] == arrFace[3][2] :
arrHLS = rs.ColorRGBToHLS(color[count2]),rs.ColorRGBToHLS(color[count2+1]),rs.ColorRGBToHLS(color[count2+2]),rs.ColorRGBToHLS(color[count2+2])
sum = arrHLS[0][2] + arrHLS[1][2] + arrHLS[2][2]
ave2 = (sum/3)
if ave2 < 0.2:
ave2 = 0.2
ave.append(ave2)
faceVerts[0] = [0,1,2,2]
meshVerts = arrFace
mesh = rs.AddMesh(meshVerts,faceVerts)
if mesh :
centroid.append(rs.MeshAreaCentroid(mesh))
else:
print "did not make mesh"
rs.DeleteObject(mesh)
count2 += 3
else:
arrHLS = rs.ColorRGBToHLS(color[count2]),rs.ColorRGBToHLS(color[count2+1]),rs.ColorRGBToHLS(color[count2+2]),rs.ColorRGBToHLS(color[count2+3])
sum = arrHLS[0][2] + arrHLS[1][2] + arrHLS[2][2] + arrHLS[3][2]
ave2 = (sum/4)
if ave2 < 0.2:
ave2 = 0.2
ave.append(ave2)
faceVerts[0] = [0,1,2,3]
meshVerts = arrFace
mesh = rs.AddMesh(meshVerts,faceVerts)
if mesh:
centroid.append(rs.MeshAreaCentroid(mesh))
else:
print "did not make mesh"
rs.DeleteObject(mesh)
count2 += 4
i +=4
if len(centroid) != len(ave):
print "# of aves does != # of points"
meshFaceVerts99 = [0]
for w in range(len(newCrvBase)):
threshMult = []
strip = []
strLayer3 = rs.AddLayer('MeshStrips_'+ str(w),Color.White)
crvPTS = rs.CurvePoints(newCrvBase[w])
for y in range(len(crvPTS)-1):
dblParam = rs.CurveClosestPoint(newCrvBase[w],crvPTS[y])
eval = rs.EvaluateCurve(newCrvBase[w],dblParam)
if eval:
arrData = rs.CurveCurvature(newCrvBase[w],dblParam)
if arrData:
arrTangent = arrData[1]
arrEnd = eval[0]+arrTangent[0],eval[1]+arrTangent[1],eval[2]+arrTangent[2]
newVec = rs.VectorCreate(arrEnd,eval)
newVec = rs.VectorUnitize(newVec)
rs.AddPoint(newVec)
tangLine = rs.AddLine(arrEnd,eval)
rs.ObjectLayer(tangLine,strLayer6)
else:
arrTangent = crvPTS[y+1][0],crvPTS[y+1][1],crvPTS[y+1][2]
arrEnd = eval[0]+arrTangent[0],eval[1]+arrTangent[1],eval[2]+arrTangent[2]
newVec = rs.VectorCreate(arrTangent,eval)
newVec = rs.VectorUnitize(newVec)
rs.AddPoint(newVec)
print "USED THE NEXT POINT AS REFERENCE"
meshClosest = rs.MeshClosestPoint(offsetMesh,eval)
constLine = rs.AddLine(meshClosest[0],eval)
rs.ObjectLayer(constLine,strLayer5)
endPt = rs.CurveEndPoint(constLine)
midPt = rs.CurveMidPoint(tangLine)
translation = endPt-midPt
rs.MoveObject(tangLine,translation)
rotVec = rs.VectorCreate(meshClosest[0],eval)
rs.RotateObject(tangLine,endPt,90,rotVec)
rs.ScaleObject(tangLine,endPt,[scaleFactor,scaleFactor,scaleFactor])
threshMult.append(ColorAction(centroid,eval,ave))
if threshMult[y] <= 0.2 :
threshMult[y] == 0.1
strip.append(rs.ScaleObject(tangLine,endPt,[threshMult[y],threshMult[y],threshMult[y]]))
for x in range(len(strip)-1):
arrCrvs = strip[x],strip[x+1]
newSrf = rs.AddLoftSrf(arrCrvs)
meshFaceVerts99[0] = [0,1,2,3]
if not newSrf:
print "negative"
else:
surfPts = rs.SurfacePoints(newSrf[0])
verts99 = surfPts[0],surfPts[1],surfPts[7],surfPts[6]
newMeshSet = rs.AddMesh(verts99,meshFaceVerts99)
if not newMeshSet:
print "negative again"
else:
rs.DeleteObject(newSrf[0])
rs.LayerVisible(strLayer,False)
rs.LayerVisible(strLayer5,False)
rs.LayerVisible(strLayer4,False)
rs.LayerVisible(strLayer6,False)
Main()
Update