Superficie Reactiva 2

Bookmark and Share

Este script identifica una superficie cualquiera, donde imprime sobre ella una matriz de puntos con los que construye por cada 4 puntos una segunda superficie, una curva cerrada y una polilínea. Desde el centro de la segunda superficie se calcula una normal, que será el camino por el cual la curva cerrada será copiada. Luego de que la Curva se encuentre en el extremo de la “Normal” está es escalada por un factor y a continuación se realiza una superficie de transición entre la curva cerrada escalada y la polilínea.

Superficie Reactiva 2
Superficie Reactiva 2
Superficie Reactiva 2
Superficie Reactiva 2

Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
Option Explicit
'carlos de la b. diciembre2006

Call FaceteadoSuperficie()
Sub FaceteadoSuperficie()
 
'declaracion de variables
Dim strSurface
Dim arrDomainU, arrDomainV
Dim arrParamU, arrParamV, arrPoint
Dim i, j
Dim secu, secv
 
'divisiones de superficie
secu = 16
 
'numero de columnas
secv = 16
 
'declaracion de matrices
ReDim colec2d(secu,secv)
 
'input
strSurface = Rhino.GetObject("Seleccione superficie")
If IsNull(strSurface) Then Exit Sub
 
arrDomainU = Rhino.SurfaceDomain(strSurface, 0)
arrDomainV = Rhino.SurfaceDomain(strSurface, 1)
 
'loop
For i = 0 To secu
For j = 0 To secv
 
'divisiones
arrParamU = arrDomainU(0) + i * (arrDomainU(1) - arrDomainU(0)) / secu
arrParamV = arrDomainV(0) + j * (arrDomainV(1) - arrDomainV(0)) / secv
 
arrPoint = Rhino.EvaluateSurface(strSurface, Array(arrParamU, arrParamV))
Rhino.AddPoint
 
arrPoint colec2d(i,j) = arrPoint
 
Next
Next
 
'matrix
Dim esquina1
Dim esquina2
Dim esquina3
Dim esquina4
Dim Curva, QuadSurface, Edge
Dim newarrPoint, Normal, LineNormal, path
 
'valores de la coleccion
esquina1 = colec2d(1,1)
esquina2 = colec2d(1,2)
esquina3 = colec2d(2,2)
esquina4 = colec2d(2,1)
 
'loop matrix
For i = 0 To (secu - 1)
For j = 0 To (secv - 1)
 
esquina1 = colec2d(i,j)
esquina2 = colec2d(i + 1,j)
esquina3 = colec2d(i + 1,j + 1)
esquina4 = colec2d(i,j + 1)
 
'llamada de funciones
Dim quad: quad = mifuncionplacas(esquina1,esquina2,esquina3,esquina4, Curva, QuadSurface, Edge)
Dim GetNormal: GetNormal = mifuncionNormal(newarrPoint, Normal, LineNormal, path, QuadSurface)
Dim Chupon: Chupon = mifuncionVentosa(Curva, newarrPoint, path, Edge)
Dim Escondida: Escondida = mifuncionHide(strSurface, QuadSurface)
 
Next
Next
 
End Sub
 
'funciones
Function mifuncionplacas(esquina1, esquina2, esquina3, esquina4, Curva, QuadSurface, Edge)
QuadSurface = Rhino.AddSrfPt(Array(esquina1, esquina2, esquina3, esquina4))
Curva = Rhino.AddCurve(Array(esquina1, esquina2, esquina3, esquina4, esquina1))
Edge = Rhino.addPolyline(Array(esquina1, esquina2, esquina3, esquina4, esquina1))
End Function
 
Function mifuncionNormal(newarrPoint, Normal, LineNormal, path, QuadSurface)
Dim newDomainU, newDomainV
Dim newarrParameterU, newarrParameterV
 
newDomainU = Rhino.SurfaceDomain(QuadSurface,0)
newDomainV = Rhino.SurfaceDomain(QuadSurface,1)
 
newarrParameterU = (newDomainU(1) - newDomainU(0))/2
newarrParameterV = (newDomainV(1) - newDomainV(0))/2
 
newarrPoint = Rhino.EvaluateSurface(QuadSurface, Array(newarrParameterU, newarrParameterV))
Rhino.AddPoint newarrPoint
 
Normal = Rhino.SurfaceNormal(QuadSurface, Array(newarrParameterU, newarrParameterV))
LineNormal = Rhino.addLine (newarrPoint, Rhino.VectorAdd(newarrPoint, Normal))
 
path = Rhino.ExtendCurveLength (LineNormal, 0, 1, 18)
End Function
 
Function mifuncionVentosa(Curva, newarrPoint, path, Edge)
Dim arrEnd
Dim pathDomain, pathParameter
 
pathDomain = Rhino.CurveDomain(path)
pathParameter = pathDomain(1)
 
arrEnd = Rhino.EvaluateCurve(path, pathParameter)
 
Rhino.AddPoint arrEnd
Rhino.MoveObject Curva, newarrPoint, arrEnd
 
Rhino.ScaleObject Curva, arrEnd, Array(.8, .8, .8)
 
Rhino.AddLoftSrf Array(Curva, Edge),,,3
End Function
 
Function mifuncionHide(strSurface, QuadSurface)
Rhino.HideObject (strSurface)
Rhino.HideObjects Array(QuadSurface)
End Function

2 Comments

  • mario vergara Jul 17, 2007, 4:28

    carlos:
    tu script funciona a la perfeccion!!!…michisimas gracias!!!
    mario

  • D.A.M.n! Aug 27, 2007, 5:17

    felicitaciones desde ya por su trabajo , desde chile les envio mis saludos y me gustaria contactarlos en un futuro proximo para mi proyecto de blog sobre arquitectura digital y diseño mediante sctipting llamada eSCRIPT-O , que estoy realizando con cosas realizadas por mi para mi tesis de magister aca en la pontificia universidad catolica de chilem y me encantaria intercambiaar info conuds ya que estoy todavia empezando en lodel mundo del script tanto en maxsctipt, rhinoscript y algo de MEL-
    suerte y felicitaciones de nuevo!!

Leave a Reply