Revit API判断直线相交关系移动风管
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
Revit API判断直线相交关系移动风管的更多相关文章
- POJ 1269 Intersecting Lines (判断直线位置关系)
题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a li ...
- [poj] 1066 Treasure Hunt || 判断直线相交
原题 在金字塔内有一个宝藏p(x,y),现在要取出这个宝藏. 在金字塔内有许多墙,为了进入宝藏所在的房间必须把墙炸开,但是炸墙只能炸每个房间墙的中点. 求将宝藏运出城堡所需要的最小炸墙数. 判断点和直 ...
- Revit API 判断一个构件在某个视图中的可见性
查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...
- poj3449(判断直线相交)
题目链接:https://vjudge.net/problem/POJ-3449 题意:给出若干几何体,判断每个几何体与其它几何体的相交情况,并依次输出. 思路: 首先要知道的是根据正方形对角线的两个 ...
- POJ 1269 Intersecting Lines【判断直线相交】
题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...
- Revit API判断是不是柱族模板
OwnerFamily即族模板.获取类别的方法:Document.Settings.Categories.get_Item(BuiltInCategory.OST_Columns); //判断是不是柱 ...
- CC34:判断直线相交
题目 解法 水题,判断斜率.判断截距,ok..... class CrossLine { public: bool checkCrossLine(double s1, double s2, doubl ...
- poj 1127(直线相交+并查集)
Jack Straws Description In the game of Jack Straws, a number of plastic or wooden "straws" ...
- poj 1269 Intersecting Lines(直线相交)
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8637 Accepted: 391 ...
随机推荐
- 2017/05/17 java 基础 随笔
- Linux Power Managment详解 【转】
转自:http://blog.chinaunix.net/uid-24517893-id-254740.html Linux Power Managment 谨以此文纪念过往的岁月 一.前言 在这个对 ...
- 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现
『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现 1.基本设定和软件版本 主机名 ip 对应角色 mas ...
- 微服务架构及Eureka简介
一.微服务架构 服务提供者.服务消费者.服务发现组件这三者之间的关系: 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息. 服务消费者可从服务发现组件查询服务 ...
- React-Native 之 ScrollView介绍和使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- ASP.NET结合COM组件发送Email
在开发电子邮件发送程序的时候,我们经常需要使用到相应的组件,其实不需要第三方的组件(例如:Jmail)照常可以做到发送Email的功能. 在系统目录(如c:/winnt或c:/windows)的sys ...
- keyspace notification(键空间通知)-待验证
一.需求分析: 设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期Key有个监听,如何对过期Key进行一个回调处理? 如何使用 Redis 来实现定时任务? 二.序言: 本文所说的定时任务 ...
- (四)Dubbo Admin管理控制台
Dubbo Admin管理控制台 在dubbo2.6.0往后的版本在dubbo发布包中就没有dubbo-admin了,而是在incubator-dubbo-ops(https://github.com ...
- IntelliJ IDEA JRebel Maven Tomcat 实现热部署
一,JRebel 插件 获取与安装 直接在 IDEA 中操作获取 JRebel 插件 Paste_Image.png Paste_Image.png 安装完成,记得重启 IDEA 使刚才安装的插件生效 ...
- 034 Spark Sql的入门介绍
一:进程介绍 1.use sql 2.shark 3.spark sql 4.终止shark 5.进程线 二:spark sql细节介绍 1.hive 与sparkSql比较(以后具体学习) 2.使用 ...