Escolar Documentos
Profissional Documentos
Cultura Documentos
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
........................................................................................................... 11
........................................................................ 14
........................................................................................ 19
....................................................................................... 29
Página 5
Página 6
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
....................................................................................................................... 174
................................................................................................................. 137
Página 7
Página 8
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
.................................................................................................................... 285
Página 9
Página 10
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 11
Página 12
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 13
Página 14
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 15
Página 16
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 17
Página 18
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 19
Página 20
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 21
Página 22
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 23
Página 24
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 25
Página 26
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 27
Página 28
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 29
Página 30
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 31
Página 32
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 33
Página 34
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 35
Página 36
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 37
Página 38
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 39
Página 40
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 41
Página 42
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 43
Página 44
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 45
Página 46
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 47
Página 48
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 49
Página 50
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 51
Página 52
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 53
Página 54
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 55
Página 56
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 57
Página 58
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 59
Página 60
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 61
Página 62
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 63
Página 64
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 65
Página 66
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 67
Página 68
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 69
Página 70
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 71
Página 72
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 73
Página 74
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 75
Página 76
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 77
Página 78
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 79
Página 80
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 81
Página 82
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 83
Página 84
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 85
Página 86
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 87
Página 88
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 89
Página 90
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 91
Página 92
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 93
Página 94
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 95
Página 96
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 97
Página 98
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 99
Página 100
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 101
Página 102
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
{
"license": "",
"file_hash": null,
"name": "Dynamo Unchained - ZeroTouch",
"version": "1.0.0",
"description": "ZeroTouch sample node for the Dynamo Unchained workshop",
"group": "",
"keywords": null,
"dependencies": [],
"contents": "",
"engine_version": "1.3.0.0",
"engine": "dynamo",
"engine_metadata": "",
"site_url": "",
"repository_url": "",
"contains_binaries": true,
"node_libraries": [
"DynamoUnchained.ZeroTouch, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
]
}
Página 103
Página 104
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<?xml version="1.0"?>
<doc>
<assembly>
<name>DynamoUnchained.ZeroTouch</name>
</assembly>
<namespaces>
namespace DynamoUnchained.ZeroTouch <namespace name="DynamoUnchained.ZeroTouch">
{ <category>eTlipse_v_20190806</category>
public static class OlaDynamo{ </namespace>
public static string DigaOla(string Nome) { </namespaces>
return "Olá " + Nome + "!"; </doc>
}
}
}
Página 105
Página 106
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
foreach (var i in list) {
if (i % 2 == 0) {
pares.Add(i);
} else {
impares.Add(i);
}
}
using Autodesk.DesignScript.Runtime;
Página 107
Página 108
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.DesignScript.Runtime;
[MultiReturn(new[] { "X", "Y", "Z" })] using Autodesk.DesignScript.Geometry;
public static Dictionary<string, object> PointCoordinates(Point point) {
return new Dictionary<string, object> { { "X", point.X }, { "Y", point.Y
}, { "Z", point.Z } }; namespace DynamoUnchained.ZeroTouch
} {
public static Line ByCoordinates(double X1, double Y1, double Z1, double X2, public static class DynamoPersonalizado{
double Y2, double Z2) {
var p1 = Point.ByCoordinates(X1, Y1, Z1); public static string DigaOla(string Nome) {
var p2 = Point.ByCoordinates(X2, Y2, Z2); return "Olá " + Nome + "!";
}
return Line.ByStartPointEndPoint(p1, p2);
} public static double MediaNumerica(double Numero1, double Numero2) {
return ((Numero1 + Numero2) / 2);
}
public static Line ByCoordinates(double X1, double Y1, double Z1, double X2,
double Y2, double Z2) {
var p1 = Point.ByCoordinates(X1, Y1, Z1);
var p2 = Point.ByCoordinates(X2, Y2, Z2);
Página 109
Página 110
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
return Line.ByStartPointEndPoint(p1, p2);
}
}
}
Página 111
Página 112
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
public static Autodesk.Revit.DB.Wall wall1; // Revit wall
public static Revit.Elements.Wall wall2; // Dynamo wall
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.DesignScript.Runtime;
using Autodesk.DesignScript.Geometry;
Página 113
Página 114
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using Autodesk.Revit.DB;
using Revit.Elements;
using RevitServices.Persistence; /// <summary>
using Revit.GeometryConversion; /// Converte uma em uma lista de segmentos
/// </summary>
namespace DynamoUnchained.ZeroTouch /// <param name="text">String a ser convertida</param>
{ /// <param name="size">Tamanho do texto</param>
public static class DynamoPersonalizado{ /// <returns></returns>
[IsVisibleInDynamoLibrary(false)]
public static Autodesk.DesignScript.Geometry.Curve public static IEnumerable<Line> TextToLines(string text, int size) {
GetWallBaseline(Revit.Elements.Wall wall) { List<Line> lines = new List<Line>();
//get Revit Wall
var revitWall = wall.InternalElement; //using System.Drawing para conversão para pontos da fonte
//revit API using (Font font = new System.Drawing.Font("Arial", size,
var locationCurve = revitWall.Location as LocationCurve; FontStyle.Regular))
//convert to Dynamo and return it using (GraphicsPath gp = new GraphicsPath())
return locationCurve.Curve.ToProtoType(); using (StringFormat sf = new StringFormat()) {
} sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
Página 115
Página 116
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
/// <summary>
/// Text to Wall gera paredes Revit baseado na entrada de um texto para
orientar as curvas
/// </summary>
/// <param name="text">Texto para converter em linhas base Wall</param>
/// <param name="height"> Altura da Parede</param>
/// <param name="level"> Nivel da Parede</param>
/// <param name="wallType"> Tipo de Parede</param>
/// <param name="size"> Tamanho da Fonte</param>
/// <returns></returns>
public static IEnumerable<Revit.Elements.Wall> TextToWall(string text, double
height, Revit.Elements.Level level, Revit.Elements.WallType wallType, int size = 25) {
// Primeiro checar as entradas
if (level == null) {
throw new ArgumentNullException("level");
}
if (wallType == null) {
throw new ArgumentNullException("wallType");
}
Página 117
Página 118
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
List<Autodesk.DesignScript.Geometry.Line> lines = new
List<Autodesk.DesignScript.Geometry.Line>();
lines.Add(Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint(points[i], start));
}
} else {
lines.Add(Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint(points[i], points[i
+ 1]));
}
}
// Descartar pontos
foreach (var point in points) {
point.Dispose();
}
return lines;
}
}
}
}
Página 119
Página 120
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Window x:Class="WPFApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFApp"
mc:Ignorable="d"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Margin="5" Name="EnabledCheckBox" Content="Enabled"
HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Slider Grid.Row="1" Margin="5" Name="ValueSlider" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="100"/>
<Button Grid.Row="2" Margin="5" Content="Click me!" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>
Página 121
Página 122
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Margin="5" Name="EnabledCheckBox" Content="Enabled"
HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Slider Grid.Row="1" Margin="5" Name="ValueSlider" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="100"/>
<Button Grid.Row="2" Margin="5" Content="Click me!" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="75" Click="Button_Click"
IsEnabled="{Binding ElementName=EnabledCheckBox, Path=IsChecked}"/>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WPFApp {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
Página 123
Página 124
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Grid> <Grid Margin="10">
<Grid.RowDefinitions> <local:MyCustomControl/>
<RowDefinition Height="Auto"/> </Grid>
<RowDefinition Height="Auto"/> </Window>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Margin="5" Name="EnabledCheckBox" Content="Enabled"
HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Slider Grid.Row="1" Margin="5" Name="ValueSlider" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="100"/>
<Button Grid.Row="2" Margin="5" Content="Click me!" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="75" Click="Button_Click"
using System;
IsEnabled="{Binding ElementName=EnabledCheckBox, Path=IsChecked}"/>
</Grid> using System.Collections.Generic;
using System.Linq;
</UserControl>
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System;
using System.Windows.Input;
using System.Collections.Generic;
using System.Windows.Media;
using System.Linq;
using System.Windows.Media.Imaging;
using System.Text;
using System.Windows.Navigation;
using System.Threading.Tasks;
using System.Windows.Shapes;
using System.Windows;
using System.Windows.Controls;
namespace WPFApp {
using System.Windows.Data;
/// <summary>
using System.Windows.Documents;
/// Interaction logic for MainWindow.xaml
using System.Windows.Input;
/// </summary>
using System.Windows.Media;
public partial class MainWindow : Window {
using System.Windows.Media.Imaging;
public MainWindow() {
using System.Windows.Navigation;
InitializeComponent();
using System.Windows.Shapes;
}
}
namespace WPFApp {
}
/// <summary>
/// Interaction logic for MyCustomControl.xaml
/// </summary>
public partial class MyCustomControl : UserControl {
public MyCustomControl() {
InitializeComponent();
}
<Window x:Class="WPFApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFApp"
mc:Ignorable="d"
Title="MainWindow" SizeToContent="WidthAndHeight">
Página 125
Página 126
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
/* dynamo directives */
using Dynamo.Graph.Nodes;
{
namespace DynamoUnchained.ExplicitNode {
"license": "",
[NodeName("HelloUI")]
"file_hash": null,
[NodeDescription("Sample Explicit Node")]
"name": "Dynamo Unchained - ExplicitNode",
[NodeCategory("Dynamo Unchained.Explicit Node")]
"version": "1.0.0",
[IsDesignScriptCompatible]
"description": "ExplicitNode sample node for the Dynamo Unchained workshop",
public class HelloUI : NodeModel {
"group": "",
public HelloUI() {
"keywords": null,
"dependencies": [],
}
"contents": "",
}
"engine_version": "1.3.0.0",
}
"engine": "dynamo",
"engine_metadata": "",
"site_url": "",
"repository_url": "",
"contains_binaries": true,
"node_libraries": [
"DynamoUnchained.ExplicitNode, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null"
]
}
Página 127
Página 128
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
/* dynamo directives */
using Dynamo.Controls;
using Dynamo.Wpf;
namespace DynamoUnchained.ExplicitNode {
public class HelloUINodeView : INodeViewCustomization<HelloUI> {
public void CustomizeView(HelloUI model, NodeView nodeView) {
var ui = new MyCustomControl();
nodeView.inputGrid.Children.Add(ui);
ui.DataContext = model;
}
Página 129
Página 130
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using Autodesk.DesignScript.Runtime;
namespace DynamoUnchained.ExplicitNode.Functions {
[IsVisibleInDynamoLibrary(false)]
public static class Functions {
public static double MultiplyTwoNumbers(double a, double b) {
return a * b;
}
}
}
Página 131
Página 132
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
new Func<double, double,
double>(Functions.Functions.MultiplyTwoNumbers),
new List<AssociativeNode> { inputAstNodes[0], sliderValue });
return new[] {
AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), functionCall) };
}
}
}
<UserControl x:Class="DynamoUnchained.ExplicitNode.MyCustomControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
using System; xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
using System.Collections.Generic; xmlns:local="clr-namespace:DynamoUnchained.ExplicitNode"
/* dynamo directives */ mc:Ignorable="d"
using Dynamo.Graph.Nodes; d:DesignHeight="450" d:DesignWidth="800">
using ProtoCore.AST.AssociativeAST; <Grid>
<Grid.RowDefinitions>
namespace DynamoUnchained.ExplicitNode { <RowDefinition Height="Auto"/>
[NodeName("HelloUI")] <RowDefinition Height="Auto"/>
[NodeDescription("Sample Explicit Node")] <RowDefinition Height="Auto"/>
[NodeCategory("DynamoUnchained")] </Grid.RowDefinitions>
[InPortNames("A")] <CheckBox Grid.Row="0" Margin="5" Name="EnabledCheckBox" Content="Enabled"
[InPortTypes("double")] HorizontalAlignment="Left" VerticalAlignment="Top"/>
[InPortDescriptions("Number A")] <Slider
[OutPortNames("Output")] Name="ValueSlider"
[OutPortTypes("double")] Grid.Row="1"
[OutPortDescriptions("Product of two numbers")] Width="100"
[IsDesignScriptCompatible] Margin="5"
public class HelloUI : NodeModel { HorizontalAlignment="Left"
public HelloUI() { VerticalAlignment="Top"
RegisterAllPorts(); IsSnapToTickEnabled="True"
} TickFrequency="1"
Value="{Binding SliderValue}"/>
private double _sliderValue; <Button Grid.Row="2" Margin="5" Content="Click me!" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="75" Click="Button_Click"
public double SliderValue { IsEnabled="{Binding ElementName=EnabledCheckBox, Path=IsChecked}"/>
get { return _sliderValue; } </Grid>
set { </UserControl>
_sliderValue = value;
RaisePropertyChanged("SliderValue");
OnNodeModified(false);
}
}
Página 133
Página 134
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
"dependencies": [],
"contents": "",
"engine_version": "1.3.0.0",
"engine": "dynamo",
"engine_metadata": "",
"site_url": "",
"repository_url": "",
"contains_binaries": true,
"node_libraries": [
"DynamoUnchained.ExplicitNode, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null",
"DynamoUnchained.ExplicitNode.Functions, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null"
]
}
Página 135
Página 136
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 137
Página 138
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Window x:Class="WpfToCSV.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfToCSV"
mc:Ignorable="d"
Title="Creating CSV" Height="170" Width="330">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Nível" FontWeight="Bold" Margin="5" Grid.Column="1"
Grid.Row="0"/>
<TextBlock Text="Material" FontWeight="Bold" Margin="5" Grid.Column="2"
Grid.Row="0"/>
<!---->
<TextBlock Text="Janela:" FontWeight="Bold" Margin="5" Grid.Column="0"
Grid.Row="1"/>
<TextBlock Text="Porta:" FontWeight="Bold" Margin="5" Grid.Column="0"
Grid.Row="2"/>
<!---->
<TextBox Name="txtJanelaNivel" Width="100" Margin="5" Grid.Column="1"
Grid.Row="1"/>
<TextBox Name="txtJanelaMaterial" Width="100" Margin="5" Grid.Column="2"
Grid.Row="1"/>
<!---->
<TextBox Name="txtPortaNivel" Width="100" Margin="5" Grid.Column="1"
Grid.Row="2"/>
<TextBox Name="txtPortaMaterial" Width="100" Margin="5" Grid.Column="2"
Grid.Row="2"/>
</Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button Name="btnLimpar" Width="51" Margin="5"
Click="BtnLimpar_Click">_Limpar</Button>
<Button Name="btnCSV" Width="51" Margin="5"
Click="BtnCSV_Click">_CSV</Button>
<Button Name="btnExit" Width="51" Margin="5,5,37,5"
Click="BtnExit_Click">Sai_r</Button>
</StackPanel>
Página 139
Página 140
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
</StackPanel> //InitialDirectory = @"..\..\DataBase\",
</Window> //InitialDirectory = @"D\Temp\",
//InitialDirectory = "D\\Temp\\",
//InitialDirectory =
System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Directory.GetCurrentDirectory()
), "..\\..\\DataBase\\"),
InitialDirectory = System.IO.Path.GetFullPath(CombinedPath),
using System; Filter = "Rtf documents|*.rtf|Txt files (*.txt)|*.txt|Csv files
using System.Collections.Generic; (*.csv)|*.csv|All files (*.*)|*.*",
using System.ComponentModel; FilterIndex = 3,
using System.Data; RestoreDirectory = true
using System.Drawing; };
using System.Linq; saveFileDialog.ShowDialog();
using System.Text; if (saveFileDialog.FileName == "") {
using System.Threading.Tasks; MessageBox.Show("Arquivo Inválido", "Salvar Como",
using System.Windows; MessageBoxButton.OK);
using System.Windows.Controls; } else {
using System.Windows.Data; ArquivoName = saveFileDialog.FileName;
using System.Windows.Documents; using (StreamWriter writer = new StreamWriter(ArquivoName)) {
using System.Windows.Input; writer.WriteLine("Elemento;Nivel;Material");
using System.Windows.Media; writer.WriteLine("Porta:;{0};{1}", txtPortaNivel.Text,
using System.Windows.Media.Imaging; txtPortaMaterial.Text);
using System.Windows.Navigation; writer.WriteLine("Janela:;{0};{1}", txtJanelaNivel.Text,
using System.Windows.Shapes; txtJanelaMaterial.Text);
using System.IO; }
using Microsoft.Win32; MessageBox.Show("Arquivo Salvo com Sucesso!", "Salvar!",
MessageBoxButton.OK);
namespace WpfToCSV { }
/// <summary>
/// Interaction logic for MainWindow.xaml } catch (Exception ex) {
/// </summary> MessageBox.Show(ex.ToString());
public partial class MainWindow : Window { }
}
// Variáveis globais: }
string arquivoNome; }
public string ArquivoName { get { return arquivoNome;} set { arquivoNome =
value; } }
public MainWindow() {
InitializeComponent();
ArquivoName = "";
}
Página 141
Página 142
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 143
Página 144
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Window x:Class="WpfApp_Excel_20190326.Forms.FrmStartUp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp_Excel_20190326.Forms"
mc:Ignorable="d"
Title="Exemplos de Interação com o Excel" Height="150" Width="450">
<StackPanel>
<!-- Main Menu -->
<Menu Height="21">
<MenuItem Header="_File">
<MenuItem Name="mnuExit" Header="E_xit" Click="Exit"/>
</MenuItem>
</Menu>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
Margin="5,33,5,5">
<Button Name="btnAddPicture" Width="70" Margin="2,9,3,5"
Click="ReadAddPicture_Click">Add Picture</Button>
<Button Name="btnAddSheet" Width="70" Margin="2,9,3,5"
Click="ReadAddSheet_Click">Add Sheet</Button>
<Button Name="btnReadAllFile" Width="70" Margin="2,9,3,5"
Click="ReadAllFile_Click">Read All File</Button>
<Button Name="btnOpenFile" Width="70" Margin="2,9,3,5"
Click="OpenFile_Click">Open File</Button>
<Button Name="btnCreateFile" Width="60" Margin="2,9,3,5"
Click="CreateFile_Click">Create File</Button>
<Button Name="btnExit" Width="50" Margin="2,9,3,5"
Click="Exit">E_xit</Button>
</StackPanel>
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Runtime.InteropServices;
Página 145
Página 146
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using Excel = Microsoft.Office.Interop.Excel; xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Página 147
Página 148
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
private void ReadAddSheet_Click(object sender, RoutedEventArgs e) { xlApp.Quit();
Excel.Application xlApp = new
Microsoft.Office.Interop.Excel.Application(); releaseObject(xlApp);
releaseObject(xlWorkBook);
if (xlApp == null) { releaseObject(xlWorkSheet);
MessageBox.Show("Excel is not properly installed!");
return; MessageBox.Show("File created!");
} }
xlNewSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlNewSheet.Select();
xlWorkBook.Save();
xlWorkBook.Close();
releaseObject(xlNewSheet);
releaseObject(worksheets);
releaseObject(xlWorkBook);
releaseObject(xlApp);
xlWorkBook.SaveAs("d:\\temp\\csharp-Excel.xls",
Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,
Excel.XlSaveAsAccessMode.xlExclusive,
misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
Página 149
Página 150
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<id>2</id>
<roledescription>Developer</roledescription>
</role>
<role>
<id>3</id>
<roledescription>Marketing</roledescription>
</role>
<!--Salary section-->
<salary>
<idperson id="1" year="2001" salaryyear="10000,00" />
<idperson id="1" year="2005" salaryyear="15000,00" />
</salary>
</people>
<Window x:Class="LinqWithXML20180624.Forms.FrmStartUp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:LinqWithXML20180624.Forms"
xmlns:local_Lib="clr-namespace:LinqWithXML20180624.Library"
mc:Ignorable="d"
Title="Linq with XML" Height="450" Width="921">
<Window.Resources>
<local_Lib:People x:Key="LocalPeople"/>
</Window.Resources>
<?xml version="1.0" encoding="utf-8"?><people> <StackPanel>
<!--Person section-->
<!-- Main Menu -->
<person> <Menu Height="21" Margin="0,0,0,0">
<id>1</id> <MenuItem Header="_File">
<firstname>Edson</firstname>
<MenuItem Name="mnuExit" Header="E_xit" Click="Exit"/>
<lastname>Andrade</lastname> </MenuItem>
<idrole>1</idrole>
<MenuItem Header="_Help">
</person> <MenuItem Header="_About"/>
<person>
</MenuItem>
<id>2</id> </Menu>
<firstname>Rogerio</firstname> <StackPanel HorizontalAlignment="Center">
<lastname>Lima</lastname> <!-- Data Grid for XML -->
<idrole>2</idrole>
<TextBlock HorizontalAlignment="Center" Margin="5,9,5,0"
</person>
TextWrapping="Wrap" FontSize="12" FontWeight="Bold" Text="Data Table:"/>
<person> <DataGrid Name="dgrdXML" AutoGenerateColumns="True"
<id>3</id>
ItemsSource="{StaticResource LocalPeople}" AlternatingRowBackground="LightCyan">
<firstname>Joel</firstname> <!-- Data Grid -->
<lastname>Diniz</lastname>
</DataGrid>
<idrole>1</idrole> <!-- Output -->
</person> <TextBlock HorizontalAlignment="Center" Margin="5,9,5,0"
<person>
TextWrapping="Wrap" FontSize="12" FontWeight="Bold" Text="Output:"/>
<id>4</id> <RichTextBox Name="rtbOutput" HorizontalAlignment="Left" Height="150"
<firstname>Jade</firstname> Width="850" Margin="5,9,5,0">
<lastname>Diniz</lastname> <FlowDocument>
<idrole>2</idrole>
<Paragraph>
</person>
<Run Text="... output!"/>
<!--Role section-->
</Paragraph>
<role>
</FlowDocument>
<id>1</id> </RichTextBox>
<roledescription>Manager</roledescription> </StackPanel>
</role>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
<role>
Página 151
Página 152
Margin="5,9,5,0">
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Button x:Name="btnDeleteInXML" Width="105" Margin="3,9,5,5"
Click="BtnDeleteInXML_Click">Delete in XML File</Button> // Adding all person
<Button x:Name="btnUpDateInXML" Width="107" Margin="3,9,5,5" foreach (Person person in people) {
Click="BtnUpDateInXML_Click">UpDate in XML File</Button> line.Remove(0, line.Length);
<Button x:Name="btnAddInXML" Width="107" Margin="3,9,5,5" line.Append(person.ToString());
Click="BtnAddInXML_Click">Add in XML File</Button> line.Append("\n");paragraph.Inlines.Add(line.ToString());
<Button x:Name="btnAttRetryFromFile" Width="107" Margin="3,9,5,5" }
Click="BtnAttRetryFromFile_Click">Retry Att from File</Button>
<Button x:Name="btnElemRetryFromFile" Width="113" Margin="3,9,5,5" // UpDate the OutPut Document
Click="BtnElemRetryFromFile_Click">Retry Elem from File</Button> flowDoc.Blocks.Add(paragraph);
<Button x:Name="btnDocRetryFromFile" Width="107" Margin="3,9,5,5" rtbOutput.Document = flowDoc;
Click="BtnDocRetryFromFile_Click">_Retry Doc from File</Button>
<Button x:Name="btnApplyETlipseSample" Width="135" Margin="3,9,5,5" } catch (Exception ex) {
Click="BtnApplyETlipseSample_Click">_Apply Sample ETlipse</Button> MessageBox.Show(ex.ToString());
<Button Name="btnExit" Width="50" Margin="5,9,5,5" }
Click="Exit">E_xit</Button> }
</StackPanel>
</StackPanel> public FrmStartUp() {
</Window> InitializeComponent();
}
Página 153
Página 154
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
// Query a specific data XmlReader reader = XmlReader.Create(@"..\..\DataBase\People.xml");
var query = from p in xml.Elements("people").Elements("person") XDocument xml = XDocument.Load(reader);
where (int)p.Element("id") == 3 reader.Close();
select p;
XElement idperson = xml.Descendants("idperson").Last();
string person; idperson.Add(new XElement("idperson",
new XAttribute("id",1),
// Interacting with each element new XAttribute("year",2006),
foreach (var record in query) { new XAttribute("salaryyear","160000,00")));
person = string.Format("Person: {0} {1}",
record.Element("firstname").Value, record.Element("lastname").Value); // para saída em String
MessageBox.Show(person); //StringWriter sw = new StringWriter();
} //XmlWriter w = XmlWriter.Create(sw);
//xml.Save(w);
} catch (Exception ex) { //w.Close();
MessageBox.Show(ex.ToString()); //MessageBox.Show(sw.ToString());
}
} XmlWriter writer = XmlWriter.Create(@"..\..\DataBase\People.xml");
xml.Save(writer);
private void BtnElemRetryFromFile_Click(object sender, RoutedEventArgs e) { writer.Close();
try { MessageBox.Show("Arquivo gravado com sucesso!");
XElement xml = XElement.Load(@"..\..\DataBase\People.xml");
} catch (Exception ex) {
var query = from p in xml.Elements("person") MessageBox.Show(ex.ToString());
where (int)p.Element("id") == 3 }
select p; }
Página 155
Página 156
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
} namespace LinqWithXML20180624.Library{
class Person{
private void BtnDeleteInXML_Click(object sender, RoutedEventArgs e) {
try { int _id;
// Removendo um elemento public int ID {
XmlReader reader = XmlReader.Create(@"..\..\DataBase\People.xml"); get { return _id; }
XElement xml = XElement.Load(reader); set { _id = value; }
reader.Close(); }
xml.Descendants("idperson").First().Remove();
xml.Elements("role").Remove(); int _idRole;
// Gravando o arquivo public int IDRole {
XmlWriter writer = XmlWriter.Create(@"..\..\DataBase\People.xml"); get { return _idRole; }
xml.Save(writer); set { _idRole = value; }
writer.Close(); }
MessageBox.Show("Arquivo gravado com sucesso!");
} catch (Exception ex) { string _lastName;
MessageBox.Show(ex.ToString()); public string LastName {
} get { return _lastName; }
} set { _lastName = value; }
}
} string _firstName;
} public string FirstName {
get { return _firstName; }
set { _firstName = value; }
}
namespace LinqWithXML20180624.Library {
class People : List<Person> {
public People() {
using System;
this.Add(new Person() { ID = 1, FirstName = "Edson", LastName = "Andrade",
using System.Collections.Generic;
IDRole = 1 });
using System.Linq;
this.Add(new Person() { ID = 2, FirstName = "Jade", LastName = "Diniz",
using System.Text;
IDRole = 2 });
using System.Threading.Tasks;
this.Add(new Person() { ID = 3, FirstName = "Joel", LastName = "Diniz",
IDRole = 1 });
namespace LinqWithXML20180624.Library{
}
class Role{
}
}
int _id;
public int ID {
get { return _id; }
set { _id = value; }
}
string _roleDescription;
public string RoleDescription {
using System; get { return _roleDescription; }
using System.Collections.Generic; set { _roleDescription = value; }
using System.Linq; }
using System.Text;
using System.Threading.Tasks; }
Página 157
Página 158
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Application.Resources>
</Application.Resources>
} </Application>
using System;
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Configuration;
using System.Text;
using System.Data;
using System.Threading.Tasks;
using System.Linq;
using System.Threading.Tasks;
namespace LinqWithXML20180624.Library{
using System.Windows;
class Salary{
namespace LinqWithXML20180624 {
int _idPerson;
/// <summary>
public int IDPerson {
/// Interação lógica para App.xaml
get { return _idPerson; }
/// </summary>
set { _idPerson = value; }
public partial class App : Application {
}
void App_Startup(object sender, StartupEventArgs e) {
int _year;
// Open a window
public int Year {
Forms.FrmStartUp frmStartUp = new Forms.FrmStartUp();
get { return _year; }
frmStartUp.Show();
set { _year = value; }
}
//MainWindow window = new MainWindow();
//window.Show();
double _salary;
}
public double SalaryYear {
}
get { return _salary; }
}
set { _salary = value; }
}
}
}
<Application x:Class="LinqWithXML20180624.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:LinqWithXML20180624"
Startup="App_Startup">
Página 159
Página 160
<!--StartupUri="MainWindow.xaml"-->
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 161
Página 162
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 163
Página 164
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMwithWPFProject.Model {
public class Employee {
Página 165
Página 166
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
private string lastName; LastName = lastName;
/// <summary> BaseSalary = baseSalary;
/// Last name of the employee DaysWorked = daysWorked;
/// </summary> ReceiveBonusPerDayWorked = receiveBonusPerDayWorked;
public string LastName { BonusPerDayWorked = bonusPerDayWorked;
get { return lastName; } }
set { lastName = value; } }
} }
Página 167
Página 168
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Style TargetType="TextBlock"> <!---->
<Style.Triggers> <TextBlock Text="Total Salary" Margin="5"/>
<DataTrigger Binding="{Binding <TextBox x:Name="txtTotalSalary" Text="{Binding
ReceiveBonusPerDayWorked}" Value="False"> SelectedEmployee.TotalSalary, Mode=TwoWay,
<Setter Property="Foreground" StringFormat={}R$ {0:0.00}}" Margin="5,0,5,0"/>
Value="Red" /> </StackPanel>
</DataTrigger>
<DataTrigger Binding="{Binding </Grid>
ReceiveBonusPerDayWorked}" Value="True"> </Window>
<Setter Property="Foreground"
Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style> using System;
</TextBlock> using System.Collections.Generic;
</DataTemplate> using System.Collections.ObjectModel;
</GridViewColumn.CellTemplate> using System.Linq;
</GridViewColumn> using System.Text;
</GridView> using System.Threading.Tasks;
</ListView.View> using System.Windows;
</ListView> using System.Windows.Controls;
using System.Windows.Data;
<StackPanel Grid.Row="0" Grid.Column="1"> using System.Windows.Documents;
<TextBlock Text="Selected Employee" HorizontalAlignment="Center" using System.Windows.Input;
Margin="5" FontWeight="Bold"/> using System.Windows.Media;
<!----> using System.Windows.Media.Imaging;
<TextBlock Text="Name" Margin="5"/> using System.Windows.Navigation;
<!-- Optional: using System.Windows.Shapes;
<TextBox x:Name="txtName" Text="{Binding using MVVMwithWPFProject.Model;
ElementName=lstEmployees,Path=SelectedItem.FirstName}" Margin="5,0,5,0"/> using MVVMwithWPFProject.ViewModel;
-->
<TextBox x:Name="txtFirstName" Text="{Binding SelectedEmployee.FirstName}" namespace MVVMwithWPFProject {
Margin="5,0,5,0"/> /// <summary>
<!----> /// Interaction logic for MainWindow.xaml
<TextBlock Text="Last Name" Margin="5"/> /// </summary>
<TextBox x:Name="txtLastName" Text="{Binding SelectedEmployee.LastName}" public partial class MainWindow : Window {
Margin="5,0,5,0"/> private EmployeeViewModel employeeViewModel;
<!----> public MainWindow() {
<TextBlock Text="Base Salary" Margin="5"/>
<TextBox x:Name="txtBaseSalary" Text="{Binding InitializeComponent();
SelectedEmployee.BaseSalary,
StringFormat={}R$ {0:0.00}}" Margin="5,0,5,0"/> employeeViewModel = new EmployeeViewModel();
<!---->
<TextBlock Text="Days Worked" Margin="5"/> // Adding itens just to test
<TextBox x:Name="txtDaysWorked" Text="{Binding employeeViewModel.DefaultEmployees();
SelectedEmployee.DaysWorked, grdEmployees.DataContext = employeeViewModel;
Converter={StaticResource valueConverterIntDayToString}}" }
Margin="5,0,5,0"/> }
<!----> }
<TextBlock Text="Bonus per Day Worked" Margin="5"/>
<TextBox x:Name="txtBonusPerDayWorked" Text="{Binding
SelectedEmployee.BonusPerDayWorked,
StringFormat={}R$ {0:0.00}}" Margin="5,0,5,0"/>
<!---->
<Separator Margin="5,18,5,15"/> using MVVMwithWPFProject.ViewModel;
<!----> using System;
<Button x:Name="btnTotalSalary" Margin="5" Command="{Binding using System.Collections.Generic;
CalculateSalaryCommand}" using System.Linq;
CommandParameter="{Binding SelectedEmployee.FirstName}"> using System.Text;
_Compute Total Salary using System.Threading.Tasks;
</Button> using System.Windows.Input;
Página 169
Página 170
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using System.Windows.Markup; /// Selected employee from the collection of employees
/// </summary>
namespace WpfAppICommandProject.ViewModel.Command { public Employee SelectedEmployee {
public class CalculateSalaryCommand : ICommand { get { return selectedEmployee; }
set {
public EmployeeViewModel EmployeeViewModel { get; set; } selectedEmployee = value;
OnPropertyChanged("SelectedEmployee");
public event EventHandler CanExecuteChanged { }
add { CommandManager.RequerySuggested += value; } }
remove { CommandManager.RequerySuggested -= value; }
} public EmployeeViewModel() {
//SelectedEmployee = new Employee(1, "Joel", "Diniz", 5000, 20, true,
public CalculateSalaryCommand(EmployeeViewModel employeeViewModel) { 100f);
EmployeeViewModel = employeeViewModel; CalculateSalaryCommand = new CalculateSalaryCommand(this);
} }
if (SelectedEmployee != null) {
using System; // (Total Salary) = (Days Worked) * (Bonus per Day Worked) + (Base
using System.Collections.Generic; Salary)
using System.Collections.ObjectModel; SelectedEmployee.TotalSalary = (SelectedEmployee.DaysWorked *
using System.ComponentModel; SelectedEmployee.BonusPerDayWorked)+SelectedEmployee.BaseSalary;
using System.Linq; this.SelectedEmployee = SelectedEmployee;
using System.Text;
using System.Threading.Tasks; // Teste if this employee receives bonus
using System.Windows; if (!SelectedEmployee.ReceiveBonusPerDayWorked) {
using MVVMwithWPFProject.Model; MessageBox.Show("This employee does not receive bonus!");
using WpfAppICommandProject.ViewModel.Command; }
Página 171
Página 172
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace MVVMwithWPFProject.ViewModel {
/// <summary>
/// Converts the days, that are int, to string format
/// </summary>
public class ValueConverterIntDaysToString : IValueConverter {
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture) {
int inputAsInt = int.Parse(value.ToString());
if (inputAsInt > 0) {
return inputAsInt.ToString() + " days";
} else {
return inputAsInt.ToString() + " day";
}
}
<Application x:Class="MVVMwithWPFProject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MVVMwithWPFProject"
StartupUri="View/MainWindowView.xaml">
<Application.Resources>
</Application.Resources>
</Application>
Página 173
Página 174
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 175
Página 176
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 177
Página 178
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
[Transaction(TransactionMode.Manual)]
public class OlaRevit : IExternalCommand { // Classe que irá dar origem à dll para
uso no Revit.
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) { // Método de entrada que implemnta a interface necessária da
API.
try {
TaskDialog.Show("Revit", "Olá Revit!"); // Caixa de diálogo que será
executada se tudo der certo.
return Result.Succeeded; // Retorno que tudo ocorreu bem.
} catch (Exception ex) { // Tratamento de exceção.
message = ex.Message;
TaskDialog.Show("Error!",message);
return Result.Failed; // Retorno de erro.
//throw; // Código a ser comentado.
}
//throw new NotImplementedException(); // Código a ser comentado.
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
Página 179
Página 180
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<RevitAddIns>
<AddIn Type="Command">
<Name>SampleApplication</Name>
<Assembly>C:\Temp\RevitPlugins\ TreinaOlaRevit20180731.dll</Assembly> (Arquivo e
Local onde copiaremos nossa dll, resultado do arquivo copilado)
<AddInId>BC05297E-11B0-4CCC-A0F4-35AFC0DD12E7</AddInId> (Código único de Id do
Plugin, que pode ser gerado no Visual Studio)
<FullClassName> TreinaOlaRevit20180731.OlaRevit</FullClassName> (NameSpace e nome
da classe que criamos)
<VendorId>ETlipse</VendorId>
<VendorDescription>Edson Andrade, Rogerio Lima, Joel Diniz</VendorDescription>
</AddIn>
</RevitAddIns>
Página 181
Página 182
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 183
Página 184
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 185
Página 186
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<RevitAddIns>
<AddIn Type="Application">
<Name>SampleApplication</Name>
<Assembly>C:\Temp\RevitPlugins\RevitAPIGuide2014_AddPanel_20180708.dll</Assembly>
<AddInId>BC05297E-11B0-4CCC-A0F4-35AFC0DD12E7</AddInId>
<FullClassName>RevitAPIGuide2014_AddPanel_20180708.CsAddPanel</FullClassName>
using System; <VendorId>ETlipse</VendorId>
using System.Collections.Generic; <VendorDescription>Edson Andrade, Rogerio Lima, Joel Diniz</VendorDescription>
using System.Linq; </AddIn>
using System.Text; </RevitAddIns>
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
using System.Windows.Media.Imaging;
namespace RevitAPIGuide2014_AddPanel_20180708{
[Transaction(TransactionMode.Manual)]
public class CsAddPanel : Autodesk.Revit.UI.IExternalApplication {
return Result.Succeeded;
}
return Result.Succeeded;
}
Página 187
Página 188
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 189
Página 190
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 191
Página 192
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
}
} catch (Exception e) {
message = e.Message;
return Result.Failed;
}
return Result.Succeeded;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using System;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;
namespace WpfAppRevitAPI20180619 {
using System.Text;
using System.Threading.Tasks;
[Transaction(TransactionMode.Manual)]
using Autodesk.Revit.DB;
class PickElement : IExternalCommand {
using Autodesk.Revit.UI;
public Result Execute(ExternalCommandData commandData, ref string message,
using Autodesk.Revit.UI.Selection;
ElementSet elements) {
using Autodesk.Revit.Attributes;
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
namespace RvtAPIG14_RetrieveSelElement_20180711{
Document doc = uiDoc.Document;
Selection sel = uiDoc.Selection;
[Transaction(TransactionMode.Manual)]
public class Document_Selection : IExternalCommand {
Element selectedElement =
Result IExternalCommand.Execute(ExternalCommandData commandData, ref string
doc.GetElement(sel.PickObject(ObjectType.Element, "Select object!"));
message, ElementSet elements) {
try {
string elementInfo = "Category name: "+ selectedElement.Category.Name +
// Select some element in Revit before invoking this command.
"\nName: " + selectedElement.Name;
// Get the handle of the current document.
TaskDialog.Show("Object information: ", elementInfo);
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document currentDoc = uiDoc.Document;
return Result.Succeeded;
}
// Get the element selection of current document.
}
Selection selection = uiDoc.Selection;
}
ICollection<ElementId> selectedIds = selection.GetElementIds();
if (selectedIds.Count == 0) {
// If no elements selected.
TaskDialog.Show("Revit", "You haven't selected any elements.");
} else {
String info = "Ids of selected elements in the document are: ";
foreach (ElementId elemId in selectedIds) {
info += "\n\t" + elemId.IntegerValue;
}
TaskDialog.Show("Revit", info);
Página 193
Página 194
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 195
Página 196
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
<Window x:Class="RevitCommand.HelloWPF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RevitCommand"
mc:Ignorable="d"
Title="Hello WPF" Height="300" Width="300">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button x:Name="btnMessage" Width="100" Height="33" Margin="5, 9, 5, 5"
Click="btnMessage_Click">Message</Button>
</StackPanel>
</Window>
<Window x:Class="RevitCommand.HelloWPF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RevitCommand"
mc:Ignorable="d"
Title="Hello WPF" Height="300" Width="300">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button x:Name="btnMessage" Width="100" Height="33" Margin="5, 9, 5, 5"
Click="btnMessage_Click">Message</Button>
</StackPanel>
</Window>
Página 197
Página 198
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace RevitCommand {
/// <summary>
/// Interaction logic for HelloWPF.xaml
/// </summary>
public partial class HelloWPF : Window, IDisposable {
public HelloWPF() { using System;
InitializeComponent(); using System.Collections.Generic;
} using System.Linq;
using System.Text;
public void Dispose() { using System.Threading.Tasks;
this.Close(); using Autodesk.Revit.ApplicationServices;
} using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
private void btnMessage_Click(object sender, RoutedEventArgs e) { using Autodesk.Revit.Attributes;
MessageBox.Show("Revit API by eTlipse!", "Ola Revit com WPF!"); using Autodesk.Revit.UI.Selection;
}
}
} namespace RevitCommand {
[Transaction(TransactionMode.Manual)]
class RevitWithWPF : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) {
HelloWPF helloWPF = new HelloWPF();
helloWPF.Show();
return Result.Succeeded;
}
}
Página 199
Página 200
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
}
Página 201
Página 202
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
// Select Element
public Element SelectElement(UIDocument uiDoc, Document doc) { namespace BIMRevitAPI20181017 {
Reference reference = uiDoc.Selection.PickObject(ObjectType.Element);
Element element = uiDoc.Document.GetElement(reference); [Transaction(TransactionMode.Manual)]
return element; class BIMRevitAPI_20181017 : IExternalCommand {
}
// Plugin entrance
// Get Parameter Value public Result Execute(ExternalCommandData commandData, ref string message,
public string GetParameterValue(Parameter parameter) { ElementSet elements) {
switch (parameter.StorageType) {
case StorageType.None: try {
return parameter.AsValueString(); // Connecting Application, Document, etc...
case StorageType.Integer: UIApplication uiApp = commandData.Application;
// Get value with unit, AsInteger() can get value without unit UIDocument uiDoc = uiApp.ActiveUIDocument;
return parameter.AsValueString(); Application app = uiApp.Application;
case StorageType.Double: Document doc = uiDoc.Document;
// Get value with unit, AsDouble() can get value without unit Selection sel = uiDoc.Selection;
return parameter.AsValueString();
case StorageType.String: Element e = SelectElement(uiDoc, doc);
return parameter.AsValueString(); Parameter parameter =
case StorageType.ElementId: e.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET);
return parameter.AsElementId().IntegerValue.ToString();
default: using (Transaction t = new Transaction(doc, "Param")) {
return ""; t.Start("Param");
} try {
} parameter.Set(-5); // 5 feet - Revit trabalha internamente com
feet - 1 feet = 0,3048 meters
} } catch (Exception ex) {
message = ex.Message;
} TaskDialog.Show("Error!",message);
}
t.Commit();
TaskDialog.Show("New Value", GetParameterValue(parameter));
}
// Select Element
public Element SelectElement(UIDocument uiDoc, Document doc) {
Reference reference = uiDoc.Selection.PickObject(ObjectType.Element);
Element element = uiDoc.Document.GetElement(reference);
// Atenção - Revit trabalha internamente com pés (feet). 1 feet = 0,3048 meters! return element;
}
Página 203
Página 204
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
return parameter.AsValueString(); } else {
case StorageType.ElementId: // Interação com o Excel
return parameter.AsElementId().IntegerValue.ToString(); Excel.Application xlApp = new
default: Microsoft.Office.Interop.Excel.Application();
return ""; if (xlApp == null) {
} MessageBox.Show("Excel is not properly installed!!");
} return Result.Failed;
}
} Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
} object misValue = System.Reflection.Missing.Value;
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet =
(Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Página 205
Página 206
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
}
TaskDialog.Show("Revit!", prompt);
return Result.Succeeded;
} catch (Exception ex) {
// In case of error.
TaskDialog.Show("Error!", ex.Message);
return Result.Failed;
}
}
}
using System;
using System.Collections.Generic; using System;
using System.Linq; using System.Collections.Generic;
using System.Text; using System.Linq;
using System.Threading.Tasks; using System.Text;
using Autodesk.Revit.ApplicationServices; using System.Threading.Tasks;
using Autodesk.Revit.UI; using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB; using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes; using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection; using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
namespace Temp20190501 {
namespace Temp20190501 {
[Transaction(TransactionMode.Manual)]
class Temp20190501 : IExternalCommand { [Transaction(TransactionMode.Manual)]
public Result Execute(ExternalCommandData commandData, ref string message, class Temp20190501 : IExternalCommand {
ElementSet elements) { /// <summary>
// Estabelecendo conexoes. /// Commando para Revit usando sua API.
UIApplication uiApp = commandData.Application; /// </summary>
UIDocument uiDoc = uiApp.ActiveUIDocument; /// <param name="commandData"></param>
Application app = uiApp.Application; /// <param name="message"></param>
Document doc = uiDoc.Document; /// <param name="elements"></param>
Selection sel = uiDoc.Selection; /// <returns></returns>
public Result Execute(ExternalCommandData commandData, ref string message,
try { ElementSet elements) {
// Find all wall instances in the document by using category filter. // Estabelecendo conexoes.
ElementCategoryFilter filter = new UIApplication uiApp = commandData.Application;
ElementCategoryFilter(BuiltInCategory.OST_Walls); UIDocument uiDoc = uiApp.ActiveUIDocument;
// Apply the filter to the elements in the active document. Application app = uiApp.Application;
//Use shortcut WhereElementIsNotElementType() to find wall instances Document doc = uiDoc.Document;
only. Selection sel = uiDoc.Selection;
FilteredElementCollector collector = new
FilteredElementCollector(doc); try {
IList<Element> walls = /* Criar um filtro ElementParameter para encontrar rooms com área
collector.WherePasses(filter).WhereElementIsNotElementType().ToElements(); superiores a um dado valor
String prompt = "The walls in the current document are:\n"; * Criar um filtro usando provider e evaluator
foreach (Element e in walls) { */
prompt = prompt + e.Name + "\n"; BuiltInParameter areaParam = BuiltInParameter.ROOM_AREA;
Página 207
Página 208
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
// Provider using System;
ParameterValueProvider pvp = new ParameterValueProvider(new using System.Collections.Generic;
ElementId((int)areaParam)); using System.Linq;
// Evaluator using System.Text;
FilterNumericRuleEvaluator fnrv = new FilterNumericGreater(); using System.Threading.Tasks;
// Rule value using Autodesk.Revit.ApplicationServices;
double ruleValue = 100.0f; // Filtrar rooms com area superior a este using Autodesk.Revit.UI;
valor. using Autodesk.Revit.DB;
// Rule using Autodesk.Revit.Attributes;
FilterRule fRule = new FilterDoubleRule(pvp, fnrv, ruleValue, 1E-6); using Autodesk.Revit.UI.Selection;
} // Listar as portas
String prompt = "Portas:\n";
foreach (Element element in doors) {
prompt = prompt + "ID - " + element.Id + " / Nome - " +
element.Name + "\n";
}
TaskDialog.Show("Revit API", prompt);
return Result.Succeeded;
} catch (Exception ex) {
message = ex.Message;
TaskDialog.Show("Error!", message);
return Result.Failed;
}
}
}
Página 209
Página 210
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
TaskDialog.Show("Revit API", prompt);
break;
} }
}
return Result.Succeeded;
} catch (Exception ex) {
message = ex.Message;
TaskDialog.Show("Error!", message);
return Result.Failed;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Architecture;
namespace RevitAPI20190820 {
Página 211
Página 212
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
FilteredElementCollector collector = new namespace RevitAPI20190820 {
FilteredElementCollector(doc);
collector.WherePasses(filter); [Transaction(TransactionMode.Manual)]
class RevitAPI : IExternalCommand {
// Usar Linq para encontrar a instancia de familia cujo nome seja 10" public Result Execute(ExternalCommandData commandData, ref string message,
Coluna ElementSet elements) {
var query = from element in collector
where element.Name == "10\" Coluna" // Estabelecendo as conexoes
select element; UIApplication uiApp = commandData.Application;
// Fazer um cast do elemento encontrado para instancia de familia UIDocument uiDoc = uiApp.ActiveUIDocument;
// essa conversao é segura para FamilyInstance porque foi usado Application app = uiApp.Application;
ElementClassFilter para FamilyInsance Document doc = uiDoc.Document;
List<FamilyInstance> familyInstances = Selection sel = uiDoc.Selection;
query.Cast<FamilyInstance>().ToList<FamilyInstance>();
String prompt = "Faily Instances:\n"; try {
foreach (FamilyInstance instance in familyInstances) { // Pegar os elementos selecionados no documento atual
prompt = prompt + instance.Id.ToString() + "\n"; IList<Reference> references = sel.PickObjects(ObjectType.Element);
}
TaskDialog.Show("Revit API", prompt); // Mostra quantidade de elementos selecionados. Eh preciso acionar os
return Result.Succeeded; botoes Finish ou Cancel para finalizar a selecao
} catch (Exception ex) { TaskDialog.Show("Revit API!", "Numero de elementos selecionados: " +
message = ex.Message; references.Count.ToString());
TaskDialog.Show("Error!", message);
return Result.Failed; // Criar uma nova selecao de elementos para receber os elementos
} especificos de interesse da selecao mais ampla
} IList<Element> collection = new List<Element>();
}
// Adicionamos apenas Walls aa colecao
foreach (Reference reference in references) {
} Element element = doc.GetElement(reference);
if (element is Wall) {
collection.Add(element);
}
}
return Result.Succeeded;
return Result.Failed;
}
using System; }
using System.Collections.Generic; }
using System.Linq;
using System.Text;
using System.Threading.Tasks; }
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
Página 213
Página 214
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices; using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.UI; using Autodesk.Revit.UI;
using Autodesk.Revit.DB; using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes; using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection; using Autodesk.Revit.UI.Selection;
[Transaction(TransactionMode.Manual)] [Transaction(TransactionMode.Manual)]
class RevitAPI : IExternalCommand { class RevitAPI : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message, public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) { ElementSet elements) {
try { try {
// Selecione alguns elementos antes da execucao // Adquirindo os elementos selecionados no documento corrente
ICollection<ElementId> selectedIds = sel.GetElementIds();
ICollection<ElementId> selectedIds = sel.GetElementIds();
// Exibe o numero corrente de elementos selecionados
if (0 == selectedIds.Count) { TaskDialog.Show("Revit API!", "Numero de elementos selecionados: " +
// Se nenhuma elemento for selecionado selectedIds.Count.ToString());
TaskDialog.Show("Revit", "Voce nao selecionou nenhum elemento.");
} else { // Entrar na selecao e filtrar apenas as paredes
String info = "Os Ids dos elementos selecionados no docuento sao: ICollection<ElementId> selectedWallIds = new List<ElementId>();
";
foreach (ElementId id in selectedIds) { foreach (ElementId id in selectedIds) {
info += "\n\t" + id.IntegerValue; Element element = doc.GetElement(id);
} if (element is Wall) {
selectedWallIds.Add(id);
TaskDialog.Show("Revit API", info); }
} }
Página 215
Página 216
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
} string prompt = string.Format("{0} elementos foram adicionados aa
selecao!", newSelectionCount - selectionCount);
TaskDialog.Show("Revit API!", prompt);
} }
return Result.Succeeded;
return Result.Failed;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System;
using System.Threading.Tasks; using System.Collections.Generic;
using Autodesk.Revit.ApplicationServices; using System.Linq;
using Autodesk.Revit.UI; using System.Text;
using Autodesk.Revit.DB; using System.Threading.Tasks;
using Autodesk.Revit.Attributes; using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.UI.Selection; using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
namespace RevitAPI20190820 { using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
[Transaction(TransactionMode.Manual)]
class RevitAPI : IExternalCommand { namespace RevitAPI20190820 {
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) { [Transaction(TransactionMode.Manual)]
class RevitAPI : IExternalCommand {
// Estabelecendo as conexoes public Result Execute(ExternalCommandData commandData, ref string message,
UIApplication uiApp = commandData.Application; ElementSet elements) {
UIDocument uiDoc = uiApp.ActiveUIDocument;
Application app = uiApp.Application; // Estabelecendo as conexoes
Document doc = uiDoc.Document; UIApplication uiApp = commandData.Application;
Selection sel = uiDoc.Selection; UIDocument uiDoc = uiApp.ActiveUIDocument;
Application app = uiApp.Application;
try { Document doc = uiDoc.Document;
// Seleciona apenas um elemento do Revit Selection sel = uiDoc.Selection;
int selectionCount = 0;
Reference hasPickOne = sel.PickObject(ObjectType.Element); try {
if (hasPickOne != null) { // Snap point
selectionCount = 1; ObjectSnapTypes snapTypes = ObjectSnapTypes.Endpoints |
TaskDialog.Show("Revit API!", "Um elemento foi adicionado aa ObjectSnapTypes.Intersections;
selecao!"); XYZ point = sel.PickPoint(snapTypes, "Selecione um ponto final ou de
} interseccao!");
Página 217
Página 218
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
message = ex.Message; info += elem.Name + "\n";
TaskDialog.Show("Error!", message); }
return Result.Failed; TaskDialog.Show("Revit", info);
}
return Result.Succeeded; return Result.Succeeded;
} } catch (Exception ex) {
} TaskDialog.Show("Revit API sample fail: ", ex.Message);
return Result.Failed;
}
} }
}
}
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace RevitCommand {
[Transaction(TransactionMode.Manual)]
class RevitWithWPF : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) {
using Autodesk.Revit.ApplicationServices;
// Estabelecendo conexoes using Autodesk.Revit.Attributes;
UIDocument uiDoc = commandData.Application.ActiveUIDocument; using Autodesk.Revit.DB;
Document doc = uiDoc.Document; using Autodesk.Revit.UI;
Selection sel = uiDoc.Selection; using Autodesk.Revit.UI.Selection;
IList<Element> elems = sel.PickElementsByRectangle(); using System;
using System.Collections.Generic;
try { using System.Linq;
string info = "Elementos selecionados:\n"; using System.Text;
foreach (Element elem in elems) { using System.Threading.Tasks;
info += elem.Name + "\n";
} namespace RvtAPI_Temp_Prj_20191016 {
TaskDialog.Show("Revit", info);
[Transaction(TransactionMode.Manual)]
info = "Niveis no documento:\n"; public class ParameterInfo : IExternalCommand {
FilteredElementCollector collector = new public Result Execute(ExternalCommandData commandData, ref string message,
FilteredElementCollector(doc); ElementSet elements) {
ICollection<Element> collection =
collector.OfClass(typeof(Level)).ToElements(); // Estabelecendo as conexoes
foreach (Element elem in collection) { UIApplication uiApp = commandData.Application;
Página 219
Página 220
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Application app = uiApp.Application; }
Document doc = uiDoc.Document; break;
Selection sel = uiDoc.Selection; default:
defName = "Parametro inesperado!";
try { break;
// Selecionar elemento }
Element element = doc.GetElement(sel.PickObject(ObjectType.Element, return defName;
"Selecione um elemento!")); }
}
// String que recebera os parametros }
StringBuilder st = new StringBuilder();
st.AppendLine("Mostrar parametros do elemento selecionado:\n");
// Retornar informacoes
TaskDialog.Show("Revit API - eTlipse!", st.ToString());
return Result.Succeeded;
using Autodesk.Revit.ApplicationServices;
} catch (Exception ex) { using Autodesk.Revit.Attributes;
message = ex.Message; using Autodesk.Revit.DB;
TaskDialog.Show("Revit API - Error!", message); using Autodesk.Revit.UI;
return Result.Failed; using Autodesk.Revit.UI.Selection;
} using System;
} using System.Collections.Generic;
string GetParameterInformation(Parameter para, Document document) { using System.Linq;
string defName = para.Definition.Name + "\t -> \t"; using System.Text;
// Usar diferentes metodos para adquirir os dados dos parametros de acordo using System.Threading.Tasks;
com o tipo armazenado
switch (para.StorageType) { namespace RvtAPI_Temp_Prj_20191016 {
case StorageType.None:
defName = "Parametro inesperado!"; [Transaction(TransactionMode.Manual)]
break; public class ParameterInfo : IExternalCommand {
case StorageType.Integer: public Result Execute(ExternalCommandData commandData, ref string message,
if (ParameterType.YesNo == para.Definition.ParameterType) { ElementSet elements) {
if (para.AsInteger() == 0) {
defName += " : " + "False"; // Estabelecendo as conexoes
} else { UIApplication uiApp = commandData.Application;
defName += " : " + "True"; UIDocument uiDoc = uiApp.ActiveUIDocument;
} Application app = uiApp.Application;
} else { Document doc = uiDoc.Document;
defName += " : " + para.AsInteger().ToString(); Selection sel = uiDoc.Selection;
}
break; try {
case StorageType.Double: // Selecionar elemento
// Converter o numero em Metro Element element = doc.GetElement(sel.PickObject(ObjectType.Element,
defName += para.AsValueString(); "Selecione um elemento!"));
break;
case StorageType.String: // String que recebera os dados do parametro
defName += " : " + para.AsValueString(); string prompt = "Parametro :\n";
break;
case StorageType.ElementId: // Encontrar parametro
// Encontrar o nome do elemento Parameter elementParameter = FindParameter(element);
ElementId id = para.AsElementId(); prompt += elementParameter.AsValueString();
if (id.IntegerValue >= 0) {
defName += " : " + document.GetElement(id).Name; // Exibir informacoes
} else { TaskDialog.Show("Revit API - eTlipse!", prompt);
defName += " : " + id.IntegerValue.ToString();
Página 221
Página 222
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
return Result.Succeeded;
// String que recebera os dados do parametro
} catch (Exception ex) { string prompt = "Valor do parametro :\n";
message = ex.Message;
TaskDialog.Show("Revit API - Error!", message); // Encontrar parametro
return Result.Failed; Parameter elementParameter = FindBuiltInParameter(element);
} prompt += elementParameter.AsValueString();
}
public Parameter FindParameter(Element element) { // Exibir informacoes
Parameter foundParameter = null; TaskDialog.Show("Revit API - eTlipse!", prompt);
// Encontrar o primeiro parametro que mede comprimento
foreach (Parameter parameter in element.Parameters) { return Result.Succeeded;
if (parameter.Definition.ParameterType == ParameterType.Length) {
foundParameter = parameter; } catch (Exception ex) {
break; message = ex.Message;
} TaskDialog.Show("Revit API - Error!", message);
} return Result.Failed;
return foundParameter; }
} }
} public Parameter FindBuiltInParameter(Wall wall) {
} // Usar WALL_BASE_OFFSET parametrId para acessar o parâmetro base offeset
da parede
BuiltInParameter paraIndex = BuiltInParameter.WALL_BASE_OFFSET;
Parameter parameter = wall.get_Parameter(paraIndex);
return parameter;
}
}
}
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
Página 223
Página 224
// Estabelecendo as conexoes
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
UIApplication uiApp = commandData.Application; }
UIDocument uiDoc = uiApp.ActiveUIDocument; return result;
Application app = uiApp.Application; }
Document doc = uiDoc.Document;
Selection sel = uiDoc.Selection; }
}
try {
// Selecionar parede
Wall wall = doc.GetElement(sel.PickObject(ObjectType.Element,
"Selecione uma parede!")) as Wall;
// Usar WALL_BASE_OFFSET parametrId para acessar o parâmetro base
offeset da parede
BuiltInParameter paraIndex = BuiltInParameter.WALL_BASE_OFFSET;
Parameter parameter = wall.get_Parameter(paraIndex);
bool valueChanged = false;
double newValue = 0.3;
Página 225
Página 226
try {
// Selecionar uma parede
FamilyInstance opening =
doc.GetElement(sel.PickObject(ObjectType.Element, "Selecione uma abertura!")) as
FamilyInstance;
return Result.Succeeded;
} catch (Exception ex) {
TaskDialog.Show("Revit API sample fail: ", ex.Message);
return Result.Failed;
}
}
}
}
using System;
Página 227
Página 228
using System.Collections.Generic;
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
// Estabelecendo conexoes
try {
// Selecionar um pilar
FamilyInstance column =
doc.GetElement(sel.PickObject(ObjectType.Element, "Selecione um pilar!"))
as FamilyInstance;
transactionPilar.Start();
using Autodesk.Revit.ApplicationServices;
using System; }
using System.Collections.Generic;
using System.Linq;
Página 229
Página 230
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
column = doc.GetElement(sel.PickObject(ObjectType.Element, "Selecione // Mover parede usando Curve
um pilar.")) as FamilyInstance;
using (Transaction transactionParedeCurve = new Transaction(doc, "Mover
parede com Curve.")) {
// Mover pilar usando Point transactionParedeCurve.Start();
using (Transaction transactionPilarPoint = new Transaction(doc, "Mover LocationCurve wallLine = wall.Location as LocationCurve;
pilar com Point.")) {
XYZ p1 = XYZ.Zero;
transactionPilarPoint.Start();
XYZ p2 = new XYZ(10, 20, 0);
LocationPoint columnPoint = column.Location as LocationPoint;
Line newWallLine = Line.CreateBound(p1, p2);
if (null != columnPoint) {
wallLine.Curve = newWallLine;
// Mover o pilar para a nova posicao
transactionParedeCurve.Commit();
columnPoint.Point = newLocation;
}
}
transactionPilarPoint.Commit();
TaskDialog.Show("Revit API!", "Parede movida usando Curve!");
}
return Result.Failed;
wallLine.Move(translationVec);
transactionParedeLocation.Commit();
Página 231
Página 232
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
// O eixo deve ser uma bound line
Line axis = Line.CreateBound(point1, point2);
using Autodesk.Revit.ApplicationServices; // Movemos o pilar antes para o ponto base apenas para melhor
using Autodesk.Revit.Attributes; visualiza
using Autodesk.Revit.DB;
using Autodesk.Revit.UI; // Mover nao faz parte da rotacao e nao eh necessario
using Autodesk.Revit.UI.Selection; LocationPoint locationPoint = element.Location as LocationPoint;
using System; locationPoint.Point = point1;
using System.Collections.Generic;
using System.Linq; // Fazer a rotacao em torno do eixo do elemento
using System.Text; ElementTransformUtils.RotateElement(document, element.Id, axis,
using System.Threading.Tasks; Math.PI / 3.0);
using System.Windows; transactionRotateColumn.Commit();
}
namespace RevitCommand {
[Transaction(TransactionMode.Manual)] }
class RevitWithWPF : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message, /// <summary>
ElementSet elements) { /// Rotacionar uma parede baseado no LocationCurve.
/// </summary>
// Estabelecendo conexoes /// <param name="document"></param>
UIDocument uiDoc = commandData.Application.ActiveUIDocument; /// <param name="element"></param>
Document doc = uiDoc.Document; /// <returns></returns>
Selection sel = uiDoc.Selection; bool LocationRotateByCurve(Document document, Element element) {
bool rotated = false;
try {
// Rotacionar o elemento via sua LocationCurve
// Selecionar um elemento. Neste caso tipo parede para ter uma linha using (Transaction transactionLocationRotate = new Transaction(document,
base! "Rotacionar por LocationCurve.")) {
Element element = doc.GetElement(sel.PickObject(ObjectType.Element, transactionLocationRotate.Start();
"Selecionar um elemento!")); LocationCurve curve = element.Location as LocationCurve;
if (null != curve) {
// Rotacionar um pilar baseado em seu eixo Curve line = curve.Curve;
//RotateColumn(doc, element); XYZ aa = line.GetEndPoint(0);
XYZ cc = new XYZ(aa.X, aa.Y, aa.Z + 10);
// Rotacionar elemento baseado em LocationCurve Line axis = Line.CreateBound(aa, cc);
//LocationRotateByCurve(doc, element); rotated = curve.Rotate(axis, Math.PI / 2.0);
}
// Rotacionar elemento baseado em LocationPoint transactionLocationRotate.Commit();
LocationRotateByPoint(doc, element); }
return rotated;
return Result.Succeeded; }
} catch (Exception ex) {
TaskDialog.Show("Revit API sample fail: ", ex.Message); /// <summary>
return Result.Failed; /// Rotacionar uma parede baseado no LocationPoint.
} /// </summary>
} /// <param name="document"></param>
/// <param name="element"></param>
/// <summary> /// <returns></returns>
/// Rotaciona um pilar baseado em seu eixo. bool LocationRotateByPoint(Document document, Element element) {
/// </summary> bool rotate = false;
/// <param name="document"></param>
/// <param name="element"></param> // Rotacionar o elemento via LocationPoint
public void RotateColumn(Document document, Element element) { using (Transaction transactionLocationPoint = new Transaction(document,
XYZ point1 = new XYZ(10, 20, 0); "Rotacionar por LocationPoint.")) {
XYZ point2 = new XYZ(10, 20, 30); transactionLocationPoint.Start();
Página 233
Página 234
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
LocationPoint location = element.Location as LocationPoint; return Result.Succeeded;
if (null != location) { } catch (Exception ex) {
XYZ aa = location.Point; TaskDialog.Show("Revit API sample fail: ", ex.Message);
XYZ cc = new XYZ(aa.X, aa.Y, aa.Z + 10); return Result.Failed;
Line axis = Line.CreateBound(aa, cc); }
rotate = location.Rotate(axis, Math.PI / 2.0); }
}
transactionLocationPoint.Commit(); /// <summary>
} /// Mirror wall
return rotate; /// </summary>
} /// <param name="document"></param>
/// <param name="wall"></param>
} public void MirrorWall(Document document, Wall wall) {
}
Reference reference = HostObjectUtils.GetSideFaces(wall,
ShellLayerType.Exterior).First();
UV bboxMin = face.GetBoundingBox().Min;
// Create a plane based on this side face with an offset of 10 in the x &
y directions
namespace RevitCommand {
[Transaction(TransactionMode.Manual)]
class RevitWithWPF : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) {
// Establishing connections
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
Selection sel = uiDoc.Selection;
try {
// Mirror wall
MirrorWall(doc, wall);
using Autodesk.Revit.ApplicationServices;
Página 235
Página 236
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB; transactionDeleteElements.Commit();
using Autodesk.Revit.UI; }
using Autodesk.Revit.UI.Selection;
using System; // Select elements not deleted
using System.Collections.Generic; allElements = collector.WhereElementIsNotElementType()
using System.Linq; .WhereElementIsViewIndependent()
using System.Text; .ToElements();
using System.Threading.Tasks;
using System.Windows; // Grouping elements just to show how to group elements. Not necessary
to delete
namespace RevitCommand { using (Transaction transactionGroupingElements = new Transaction(doc,
[Transaction(TransactionMode.Manual)] "Gruping elements")) {
class RevitWithWPF : IExternalCommand { transactionGroupingElements.Start();
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) { Group group = null;
Página 237
Página 238
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
transactionDeleteElement.Start(); using System.Text;
using System.Threading.Tasks;
ICollection<ElementId> deleteIdSet = document.Delete(elementId); using System.Windows;
} return Result.Succeeded;
/// <summary>
/// Count elements (walls) in the active view
/// </summary>
/// <param name="document"></param>
public void CountElements(Document document) {
}
}
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
Página 239
Página 240
using System.Linq;
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
prompt += "a floor view.";
break;
case ViewType.EngineeringPlan:
prompt += "an engeneering view.";
break;
case ViewType.AreaPlan:
prompt += "an area view.";
break;
case ViewType.CeilingPlan:
prompt += "a ceiling view.";
break;
using Autodesk.Revit.ApplicationServices;
case ViewType.Elevation:
using Autodesk.Revit.Attributes;
prompt += "an elevation view.";
using Autodesk.Revit.DB;
using Autodesk.Revit.UI; break;
using Autodesk.Revit.UI.Selection; case ViewType.Section:
prompt += "a section view.";
using System;
break;
using System.Collections.Generic;
case ViewType.Detail:
using System.Linq;
using System.Text; prompt += "a detail view.";
break;
using System.Threading.Tasks;
case ViewType.ThreeD:
using System.Windows;
prompt += "a threeD view.";
break;
namespace RevitCommand {
[Transaction(TransactionMode.Manual)] case ViewType.Schedule:
prompt += "a schedule view.";
class RevitWithWPF : IExternalCommand {
break;
public Result Execute(ExternalCommandData commandData, ref string message,
case ViewType.DraftingView:
ElementSet elements) {
prompt += "a drafting view.";
// Establishing connections break;
case ViewType.DrawingSheet:
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
prompt += "a drawing sheet view.";
Document doc = uiDoc.Document;
break;
Selection sel = uiDoc.Selection;
case ViewType.Legend:
prompt += "a legend view.";
try {
break;
case ViewType.Report:
View activeView = doc.ActiveView;
prompt += "a report view.";
break;
GetViewType(activeView);
case ViewType.ProjectBrowser:
GetViewFamily(doc, activeView);
prompt += "a project browser view.";
break;
return Result.Succeeded;
case ViewType.SystemBrowser:
prompt += "a system browser view.";
} catch (Exception ex) {
break;
TaskDialog.Show("Revit API sample fail: ", ex.Message);
case ViewType.CostReport:
return Result.Failed;
prompt += "a cost report view.";
}
} break;
case ViewType.LoadsReport:
/// <summary> prompt += "a loads report view.";
break;
/// Determing the view type
case ViewType.PresureLossReport:
/// </summary>
prompt += "a presure loss view.";
/// <param name="view"></param>
break;
public void GetViewType(View view) {
case ViewType.PanelSchedule:
prompt += "a panel schedule view.";
// Get the view type of the given view and format the prompt string
break;
String prompt = "The view is ";
case ViewType.ColumnSchedule:
prompt += "a columns schedule view.";
switch (view.ViewType) {
case ViewType.Undefined: break;
case ViewType.Walkthrough:
prompt += "undefined.";
prompt += "a walkthrough view.";
break;
case ViewType.FloorPlan: break;
Página 241
Página 242
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
case ViewType.Rendering: [Transaction(TransactionMode.Manual)]
prompt += "a rendering view."; class RevitWithWPF : IExternalCommand {
break; public Result Execute(ExternalCommandData commandData, ref string message,
case ViewType.SystemsAnalysisReport: ElementSet elements) {
prompt += "a systems analysis report view.";
break; // Establishing connections
case ViewType.Internal: UIDocument uiDoc = commandData.Application.ActiveUIDocument;
prompt += "an internal view."; Document doc = uiDoc.Document;
break; Selection sel = uiDoc.Selection;
default:
prompt += "undefined."; try {
break;
} using (Transaction transactionCreatingView = new Transaction(doc,
// Give the user some information "Creating Perspective 3D View")) {
MessageBox.Show(prompt, "Revit API", MessageBoxButton.OK); transactionCreatingView.Start();
}
// Find a 3D view type
public void GetViewFamily(Document doc, View view) { IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new
ViewFamily viewFamily = ViewFamily.Invalid; FilteredElementCollector(doc).OfClass(typeof(ViewFamilyType))
let type = elem as
ElementId viewTypeId = view.GetTypeId(); ViewFamilyType
if (viewTypeId.IntegerValue > 1) { // Some views may not have a where
ViewFamilyType type.ViewFamily == ViewFamily.ThreeDimensional
ViewFamilyType viewFamilyType = doc.GetElement(viewTypeId) as select type;
ViewFamilyType;
viewFamily = viewFamilyType.ViewFamily; // Create a new Perspective View3D
} View3D view3D = View3D.CreatePerspective(doc,
viewFamilyTypes.First().Id);
// Give the user some information if (null != view3D) {
MessageBox.Show(viewFamily.ToString(), "Revit API", MessageBoxButton.OK); // By default, the 3D view uses a default orientation
} // Change the orientation by creating and setting a
ViewOrientation3D
XYZ eye = new XYZ(0, -100, 10);
} XYZ up = new XYZ(0, 0, 1);
} XYZ forward = new XYZ(0, 1, 0);
ViewOrientation3D newViewOrientation3D = new
ViewOrientation3D(eye, up, forward);
view3D.SetOrientation(newViewOrientation3D);
// Turn off the far clip plane with standard parameter API
Parameter farClip =
view3D.get_Parameter(BuiltInParameter.VIEWER_BOUND_ACTIVE_FAR); // BuiltInParameter
Enumeration "Far Clip Active"
farClip.Set(0);
}
transactionCreatingView.Commit();
}
return Result.Succeeded;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes; } catch (Exception ex) {
using Autodesk.Revit.DB; TaskDialog.Show("Revit API sample fail: ", ex.Message);
using Autodesk.Revit.UI; return Result.Failed;
using Autodesk.Revit.UI.Selection; }
using System; }
using System.Collections.Generic;
using System.Linq; }
using System.Text; }
using System.Threading.Tasks;
using System.Windows;
Página 243
Página 244
namespace RevitCommand {
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
transactionCreatingView.Commit();
}
using Autodesk.Revit.ApplicationServices;
return Result.Succeeded;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
} catch (Exception ex) {
using Autodesk.Revit.UI;
TaskDialog.Show("Revit API sample fail: ", ex.Message);
using Autodesk.Revit.UI.Selection;
return Result.Failed;
using System;
}
using System.Collections.Generic;
}
using System.Linq;
using System.Text;
}
using System.Threading.Tasks;
}
using System.Windows;
namespace RevitCommand {
[Transaction(TransactionMode.Manual)]
class RevitWithWPF : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) {
// Establishing connections
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
Selection sel = uiDoc.Selection;
try {
Página 245
Página 246
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
double elevation = 10.0;
Level level1 = Level.Create(doc, elevation);
ViewPlan floorView = ViewPlan.Create(doc,
viewFamilyTypes.First().Id, level1.Id);
ViewRange(doc, floorView);
} /// <summary>
} /// Applying a filter to a view
/// </summary>
/// <param name="doc"></param>
/// <param name="view"></param>
public static void CreateViewFilter(Document doc, View view) {
List<ElementId> categories = new List<ElementId>();
categories.Add(new ElementId(BuiltInCategory.OST_Walls));
List<FilterRule> filterRules = new List<FilterRule>();
Página 247
Página 248
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
ParameterFilterElement parameterFilterElement = IList<IList<Autodesk.Revit.DB.BoundarySegment>> segments =
ParameterFilterElement.Create(doc, "Example view filter", categories); room.GetBoundarySegments(new SpatialElementBoundaryOptions());
// Criterion 1 - wall type Function is "Exterior" if (null != segments) // The room may not be bound
ElementId exteriorParamId = new {
ElementId(BuiltInParameter.FUNCTION_PARAM); foreach (IList<Autodesk.Revit.DB.BoundarySegment> segmentList in
segments) {
filterRules.Add(ParameterFilterRuleFactory.CreateEqualsRule(exteriorParamId, CurveLoop loop = new CurveLoop();
(int)WallFunction.Exterior)); foreach (Autodesk.Revit.DB.BoundarySegment boundarySegment in
segmentList) {
// Criterion 2 - wall height > some number loop.Append(boundarySegment.GetCurve());
ElementId lengthId = new ElementId(BuiltInParameter.CURVE_ELEM_LENGTH); }
if (wall != null) {
Parameter sharedParam = wall.get_Parameter(spGuid); }
ElementId sharedParamId = sharedParam.Id;
}
filterRules.Add(ParameterFilterRuleFactory.CreateBeginsWithRule(sharedParamId, "15.",
true));
}
// Depreciated ParameterFilterElement.SetRules
// ElementFilter elemFilter =
CreateElementFilterFromFilterRules(filterRules);
List<ElementFilter> elemFilters = new List<ElementFilter>();
foreach (FilterRule filterRule in filterRules) {
ElementParameterFilter elemParamFilter = new
ElementParameterFilter(filterRule);
elemFilters.Add(elemParamFilter);
}
parameterFilterElement.SetElementFilter(elemFilter);
/// <summary>
/// Cropping a view
/// </summary>
/// <param name="room"></param>
/// <param name="view"></param>
public void CropAroundRoom(Room room, View view) {
if (view != null) {
Página 249
Página 250
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
/// Showing the Section Box
/// </summary>
private void ShowHideSection(View3D view3D) {
using Autodesk.Revit.ApplicationServices;
foreach (Parameter p in view3D.Parameters) {
using Autodesk.Revit.Attributes;
// Get Section Box parameter
using Autodesk.Revit.DB;
if (p.Definition.Name.Equals("Section Box")) {
using Autodesk.Revit.UI;
// Show Section Box
using Autodesk.Revit.UI.Selection;
p.Set(1);
using System;
// Hide Section Box
using System.Collections.Generic;
// p.Set(0);
using System.Linq;
break;
using System.Text;
}
using System.Threading.Tasks;
}
using System.Windows;
}
namespace RevitCommand {
/// <summary>
[Transaction(TransactionMode.Manual)]
/// Expanding and Hiding the Section Box
class RevitWithWPF : IExternalCommand {
/// </summary>
public Result Execute(ExternalCommandData commandData, ref string message,
/// <param name="view"></param>
ElementSet elements) {
private void ExpandSectionBox(View3D view) {
// The original section box
// Establishing connections
BoundingBoxXYZ sectionBox = view.GetSectionBox();
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
// Expand the section box
Selection sel = uiDoc.Selection;
XYZ deltaXYZ = sectionBox.Max - sectionBox.Min;
sectionBox.Max += deltaXYZ / 2;
try {
sectionBox.Min -= deltaXYZ / 2;
using (Transaction transaction3DViewsSectionBox = new Transaction(doc,
// After reseting the section box, it will be show in the view
"Working with 3D Views Section Box")) {
// It only works when the Section Box check box is checked in
transaction3DViewsSectionBox.Start();
// View property dialog
view.SetSectionBox(sectionBox);
// Find a 3D view type
IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new
// To deactivate the section box
FilteredElementCollector(doc).OfClass(typeof(ViewFamilyType))
// view.IsSectionBoxActive = false;
let type = elem as
ViewFamilyType
}
where
type.ViewFamily == ViewFamily.ThreeDimensional
private void ConvertMaxMintoWCS(View3D view, out XYZ max, out XYZ min) {
select type;
BoundingBoxXYZ sectionbox = view.GetSectionBox();
Transform transform = sectionbox.Transform;
// Create a new Isometric View3D
max = transform.OfPoint(sectionbox.Max);
View3D view3D = View3D.CreateIsometric(doc,
min = transform.OfPoint(sectionbox.Min);
viewFamilyTypes.First().Id);
}
// Showing the Section Box
}
ShowHideSection(view3D);
}
// Expanding and Hiding the Section Box
ExpandSectionBox(view3D);
transaction3DViewsSectionBox.Commit();
}
return Result.Succeeded;
/// <summary>
Página 251
Página 252
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
transform.Origin = origin;
transform.BasisX = normal;
transform.BasisY = XYZ.BasisZ;
Página 253
Página 254
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using Autodesk.Revit.DB;
/// <summary> using Autodesk.Revit.UI;
/// Creating a callout and reference callout using Autodesk.Revit.UI.Selection;
/// </summary> using System;
public void CreateCalloutView(Document document, View parentView) { using System.Collections.Generic;
using System.Linq;
// Find a detail view
IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new namespace RevitCommand {
FilteredElementCollector(document).OfClass(typeof(ViewFamilyType)) [Transaction(TransactionMode.Manual)]
let type = elem as class RevitWithWPF : IExternalCommand {
ViewFamilyType public Result Execute(ExternalCommandData commandData, ref string message,
where type.ViewFamily == ElementSet elements) {
ViewFamily.Detail
select type; // Establishing connections
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
ElementId viewFamilyTypeId = viewFamilyTypes.First().Id; Document doc = uiDoc.Document;
XYZ point1 = new XYZ(2, 2, 2); Selection sel = uiDoc.Selection;
XYZ point2 = new XYZ(30, 30, 30);
ElementId parentViewId = parentView.Id; // a ViewPlan using (Transaction transactionCreatingSheetView = new Transaction(doc,
View view = ViewSection.CreateCallout(document, parentViewId, "Creating Sheet View")) {
viewFamilyTypeId, point1, point2); transactionCreatingSheetView.Start();
try {
ViewSection.CreateReferenceCallout(document, parentViewId, view.Id,
point1, point2);
}
// Find a 3D view type
IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new
FilteredElementCollector(doc).OfClass(typeof(ViewFamilyType))
} let type = elem as
ViewFamilyType
} where
type.ViewFamily == ViewFamily.ThreeDimensional
select type;
CreateSheetView(doc, view3D);
transactionCreatingSheetView.Commit();
return Result.Succeeded;
/// <summary>
/// Creating a Sheet View
/// </summary>
private void CreateSheetView(Document document, View3D view3D) {
Página 255
Página 256
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
familyList.OfCategory(BuiltInCategory.OST_TitleBlocks);
// XYZ origin = new XYZ(xPosition, yPosition, 0); using (Transaction transactionCreatingSchedule = new Transaction(doc,
// Viewport viewport = Viewport.Create(document, viewSheet.Id, "Creating Schedule")) {
view3D.Id, origin); transactionCreatingSchedule.Start();
//} try {
Página 257
Página 258
FilteredElementCollector(doc);
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
//IList<Element> collectionSchedules = /// <param name="schedule"></param>
collectorSchedules.OfClass(typeof(ViewSchedule)).ToElements(); public void FormatLengthFields(ViewSchedule schedule) {
List<ViewSchedule> schedules = new List<ViewSchedule> { int nFields = schedule.Definition.GetFieldCount();
areaSchedule, noteBlockSchedule }; for (int n = 0; n < nFields; n++) {
ScheduleField field = schedule.Definition.GetField(n);
// Add fields to view schedule if (field.UnitType == UnitType.UT_Length) {
AddFieldToSchedule(schedules); FormatOptions formatOpts = new FormatOptions();
formatOpts.UseDefault = false;
transactionCreatingSchedule.Commit(); formatOpts.DisplayUnits =
DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES;
return Result.Succeeded; field.SetFormatOptions(formatOpts);
}
} catch (Exception ex) { }
TaskDialog.Show("Revit API sample fail!", ex.Message); }
transactionCreatingSchedule.RollBack();
return Result.Failed; /// <summary>
} /// Gruping headers
} /// Group columns of related data and remove redundant text from column
} headings
/// </summary>
// Create Schedule to a category /// <param name="colSchedule"></param>
//public ViewSchedule viewSchedule.CreateSchedule(Document document, ElementId /// <param name="startIndex"></param>
categoryId); /// <param name="groupText"></param>
public void GroupRelatedData(ViewSchedule colSchedule, int startIndex, int
endIndex, string groupText) {
/// <summary> colSchedule.GroupHeaders(0, startIndex, 0, endIndex, groupText);
/// Add fields to view schedule
/// </summary> // If column heading has groupText in it, remove it
/// <param name="schedules"> List of view schedule </param> // (i.e. if groupText is "Top" and field heading is "Top Level",
public void AddFieldToSchedule(List<ViewSchedule> schedules) { // change the heading to just "Level"
IList<SchedulableField> schedulableFields = null; for (int index = startIndex; index < endIndex; index++) {
ScheduleField field = colSchedule.Definition.GetField(index);
foreach (ViewSchedule vs in schedules) { field.ColumnHeading = field.ColumnHeading.Replace(groupText, "");
// Get all schedulable fields from view schedule definitions }
schedulableFields = vs.Definition.GetSchedulableFields(); }
Página 259
Página 260
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
TableCellStyleOverrideOptions options = new Document document = uiDoc.Document;
TableCellStyleOverrideOptions(); Selection sel = uiDoc.Selection;
options.FontSize = true;
options.Bold = true; using (Transaction transactionResetSlabShapes = new Transaction(document,
tcs.SetCellStyleOverrideOptions(options); "Reset Slab Shapes")) {
tcs.IsFontBold = true; transactionResetSlabShapes.Start();
tcs.TextSize = 10; try {
tsd.SetCellStyle(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber, tcs);
} // Reverting a slab's shape
} ResetSlabShapes(document);
transactionResetSlabShapes.Commit();
}
return Result.Succeeded;
}
} catch (Exception ex) {
TaskDialog.Show("Revit API sample fail!", ex.Message);
transactionResetSlabShapes.RollBack();
return Result.Failed;
}
}
}
///// <summary>
///// New Slab with Slope
///// </summary>
///// <param name="profile"></param>
///// <param name="level"></param>
///// <param name="slopeArrow"></param>
///// <param name="slope"></param>
///// <param name="isStrutural"></param>
///// <returns></returns>
//public Floor NewSlab(CurveArrArray profile, Level level, Line slopeArrow,
double slope, bool isStrutural);
/// <summary>
/// Reverting a slab's shape
/// </summary>
/// <param name="document"></param>
private void ResetSlabShapes(Document document) {
UIDocument uidoc = new UIDocument(document);
ICollection<ElementId> selectedIds = uidoc.Selection.GetElementIds();
foreach (ElementId id in selectedIds) {
Floor floor = document.GetElement(id) as Floor;
if (floor != null) {
SlabShapeEditor slabShapeEditor = floor.SlabShapeEditor;
using Autodesk.Revit.Attributes; slabShapeEditor.ResetSlabShape();
using Autodesk.Revit.DB; }
using Autodesk.Revit.DB.Architecture; }
using Autodesk.Revit.UI; }
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq; }
namespace RevitCommand { }
[Transaction(TransactionMode.Manual)]
class RevitWithWPF : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message,
ElementSet elements) {
// Establishing connections
Página 261
Página 262
// Before invoking this sample, select some walls to add a roof transactionFootPrintRoof.Commit();
over.
// Make sure there is a level named "Roof" in the document. return Result.Succeeded;
Página 263
Página 264
// Get CompoundStruture
CompoundStructure comStruct = aWallType.GetCompoundStructure();
Categories allCategories = document.Settings.Categories;
using Autodesk.Revit.Attributes;
// Get the category OST_Walls default material;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture; // Use if that layer`s default Material is <By Category>
Category wallCategory =
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection; allCategories.get_Item(BuiltInCategory.OST_Walls);
using System; Material wallMaterial = wallCategory.Material;
using System.Collections.Generic;
using System.Linq; foreach (CompoundStructureLayer structLayer in comStruct.GetLayers())
{
Material layerMaterial =
namespace RevitCommand {
document.GetElement(structLayer.MaterialId) as Material;
[Transaction(TransactionMode.Manual)]
class RevitAPIWithCSharp : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message, // If CompoundStructureLayer`s Material is specified, use default
ElementSet elements) { // Material of its Category
if (null == layerMaterial) {
switch (structLayer.Function) {
// Establishing connections
UIDocument uiDocument = commandData.Application.ActiveUIDocument; case MaterialFunctionAssignment.None:
Document document = uiDocument.Document; layerMaterial =
Selection selection = uiDocument.Selection; allCategories.get_Item(BuiltInCategory.OST_WallsDefault).Material;
break;
using (Transaction transactionLayerMaterial = new Transaction(document, case MaterialFunctionAssignment.Structure:
"Getting the CompoundStrutureLayer Material")) { layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsStructure).Material;
transactionLayerMaterial.Start();
try { break;
case MaterialFunctionAssignment.Substrate:
// Slect a Wall layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsSubstrate).Material;
break;
Página 265
Página 266
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
case MaterialFunctionAssignment.Insulation: namespace RevitCommand {
layerMaterial = [Transaction(TransactionMode.Manual)]
allCategories.get_Item(BuiltInCategory.OST_WallsInsulation).Material; class RevitAPIWithCSharp : IExternalCommand {
break; public Result Execute(ExternalCommandData commandData, ref string message,
case MaterialFunctionAssignment.Finish1: ElementSet elements) {
layerMaterial =
allCategories.get_Item(BuiltInCategory.OST_WallsFinish1).Material; // Establishing connections
break; UIDocument uiDocument = commandData.Application.ActiveUIDocument;
case MaterialFunctionAssignment.Finish2: Document document = uiDocument.Document;
layerMaterial = Selection selection = uiDocument.Selection;
allCategories.get_Item(BuiltInCategory.OST_WallsFinish2).Material;
break; using (Transaction transactionOpening = new Transaction(document,
case MaterialFunctionAssignment.Membrane: "Retriving existing opening properties")) {
layerMaterial = transactionOpening.Start();
allCategories.get_Item(BuiltInCategory.OST_WallsMembrane).Material; try {
break;
case MaterialFunctionAssignment.StructuralDeck: // Slect a Opening
layerMaterial = Opening opening =
allCategories.get_Item(BuiltInCategory.OST_WallsSurfacePattern).Material; document.GetElement(selection.PickObject(ObjectType.Element, "Select a Opening")) as
break; Opening;
default:
// It is impossible to reach here GetInfo_Opening(opening);
break;
} transactionOpening.Commit();
if (null == layerMaterial) {
// CompoundsStructureLayer`s default Material is its return Result.Succeeded;
SubCategory
layerMaterial = wallMaterial; } catch (Exception ex) {
} TaskDialog.Show("Revit API sample fail!", ex.Message);
} transactionOpening.RollBack();
TaskDialog.Show("Revit", "Layer Material" + layerMaterial.Name); return Result.Failed;
} }
} }
}
}
/// <summary>
} /// Retriving existing opening properties
/// </summary>
} /// <param name="opening"></param>
private void GetInfo_Opening(Opening opening) {
Página 267
Página 268
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
// Get the coordinate value pf the Max coordinate point Document document = uiDocument.Document;
point = opening.BoundaryRect[1]; Selection selection = uiDocument.Selection;
message += "\nMin coordinate point: (" + point.X + ", " + point.Y + ",
" + point.Z + ")"; using (Transaction transactionGetSubAndSuperComponents = new
} else { Transaction(document, "Getting SubComponents and SuperComponents from a
message += "\nThe opening doesn't have a rectangular boundary."; FamilyInstance")) {
// Get curve number transactionGetSubAndSuperComponents.Start();
int curves = opening.BoundaryCurves.Size; try {
message += "\nNumber of curves is: " + curves;
for (int i = 0; i < curves; i++) { // Select a FamilyInstance
Curve curve = opening.BoundaryCurves.get_Item(i); FamilyInstance familyInstance =
//Get curve start point document.GetElement(selection.PickObject(ObjectType.Element, "Select a
message += "\nCurve start point: " + FamilyInstance")) as FamilyInstance;
XYZToString(curve.GetEndPoint(0));
//Get curve end point GetSubAndSuperComponents(familyInstance);
message += "\n; Curve end point: " +
XYZToString(curve.GetEndPoint(1)); GetInfo_FamilyInstance(familyInstance);
}
} transactionGetSubAndSuperComponents.Commit();
Página 269
Página 270
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
message += "\nFamilyInstance AnalyticalModel is : " +
familyInstance.GetAnalyticalModel();
}
using Autodesk.Revit.Attributes;
using Autodesk.Revit.Creation;
// Get FamilyInstance host name
using Autodesk.Revit.DB;
if (familyInstance.Host != null) {
using Autodesk.Revit.DB.Architecture;
message += "\nFamilyInstance host name is : " +
using Autodesk.Revit.UI;
familyInstance.Host.Name;
using Autodesk.Revit.UI.Selection;
}
using System;
using System.Collections.Generic;
foreach (ElementId materialId in familyInstance.GetMaterialIds(false)) {
using System.Linq;
Material material = familyInstance.Document.GetElement(materialId) as
Material;
namespace RevitCommand {
message += "\nFamilyInstance e material : " + material.Name;
[Transaction(TransactionMode.Manual)]
}
class RevitAPIWithCSharp : IExternalCommand {
// Get FamilyInstance room name
public Result Execute(ExternalCommandData commandData, ref string message,
if (familyInstance.Room != null) {
ElementSet elements) {
message += "\nFamilyInstance room name is : " +
familyInstance.Room.Name;
// Establishing connections
}
UIDocument uiDocument = commandData.Application.ActiveUIDocument;
Autodesk.Revit.DB.Document document = uiDocument.Document;
// Get FamilyInstance structural type
Selection selection = uiDocument.Selection;
message += "\nFamilyInstance structural type is : " +
familyInstance.StructuralType;
using (Transaction transactionBatchCreateColumns = new
Transaction(document, "Batch creation family instances")) {
// Get FamilyInstance structural usage
transactionBatchCreateColumns.Start();
message += "\nFamilyInstance structural usage is : " +
try {
familyInstance.StructuralUsage;
// Find a level
TaskDialog.Show("Revit", message);
Level level =
}
document.GetElement(selection.PickObject(ObjectType.Element, "Select a level.")) as
Level;
}
BatchCreateColumns(document, level);
}
transactionBatchCreateColumns.Commit();
return Result.Succeeded;
/// <summary>
/// Batch creation family instances
/// </summary>
/// <param name="document"></param>
/// <param name="level"></param>
/// <returns></returns>
public ICollection<ElementId> BatchCreateColumns(Autodesk.Revit.DB.Document
document, Level level) {
Página 271
Página 272
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
FamilySymbol familySymbol = null; using System.Windows;
FilteredElementCollector collector = new
FilteredElementCollector(document); namespace RevitCommand {
ICollection<Element> collection = [Transaction(TransactionMode.Manual)]
collector.OfClass(typeof(FamilySymbol)).ToElements(); class RevitAPIWithCSharp : IExternalCommand {
foreach (Element e in collection) { public Result Execute(ExternalCommandData commandData, ref string message,
familySymbol = e as FamilySymbol; ElementSet elements) {
if (null != familySymbol.Category) {
if ("Structural columns" == familySymbol.Category.Name) { // Establishing connections
break; UIDocument uiDocument = commandData.Application.ActiveUIDocument;
} Document document = uiDocument.Document;
} Selection selection = uiDocument.Selection;
}
if (null != familySymbol) { using (Transaction transactionFamilySymbolInformation = new
// Create 5 FamilyInstanceCreationData items for batch creation Transaction(document, "Family symbol information")) {
for (int i = 0; i < 5; i++) { transactionFamilySymbolInformation.Start();
XYZ location = new XYZ(i * 10, 15, 0); try {
FamilyInstanceCreationData fiCreationData = new
FamilyInstanceCreationData(location, familySymbol, level, String fileName = @"C:\ProgramData\Autodesk\RVT
Autodesk.Revit.DB.Structure.StructuralType.Column); 2020\Libraries\Brazil\Mobiliário\Mesas\Mesa-Jantar redonda com cadeiras.rfa";
if (null != fiCreationData) {
fiCreationDatas.Add(fiCreationData); // Try to load family
} Family family = null;
} if (!document.LoadFamily(fileName, out family)) {
if (fiCreationDatas.Count > 0) { throw new Exception("Unable to load " + fileName);
// Create columns }
elementSet = document.Create.NewFamilyInstances2(fiCreationDatas);
} else {
throw new Exception("Batch creation failed."); StringBuilder textMessage = new StringBuilder("Selected element's
} family name is : " + family.Name);
} else {
throw new Exception("No column types found."); ISet<ElementId> familySymbolIds = family.GetFamilySymbolIds();
}
return elementSet; if (familySymbolIds.Count == 0) {
} textMessage.AppendLine("Contains no family symbols.");
} else {
} textMessage.AppendLine("The family symbols contained in this
family are : ");
}
// Get family symbols which is contained in this family
foreach (ElementId id in familySymbolIds) {
FamilySymbol familySymbol = family.Document.GetElement(id)
as FamilySymbol;
// Get family symbol name
textMessage.AppendLine("\nName: " + familySymbol.Name);
foreach (ElementId materialId in
familySymbol.GetMaterialIds(false)) {
Material material =
familySymbol.Document.GetElement(materialId) as Material;
textMessage.AppendLine("\nMaterial : " +
material.Name);
}
}
}
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB; TaskDialog.Show("Revit", textMessage.ToString());
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI; transactionFamilySymbolInformation.Commit();
using Autodesk.Revit.UI.Selection;
using System; return Result.Succeeded;
using System.Collections.Generic;
using System.Linq; } catch (Exception ex) {
Página 273
Página 274
using System.Text;
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
TaskDialog.Show("Revit API sample fail!", ex.Message); throw new Exception("Unable to load " + fileName);
transactionFamilySymbolInformation.RollBack(); }
return Result.Failed;
}
} StringBuilder textMessage = new StringBuilder("Selected element's
} family name is : " + family.Name);
} if (familySymbolIds.Count == 0) {
textMessage.AppendLine("Contains no family symbols.");
} } else {
textMessage.AppendLine("The family symbols contained in this
family are : ");
Página 275
Página 276
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
} // It is necessary to activate the symbol
if (!gotSymbol.IsActive) {
} gotSymbol.Activate();
}
Página 277
Página 278
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
String fileName = @"C:\ProgramData\Autodesk\RVT
2020\Libraries\Brazil\Portas\Porta-Painel-Único.rfa";
Wall wall =
document.GetElement(selection.PickObject(ObjectType.Element, "Select a Wall")) as
Wall;
CreateDoorsInWall(document, wall);
transactionCreatingDoors.Commit();
return Result.Succeeded;
Página 279
Página 280
[Transaction(TransactionMode.Manual)]
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
class RevitAPIWithCSharp : IExternalCommand { x += 10;
public Result Execute(ExternalCommandData commandData, ref string message, i++;
ElementSet elements) { }
} else {
// Establishing connections throw new Exception("Please open a model with at least one
UIDocument uiDocument = commandData.Application.ActiveUIDocument; floor element before invoking this command.");
Document document = uiDocument.Document; }
Selection selection = uiDocument.Selection;
transactionCreatingFamilyByDirection.Commit();
using (Transaction transactionCreatingFamilyByDirection = new
Transaction(document, "Creating family by direction")) { return Result.Succeeded;
transactionCreatingFamilyByDirection.Start();
try { } catch (Exception ex) {
TaskDialog.Show("Revit API sample fail!", ex.Message);
String fileName = @"C:\ProgramData\Autodesk\RVT transactionCreatingFamilyByDirection.RollBack();
2020\Libraries\Brazil\Mobiliário\Camas\Cama-Padrão.rfa"; return Result.Failed;
}
Family family = null; }
}
if (!document.LoadFamily(fileName, out family)) {
throw new Exception("Couldn't load " + family);
} }
int x = -30, y = 0;
int i = 0;
Página 281
Página 282
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
using (Transaction transactionFamilyDocument = new Transaction(document, /// <param name="document"></param>
"Working with family document")) { /// <param name="familyInstance"></param>
transactionFamilyDocument.Start(); public void GetLoadedSymbols(Document document, FamilyInstance familyInstance)
try { {
// Get family associated with this
// Create a new family document using template Family family = familyInstance.Symbol.Family;
string templateFileName = @"C:\ProgramData\Autodesk\RVT
2020\Family Templates\English\Metric Generic Model.rft"; // Get Family document for family
Document familyDoc = document.EditFamily(family);
Document familyDocument = if (null != familyDoc && familyDoc.IsFamilyDocument == true) {
commandData.Application.Application.NewFamilyDocument(templateFileName); string loadedFamilies = "FamilySymbols in " + family.Name + ":\n";
if (null == familyDocument) { FilteredElementCollector collector = new
throw new Exception("Cannot open family document"); FilteredElementCollector(document);
} ICollection<Element> collection =
collector.OfClass(typeof(FamilySymbol)).ToElements();
foreach (Element e in collection) {
string categoryName = FamilySymbol fs = e as FamilySymbol;
familyDocument.OwnerFamily.FamilyCategory.Name; loadedFamilies += "\t" + fs.Name + "\n";
}
StringBuilder textMessage = new StringBuilder("Family category TaskDialog.Show("Revit API", loadedFamilies);
name: " + categoryName); }
}
// Get the owner family of the family document
Family family = familyDocument.OwnerFamily;
Parameter parameter = }
family.get_Parameter(BuiltInParameter.FAMILY_WORK_PLANE_BASED);
}
// This parameter is a Yes/No parameter in UI, but an integer
value in API
// 1 for true and 0 for false
int isTrue = parameter.AsInteger();
// parameter.Set(1); // Set value to true
transactionFamilyDocument.Commit();
// Select a FamilyInstance
FamilyInstance familyInstance =
document.GetElement(selection.PickObject(ObjectType.Element, "Select a
FamilyInstance")) as FamilyInstance;
GetLoadedSymbols(document, familyInstance);
return Result.Succeeded;
/// <summary>
/// Getting nested Family symbols in a Family
/// </summary>
Página 283
Página 284
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade
Página 285
Página 286
eTLipse - Computação, Engenharia e Responsabilidade Social Ltda. eTLipse - Computação, Engenharia e Responsabilidade Social Ltda.
www.etlipse.com | info@etlipse.com www.etlipse.com | info@etlipse.com
Desenvolvido por Joel Diniz e Edson Andrade Desenvolvido por Joel Diniz e Edson Andrade