This is what I’ve written, not sure if anyone are going to understand, but just for sharing…
My script uses a class instance that I’ve created before, “objetoDesenho”. From there I get some specific points, vectors, dimensions and list of objects to compare for this script specifically…
Blockquote
objetoDesenho= IN[0]
alturaRetangulo = IN[1]
folgaLateral = IN[2]
alturaPoligonoPosicao = IN[3]
listaPontos =
listaPontosSaida =
ponto1Central = Point.Add(objetoDesenho.pontoTexto, Vector.Scale(Vector.Reverse(objetoDesenho.vetorDireita()), folgaLateral))
ponto4Ret = Point.Add(ponto1Central, Vector.Scale(objetoDesenho.vetorDesvioLabel(), alturaRetangulo/2))
ponto3Ret = Point.Add(ponto4Ret, Vector.Scale(objetoDesenho.vetorDireita(), (2*folgaLateral + objetoDesenho.tamanhoTexto)))
ponto2Ret = Point.Add(ponto3Ret, Vector.Scale(Vector.Reverse(objetoDesenho.vetorDesvioLabel()), alturaRetangulo))
ponto1Ret = Point.Add(ponto2Ret, Vector.Scale(Vector.Reverse(objetoDesenho.vetorDireita()), (2*folgaLateral + objetoDesenho.tamanhoTexto)))
retanguloInteiro = Rectangle.ByCornerPoints(ponto1Ret, ponto2Ret, ponto3Ret, ponto4Ret)
superficieRetangulo = Surface.ByPatch(retanguloInteiro)
solidoObjetoDesenho = Surface.Thicken(objetoDesenho.superficie(), 1)
superficieRetangulo = Surface.SubtractFrom(superficieRetangulo, solidoObjetoDesenho)[0]
#REMOVER AS SUPERFICIES DOS OBJETOS PERTOS E DOS LABELS POSICIONADOS
k = len(objetoDesenho.listaObjetoPerto) - 1
contador = 0
while k >= 0 and contador < 300:
objetoOutro = objetoDesenho.listaObjetoPerto[k]
solidoObjeto = Surface.Thicken(Surface.ByPatch(objetoOutro.polyCurve), 1)
superficieRetangulo = Surface.SubtractFrom(superficieRetangulo, solidoObjeto)[0]
if objetoOutro.jaPosicionada:
solidoTexto = Surface.Thicken(Surface.ByPatch(objetoOutro.poligonoTexto), 1)
solidoPosicao = Surface.Thicken(Surface.ByPatch(objetoOutro.poligonoPosicao), 1)
superficieRetangulo = Surface.SubtractFrom(superficieRetangulo, solidoTexto)[0]
superficieRetangulo = Surface.SubtractFrom(superficieRetangulo, solidoPosicao)[0]
contador += 1
k = k - 1
listaRetangulos.Add(superficieRetangulo)
pontoOrigemCS = Point.Add(objetoDesenho.pontoTexto, Vector.Scale(objetoDesenho.vetorDireita(), objetoDesenho.tamanhoTexto/2))
vetorCS = Vector.Cross(objetoDesenho.vetorDireita(), vetorZN)
if Vector.Dot(vetorCS, objetoDesenho.vetorDesvioLabel()) < 0:
vetorCS = Vector.Reverse(vetorCS)
objetoCS = CoordinateSystem.ByOriginVectors(pontoOrigemCS, objetoDesenho.vetorDireita(), vetorCS)
x0 = 0
y0 = objetoDesenho.alturaTexto + 0.5*alturaPoligonoPosicao
xf = 0.5*objetoDesenho.tamanhoTexto + folgaLateral
yf = 0.5*(alturaRetangulo)
x = x0
contador = 0
while x < xf and contador < 2000:
if contador % 2 == 0:
x = x + 10*contador
else:
x = x - 10*contador
contador2 = 0
y = y0
while y < yf and contador2 < 2000:
y = y0 + 10*contador2
listaPontos.Add(Point.ByCoordinates(x,y))
contador2 += 1
contador += 1
xN0 = x0
yN0 = - 0.5*alturaPoligonoPosicao
xNf = xf
yNf = - yf
x = xN0
contador3 = 0
while x < xNf and contador3 < 2000:
if contador3 % 2 == 0:
x = x + 10*contador3
else:
x = x - 10*contador3
contador4 = 0
y = yN0
while y > yNf and contador4 < 2000:
y = y0 - 10*contador4
listaPontos.Add(Point.ByCoordinates(x,y))
contador4 += 1
contador3 += 1
for ponto in listaPontos:
pontoSaida = Geometry.Transform(ponto, objetoCS)
pontoSaida = Point.ByCoordinates(pontoSaida.X, pontoSaida.Y, 10)
projecao = pontoSaida.Project(superficieRetangulo, vetorZN)
if len(projecao) == 1:
listaPontosSaida.Add(projecao[0])