Tabela de conteúdo
IntroduçãoDesenhando uma linha
Desenhando um arco
Curva em onda
Curva em espiral
Matriz de curvas
Introdução
Depois de aprender a criar pontos,
aprenda a criar pontos com API do Revit Python, e definir planos,
aprenda a definir planos com API do Revit em Python, próximo conceito a aprender é o de linhas e curvas.
Existem dois métodos para criar curvas na API do Revit dentro do editor de
família.
- NewModelCurve(): Usa uma curva geométrica do Revit (linhas, arcos...) e um plano de esboço.
- NewCurveByPoints(): Usa uma matriz de pontos para gerar uma linha.
Modelos de Curva
Para usar o método NewModelCurve você precisa primeiro definir a geometria
da curva e um plano de esboço(sketch plane). Ambos precisam estar definidos
dentro do código antes de chamar o método NewModelCurve(). Se caiu de
paraquedas aqui,
aprenda o que é necessário para começar a criar plugins no revit
Desenhando uma linha
Um linha é definida usando XYZ do seu inicio e final e ai se cria o elemento
curva, que no caso é uma linha reta, com o método NewModelCurve()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 -*- | |
import clr | |
import math | |
clr.AddReference('RevitAPI') | |
clr.AddReference('RevitAPIUI') | |
from Autodesk.Revit.DB import * | |
doc = __revit__.ActiveUIDocument.Document | |
app = __revit__.Application | |
t = Transaction(doc, 'Criar linha') | |
t.Start() | |
#cria um plano com origem em (0,0,0) e normal (0,0,1) | |
origin = XYZ.Zero | |
normal = XYZ.BasisZ | |
plane = Plane.CreateByNormalAndOrigin(normal, origin) | |
#Cria o plano de esboço | |
skplane = SketchPlane.Create(doc,plane) | |
#Define as extremidades da linha | |
LINHA_INICIO = XYZ(0,0,0) | |
LINHA_FINAL = XYZ(20,20,0) | |
#Cria o vinculo entre o inicio e o final da linha com CreateBound() | |
LINHA = Line.CreateBound(LINHA_INICIO, LINHA_FINAL) | |
#Cria o elemento curva com o método NewModelCurve() | |
crv = doc.FamilyCreate.NewModelCurve(line, skplane) | |
t.Commit() | |
__window__.Close() |
Desenhando um arco
Um arco é criado usando a mesma técnica que uma linha. Porém, neste caso,
vamos chamar o método Arc.Create() e é necessário passar os parâmetros de
plano, raio, ângulo de entrada e ângulo final.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 -*- | |
import clr | |
import math | |
clr.AddReference('RevitAPI') | |
clr.AddReference('RevitAPIUI') | |
from Autodesk.Revit.DB import * | |
doc = __revit__.ActiveUIDocument.Document | |
app = __revit__.Application | |
t = Transaction(doc, 'Create Line') | |
t.Start() | |
#Cria um plano com normal e origem | |
origin = XYZ.Zero | |
normal = XYZ.BasisZ | |
plane = Plane.CreateByNormalAndOrigin(normal, origin) | |
#Cria o plano de esboço | |
skplane = SketchPlane.Create(doc,plane) | |
#Define os parametros do arco | |
startAngle = 0 | |
endAngle = 0.5* math.pi | |
radius = 100 | |
#cria com Arc.Create() | |
arc = Arc.Create(plane, radius, startAngle, endAngle) | |
#Cria o elemento curva com NewModelCurve() | |
arc_crv = doc.FamilyCreate.NewModelCurve(arc, skplane) | |
t.Commit() | |
__window__.Close() |
Curva usando pontos
Curva em onda
Podemos criar matrizes complexas com pontos de referências com um loop for e
conectar todos os pontos usando o método NewCurveByPoints()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 -*- | |
import clr | |
import math | |
clr.AddReference('RevitAPI') | |
clr.AddReference('RevitAPIUI') | |
from Autodesk.Revit.DB import * | |
doc = __revit__.ActiveUIDocument.Document | |
app = __revit__.Application | |
t = Transaction(doc, 'Criar uma Curva por Pontos') | |
t.Start() | |
refptarr = ReferencePointArray() | |
#usa um loop for para criar uma série de pontos de referência | |
for i in range(0,20): | |
x = i*2 | |
y = i*2 | |
#a coordenada z é controlada por uma função seno | |
z = math.sin(i)*2 | |
myXYZ = XYZ(x,y,z) | |
refPt = doc.FamilyCreate.NewReferencePoint(myXYZ) | |
#vamos colocar cada ponto dentro da matriz de pontos | |
refptarr.Append(refPt) | |
# Cria o elemento curva a partir dos pontos da matriz de pontos refptarr | |
crv = doc.FamilyCreate.NewCurveByPoints(refptarr) | |
t.Commit() | |
__window__.Close() |
Curva em espiral
Podemos criar uma espiral fazendo com que os valores de x sejam controlados por seno, os valores y sejam controlados por cosseno e os valores de z incrementados em i. As coordenadas ficam (seno, cosseno, i).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 -*- | |
import clr | |
import math | |
clr.AddReference('RevitAPI') | |
clr.AddReference('RevitAPIUI') | |
from Autodesk.Revit.DB import * | |
doc = __revit__.ActiveUIDocument.Document | |
app = __revit__.Application | |
t = Transaction(doc, 'Criar espiral') | |
t.Start() | |
refptarr = ReferencePointArray() | |
#usa o loop for para criar uma serie de pontos | |
for i in range(0,20): | |
x = math.sin(i)*5 | |
y = math.cos(i)*5 | |
z = i | |
myXYZ = XYZ(x,y,z) | |
refPt = doc.FamilyCreate.NewReferencePoint(myXYZ) | |
refptarr.Append(refPt) | |
crv = doc.FamilyCreate.NewCurveByPoints(refptarr) | |
t.Commit() | |
__window__.Close() |
Matriz de curvas
Podemos criar uma matriz de curvas em ondas usando um loop for embutido.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 -*- | |
import clr | |
import math | |
clr.AddReference('RevitAPI') | |
clr.AddReference('RevitAPIUI') | |
from Autodesk.Revit.DB import * | |
doc = __revit__.ActiveUIDocument.Document | |
app = __revit__.Application | |
t = Transaction(doc, 'Cria uma matriz de curvas') | |
t.Start() | |
for i in range(0,20): | |
#embutindo pontos de referencia e matriz de pontos de referencia (são coisas diferentes) | |
refptarr = ReferencePointArray() | |
for j in range(0,20): | |
x = i * 10 | |
y = j * 10 | |
z = (10*math.cos(i)) + (10*math.sin(j)) | |
myXYZ = XYZ(x,y,z) | |
refPoint = doc.FamilyCreate.NewReferencePoint(myXYZ) | |
refptarr.Append(refPoint) | |
crv = doc.FamilyCreate.NewCurveByPoints(refptarr) | |
t.Commit() | |
__window__.Close() |
Comentários
Postar um comentário