start

//风管对齐
[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class cmdDuctAlign : IExternalCommand
{
    private XYZ GetIntersection(Line line1, Line line2)
    {
        IntersectionResultArray results;         SetComparisonResult result
            = line1.Intersect(line2, out results);
        //SetComparisonResult.Subset
        //SetComparisonResult.Superset 
        if (SetComparisonResult.Overlap == result)//没有交点,可能是平行,也可以是延长线相交。
            throw new InvalidOperationException(
                "Overlap");
        if (SetComparisonResult.Disjoint == result)//不相交
            throw new InvalidOperationException(
                "Disjoint");
        if (SetComparisonResult.Superset == result)//包含,子集
            throw new InvalidOperationException(
                "Superset");
        if (SetComparisonResult.Subset == result)//交集
            throw new InvalidOperationException(
                "Subset");
        if (results == null || results.Size != )
            throw new InvalidOperationException(
                "Could not extract line intersection point.");         IntersectionResult iResult
            = results.get_Item();         return iResult.XYZPoint;
    }
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
    {
        UIApplication app = commandData.Application;
        Document doc = app.ActiveUIDocument.Document;
        Selection sel = app.ActiveUIDocument.Selection;         SplitButtonData splitButtonData = new SplitButtonData("", "");
        PushButton pbtn = new PushButton();
        RibbonPanel rpanel = new RibbonPanel();
                     Transaction ts = new Transaction(doc, "revit");
        ts.Start();         IList<Reference> refDucts = sel.PickObjects(ObjectType.Element, "duct");
        Duct duct1 = doc.GetElement(refDucts.ElementAt()) as Duct;
        Duct duct2 = doc.GetElement(refDucts.ElementAt()) as Duct;
        LocationCurve lCurve1 = duct1.Location as LocationCurve;
        LocationCurve lCurve2 = duct1.Location as LocationCurve;
        XYZ xyz11 = lCurve1.Curve.get_EndPoint();
        XYZ xyz12 = lCurve1.Curve.get_EndPoint();
        XYZ xyz21 = lCurve2.Curve.get_EndPoint();
        XYZ xyz22 = lCurve2.Curve.get_EndPoint();
        //判断线段相交关系
        Line line1 = Line.get_Bound(xyz11, xyz12);
        Line line2 = Line.get_Bound(xyz21, xyz22);
        GetIntersection(line1, line2);         #region 风管移动         //转化到平面
        XYZ xyz1 = new XYZ(xyz11.X, xyz11.Y, );
        XYZ xyz2 = new XYZ(xyz12.X, xyz12.Y, );
        XYZ xyz3 = new XYZ(xyz21.X, xyz21.Y, );
        XYZ xyz4 = new XYZ(xyz22.X, xyz22.Y, );
        //找到与直线垂直的向量
        XYZ vec1 = xyz2 - xyz1;
        XYZ zVec = new XYZ(, , );
        XYZ nVec = vec1.CrossProduct(zVec).Normalize();//两条线相交的面对应的向量
        TaskDialog.Show("vec", nVec.CrossProduct(zVec).Normalize().ToString());
        lCurve2.Move(nVec);         #endregion         ts.Commit();         return Result.Succeeded;
    }
}

url: http://greatverve.cnblogs.com/p/revit-api-line-SetComparisonResult.html

参考:
http://revit.haotui.com/thread-171-1-32.html
http://revit.haotui.com/thread-489-1-23.html

Revit API判断直线相交关系移动风管的更多相关文章

  1. POJ 1269 Intersecting Lines (判断直线位置关系)

    题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a li ...

  2. [poj] 1066 Treasure Hunt || 判断直线相交

    原题 在金字塔内有一个宝藏p(x,y),现在要取出这个宝藏. 在金字塔内有许多墙,为了进入宝藏所在的房间必须把墙炸开,但是炸墙只能炸每个房间墙的中点. 求将宝藏运出城堡所需要的最小炸墙数. 判断点和直 ...

  3. Revit API 判断一个构件在某个视图中的可见性

    查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...

  4. poj3449(判断直线相交)

    题目链接:https://vjudge.net/problem/POJ-3449 题意:给出若干几何体,判断每个几何体与其它几何体的相交情况,并依次输出. 思路: 首先要知道的是根据正方形对角线的两个 ...

  5. POJ 1269 Intersecting Lines【判断直线相交】

    题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...

  6. Revit API判断是不是柱族模板

    OwnerFamily即族模板.获取类别的方法:Document.Settings.Categories.get_Item(BuiltInCategory.OST_Columns); //判断是不是柱 ...

  7. CC34:判断直线相交

    题目 解法 水题,判断斜率.判断截距,ok..... class CrossLine { public: bool checkCrossLine(double s1, double s2, doubl ...

  8. poj 1127(直线相交+并查集)

    Jack Straws Description In the game of Jack Straws, a number of plastic or wooden "straws" ...

  9. poj 1269 Intersecting Lines(直线相交)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8637   Accepted: 391 ...

随机推荐

  1. CodeForces Contest #1110: Global Round 1

    比赛传送门:CF #1110. 比赛记录:点我. 涨了挺多分,希望下次还能涨. [A]Parity 题意简述: 问 \(k\) 位 \(b\) 进制数 \(\overline{a_1a_2\cdots ...

  2. makefile 中 foreach

    四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语 ...

  3. pwd、ln和重定向命令

    pwd命令 命令功能: ​ 使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后面不带参数. ​ pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根 ...

  4. CF1064B 【Equations of Mathematical Magic】

    题目要求解$a-(a\oplus x)-x=0$的解$x$的个数 移项得$a-x=a\oplus x$ $a$的二进制形式,应该是一个$01$串,异或的过程是不能影响到两个不同的位的,所以我们按位考虑 ...

  5. android短信验证

    短信验证demo http://download.csdn.net/detail/crazy1235/8315279#comment 使用MOB平台开发,用法详见: http://blog.csdn. ...

  6. KnockoutJs学习笔记(九)

    由于component binding部分的内容更为复杂一些,所以这部分我暂时跳过,先学习click binding部分. click binding不仅可以作用于button.input.a等元素, ...

  7. tomcat启动不成功(点击startup.bat闪退)的解决办法

    今天遇到tomcat手动启动不成功,但是再eclipse里面是可以启动成功的.我一直开始以为是端口被占用了,最后才发现是这么一回事.首先说下我的tomcat是安装版的.免安装的tomcat双击star ...

  8. 解决 Could not resolve com.android.tools.build:gradle:3.1.3

      android studio 升级到3.1.3后总会遇到莫名其妙的错误,前几天刚解决了项目 dependencies报错的问题. 解决android studio 升级到3.0+之后 项目 dep ...

  9. [转]KMP算法

    KMP算法应该是每一本<数据结构>书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~ 之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么 ...

  10. IdentityServer4系列之中文文档及实际项目经验分享

    0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...