本文整理汇总了C#中Autodesk.Tessellate方法的典型用法代码示例。如果您正苦于以下问题:C# Autodesk.Tessellate方法的具体用法?C# Autodesk.Tessellate怎么用?C# Autodesk.Tessellate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Autodesk
的用法示例。
在下文中一共展示了Autodesk.Tessellate方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BuildFaceOnPlaneByCurveExtensions
private static Autodesk.Revit.DB.Face BuildFaceOnPlaneByCurveExtensions(Autodesk.Revit.DB.Curve crv, Autodesk.Revit.DB.Plane thisPlane)
{
Autodesk.Revit.DB.Face face = null;
// tesselate curve and find uv envelope in projection to the plane
IList<XYZ> tessCurve = crv.Tessellate();
var curvePointEnum = tessCurve.GetEnumerator();
var corner1 = new XYZ();
var corner2 = new XYZ();
bool cornersSet = false;
for (; curvePointEnum.MoveNext(); )
{
if (!cornersSet)
{
corner1 = curvePointEnum.Current;
corner2 = curvePointEnum.Current;
cornersSet = true;
}
else
{
for (int coord = 0; coord < 3; coord++)
{
if (corner1[coord] > curvePointEnum.Current[coord])
corner1 = new XYZ(coord == 0 ? curvePointEnum.Current[coord] : corner1[coord],
coord == 1 ? curvePointEnum.Current[coord] : corner1[coord],
coord == 2 ? curvePointEnum.Current[coord] : corner1[coord]);
if (corner2[coord] < curvePointEnum.Current[coord])
corner2 = new XYZ(coord == 0 ? curvePointEnum.Current[coord] : corner2[coord],
coord == 1 ? curvePointEnum.Current[coord] : corner2[coord],
coord == 2 ? curvePointEnum.Current[coord] : corner2[coord]);
}
}
}
double dist1 = thisPlane.Origin.DistanceTo(corner1);
double dist2 = thisPlane.Origin.DistanceTo(corner2);
double sizeRect = 2.0 * (dist1 + dist2) + 100.0;
var cLoop = new Autodesk.Revit.DB.CurveLoop();
for (int index = 0; index < 4; index++)
{
double coord0 = (index == 0 || index == 3) ? -sizeRect : sizeRect;
double coord1 = (index < 2) ? -sizeRect : sizeRect;
XYZ pnt0 = thisPlane.Origin + coord0 * thisPlane.XVec + coord1 * thisPlane.YVec;
double coord3 = (index < 2) ? sizeRect : -sizeRect;
double coord4 = (index == 0 || index == 3) ? -sizeRect : sizeRect;
XYZ pnt1 = thisPlane.Origin + coord3 * thisPlane.XVec + coord4 * thisPlane.YVec;
//Line cLine = DocumentManager.GetInstance().CurrentUIApplication.Application.Create.NewLineBound(pnt0, pnt1);
var cLine = Autodesk.Revit.DB.Line.CreateBound(pnt0, pnt1);
cLoop.Append(cLine);
}
var listCLoops = new List<Autodesk.Revit.DB.CurveLoop> { cLoop };
var tempSolid = GeometryCreationUtilities.CreateExtrusionGeometry(listCLoops, thisPlane.Normal, 100.0);
//find right face
var facesOfExtrusion = tempSolid.Faces;
for (int indexFace = 0; indexFace < facesOfExtrusion.Size; indexFace++)
{
var faceAtIndex = facesOfExtrusion.get_Item(indexFace);
if (faceAtIndex is PlanarFace)
{
var pFace = faceAtIndex as Autodesk.Revit.DB.PlanarFace;
if (System.Math.Abs(thisPlane.Normal.DotProduct(pFace.Normal)) < 0.99)
continue;
if (System.Math.Abs(thisPlane.Normal.DotProduct(thisPlane.Origin - pFace.Origin)) > 0.1)
continue;
face = faceAtIndex;
break;
}
}
if (face == null)
throw new Exception("Curve Face Intersection could not process supplied Plane.");
return face;
}
示例2: Tesselate
private void Tesselate(Autodesk.DesignScript.Geometry.Curve curve, ref List<GeometryObject> geoms)
{
// use the ASM tesselation of the curve
var pkg = new RenderPackage();
curve.Tessellate(pkg, 0.1);
// get necessary info to enumerate and convert the lines
var lineCount = pkg.LineStripVertices.Count - 3;
var verts = pkg.LineStripVertices;
// we scale the tesselation rather than the curve
var conv = UnitConverter.DynamoToHostFactor;
// add the revit Lines to geometry collection
for (var i = 0; i < lineCount; i += 3)
{
var xyz0 = new XYZ(verts[i] * conv, verts[i + 1] * conv, verts[i + 2] * conv);
var xyz1 = new XYZ(verts[i + 3] * conv, verts[i + 4] * conv, verts[i + 5] * conv);
geoms.Add(Autodesk.Revit.DB.Line.CreateBound(xyz0, xyz1));
}
}
示例3: DrawCurve
private static void DrawCurve(Autodesk.Revit.DB.Curve curve, IRenderPackage package)
{
var pts = curve.Tessellate().ToList();
for (int i =0; i < pts.Count-1; i++)
{
var pt = pts[i];
var pt1 = pts[i+1];
package.PushLineStripVertex(pt.X, pt.Y, pt.Z);
package.PushLineStripVertex(pt1.X, pt1.Y, pt1.Z);
}
}