更新铺贴,族库栏
This commit is contained in:
@@ -36,7 +36,6 @@ namespace RookieStation.PackAreaModule
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
TaskDialog.Show("错误", ex.Message);
|
|
||||||
Log.WriteLog(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Autodesk.Revit.DB;
|
using Autodesk.Revit.DB;
|
||||||
using Autodesk.Revit.UI;
|
using Autodesk.Revit.UI;
|
||||||
using Autodesk.Revit.UI.Selection;
|
using Autodesk.Revit.UI.Selection;
|
||||||
|
using RookieStation.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -13,17 +14,29 @@ namespace RookieStation.CommonTools
|
|||||||
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
||||||
internal class CmdBrowserFamily : IExternalCommand
|
internal class CmdBrowserFamily : IExternalCommand
|
||||||
{
|
{
|
||||||
|
private Guid guid = new Guid("{028001AD-0588-4A9C-AA03-D7E472D85050}");
|
||||||
|
|
||||||
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
||||||
{
|
{
|
||||||
//var dpid = new DockablePaneId(PaneIdentifiers.GetManagerPaneIdentifier());
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var libraryDirectory = UserConstant.FamilyLibraryDirectory;
|
DockablePaneId id = new DockablePaneId(guid);
|
||||||
System.Diagnostics.Process.Start(libraryDirectory);
|
DockablePane pane = commandData.Application.GetDockablePane(id);
|
||||||
}
|
if (pane.IsShown())
|
||||||
catch (Exception)
|
|
||||||
{
|
{
|
||||||
TaskDialog.Show("温馨提示", "路径不存在,无法浏览文件");
|
pane.Hide();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pane.Show();
|
||||||
|
}
|
||||||
|
//var libraryDirectory = UserConstant.FamilyLibraryDirectory;
|
||||||
|
//System.Diagnostics.Process.Start(libraryDirectory);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.WriteLog(ex.Message);
|
||||||
|
//TaskDialog.Show("温馨提示", "路径不存在,无法浏览文件");
|
||||||
return Result.Failed;
|
return Result.Failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
540
RookieStation/CmdFloorFinishes.cs
Normal file
540
RookieStation/CmdFloorFinishes.cs
Normal file
@@ -0,0 +1,540 @@
|
|||||||
|
using Autodesk.Revit.DB;
|
||||||
|
using Autodesk.Revit.DB.Architecture;
|
||||||
|
using Autodesk.Revit.UI;
|
||||||
|
using Autodesk.Revit.UI.Selection;
|
||||||
|
using RookieStation.Utils;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace RookieStation.Finishes
|
||||||
|
{
|
||||||
|
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
|
||||||
|
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
||||||
|
[Obsolete]
|
||||||
|
internal class CmdFloorFinishes : IExternalCommand
|
||||||
|
{
|
||||||
|
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
||||||
|
{
|
||||||
|
UIApplication uiapp = commandData.Application;
|
||||||
|
UIDocument uidoc = uiapp.ActiveUIDocument;
|
||||||
|
Document doc = uidoc.Document;
|
||||||
|
Family family = null;
|
||||||
|
FamilySymbol symbol;
|
||||||
|
var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms);
|
||||||
|
if (rooms.Count() == 0)
|
||||||
|
{
|
||||||
|
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
||||||
|
return Result.Cancelled;
|
||||||
|
}
|
||||||
|
WpfFloorFinishes floorCovering = CommonUtils.GenerateWindow<WpfFloorFinishes>();
|
||||||
|
|
||||||
|
double length;
|
||||||
|
double width;
|
||||||
|
double gap;
|
||||||
|
|
||||||
|
if (floorCovering.DialogResult == true)
|
||||||
|
{
|
||||||
|
length = floorCovering.PavementLength / 304.8;
|
||||||
|
width = floorCovering.PavementWidth / 304.8;
|
||||||
|
gap = floorCovering.PavementGap / 304.8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Result.Cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc.InvokeGroup(tg =>
|
||||||
|
{
|
||||||
|
Level baseLevel = doc.ActiveView.GenLevel;
|
||||||
|
if (baseLevel == null)
|
||||||
|
{
|
||||||
|
return Result.Failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ElementId> modelCurveIds = new List<ElementId>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//var v = new FilteredElementCollector(doc).OfClass(typeof(View))
|
||||||
|
// .Cast<View>()
|
||||||
|
// .FirstOrDefault(x => x.ViewType == ViewType.FloorPlan && x.GenLevel.Elevation == 0);
|
||||||
|
|
||||||
|
//if (uidoc.ActiveView.ViewType != ViewType.FloorPlan)
|
||||||
|
//{
|
||||||
|
// uidoc.RequestViewChange(v);
|
||||||
|
//}
|
||||||
|
|
||||||
|
SelectFilter<Room> roomFilter = new SelectFilter<Room>();
|
||||||
|
Reference roomReference = uidoc.Selection.PickObject(ObjectType.Element, roomFilter, "请选择房间");
|
||||||
|
Room room = doc.GetElement(roomReference) as Room;
|
||||||
|
|
||||||
|
var roompoint = RsRevitUtils.GetLocationPointByElement(room);
|
||||||
|
var segments = room.GetBoundarySegments(new SpatialElementBoundaryOptions()).FirstOrDefault();
|
||||||
|
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
foreach (var seg in segments)
|
||||||
|
{
|
||||||
|
Curve cur = seg.GetCurve();
|
||||||
|
Plane plane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, new XYZ());
|
||||||
|
var mc = doc.Create.NewModelCurve(cur, SketchPlane.Create(doc, plane));
|
||||||
|
modelCurveIds.Add(mc.Id);
|
||||||
|
}
|
||||||
|
}, "模型线创建");
|
||||||
|
|
||||||
|
//Reference edge = uidoc.Selection.PickObject(ObjectType.Edge, "请选择边界");
|
||||||
|
SelectFilter<ModelLine> mlFilter = new SelectFilter<ModelLine>();
|
||||||
|
Reference refline = uidoc.Selection.PickObject(ObjectType.Element, mlFilter, "请选择基准边线");
|
||||||
|
//模型线选取
|
||||||
|
var ml = doc.GetElement(refline) as ModelLine;
|
||||||
|
Line referline = ml.GeometryCurve as Line;
|
||||||
|
Line longestLine = RsRevitUtils.GetLongestSegmentLine(segments, referline);
|
||||||
|
XYZ basePoint = uidoc.Selection.PickPoint(UserConstant.SnapAll, "请选择基准点(位于基准线上)");
|
||||||
|
double lengthCount = basePoint.DistanceTo(referline.GetEndPoint(0)) + basePoint.DistanceTo(referline.GetEndPoint(1));
|
||||||
|
if (referline.Length - lengthCount > 0.001)
|
||||||
|
{
|
||||||
|
MessageBox.Show("请选择基准线上的点", "温馨提示");
|
||||||
|
return Result.Cancelled;
|
||||||
|
}
|
||||||
|
//if (basepoint.IsAlmostEqualTo(ml.GeometryCurve.GetEndPoint(0)) || basepoint.IsAlmostEqualTo(ml.GeometryCurve.GetEndPoint(1)))
|
||||||
|
//{
|
||||||
|
//}
|
||||||
|
//基准线端点
|
||||||
|
var endpoint1 = referline.GetEndPoint(0);
|
||||||
|
var endpoint2 = referline.GetEndPoint(1);
|
||||||
|
//基准点向端点的向量
|
||||||
|
XYZ v1 = endpoint1 - basePoint;
|
||||||
|
XYZ v2 = endpoint2 - basePoint;
|
||||||
|
//用于确认布置方向
|
||||||
|
var v0 = roompoint - basePoint;
|
||||||
|
List<Curve> curves = new List<Curve>();
|
||||||
|
List<FamilyInstance> instances = new List<FamilyInstance>();
|
||||||
|
//Curve currefer = null;
|
||||||
|
//Curve currefer1 = null;
|
||||||
|
|
||||||
|
double interval = length + gap;
|
||||||
|
List<XYZ> pts = new List<XYZ>();
|
||||||
|
List<XYZ> lastpoints = new List<XYZ>();
|
||||||
|
XYZ zdir1 = null;
|
||||||
|
XYZ zdir2 = null;
|
||||||
|
XYZ offestVector = null;
|
||||||
|
double d1 = 0.0;
|
||||||
|
double d2 = 0.0;
|
||||||
|
//切分基准线后,两侧向量不为0
|
||||||
|
if (!v1.IsAlmostEqualTo(XYZ.Zero))
|
||||||
|
{
|
||||||
|
if (endpoint1.DistanceTo(basePoint) < length)
|
||||||
|
{
|
||||||
|
System.Windows.MessageBox.Show("基准点与基准线端点距离太近");
|
||||||
|
return Result.Cancelled;
|
||||||
|
}
|
||||||
|
zdir1 = v1.CrossProduct(v0).Normalize();
|
||||||
|
//偏移的方向,直线的侧方向
|
||||||
|
offestVector = zdir1.CrossProduct(v1).Normalize();
|
||||||
|
Line l1 = Line.CreateBound(basePoint, ml.GeometryCurve.GetEndPoint(0));
|
||||||
|
|
||||||
|
for (int i = 0; i < 10000; i++)
|
||||||
|
{
|
||||||
|
var parameter = i * interval;
|
||||||
|
if (!l1.IsInside(parameter + interval - gap / 2))
|
||||||
|
{
|
||||||
|
var lastp1 = pts.Last() - offestVector * width / 2;
|
||||||
|
|
||||||
|
d1 = lastp1.DistanceTo(endpoint1) - length / 2 - gap;
|
||||||
|
|
||||||
|
var lastfinalpoint = lastp1 + (l1.Direction * (d1 / 2 + length / 2 + gap)) + (offestVector * width / 2);
|
||||||
|
|
||||||
|
lastpoints.Add(lastfinalpoint);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
XYZ p = l1.Evaluate(parameter, false);
|
||||||
|
XYZ finalPoint = p + (l1.Direction * interval / 2) + (offestVector * width / 2);
|
||||||
|
//当选择的基准点为端点时
|
||||||
|
if (v2.IsAlmostEqualTo(XYZ.Zero))
|
||||||
|
{
|
||||||
|
finalPoint = p + (l1.Direction * (interval - gap) / 2) + (offestVector * width / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
pts.Add(finalPoint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!v2.IsAlmostEqualTo(XYZ.Zero))
|
||||||
|
{
|
||||||
|
if (endpoint2.DistanceTo(basePoint) < length)
|
||||||
|
{
|
||||||
|
System.Windows.MessageBox.Show("基准点与基准线端点距离太近");
|
||||||
|
return Result.Cancelled;
|
||||||
|
}
|
||||||
|
zdir2 = v2.CrossProduct(v0).Normalize();
|
||||||
|
offestVector = zdir2.CrossProduct(v2).Normalize();
|
||||||
|
Line l2 = Line.CreateBound(basePoint, ml.GeometryCurve.GetEndPoint(1));
|
||||||
|
|
||||||
|
for (int i = 0; i < 10000; i++)
|
||||||
|
{
|
||||||
|
var parameter = i * interval;
|
||||||
|
if (!l2.IsInside(parameter + interval - gap / 2))
|
||||||
|
{
|
||||||
|
//var lastdistance = pts.Last().DistanceTo(endp1) - interval / 2 - gap / 2;
|
||||||
|
|
||||||
|
var lastp2 = pts.Last() - offestVector * width / 2;
|
||||||
|
|
||||||
|
d2 = lastp2.DistanceTo(endpoint2) - length / 2 - gap;
|
||||||
|
|
||||||
|
var lastFinalPoint = lastp2 + (l2.Direction * (d2 / 2 + length / 2 + gap)) + (offestVector * width / 2);
|
||||||
|
|
||||||
|
lastpoints.Add(lastFinalPoint);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
XYZ p = l2.Evaluate(parameter, false);
|
||||||
|
//附加的基准线的水平垂直偏移距离
|
||||||
|
var finalpoint = p + (l2.Direction * interval / 2) + (offestVector * width / 2);
|
||||||
|
if (v1.IsAlmostEqualTo(XYZ.Zero))
|
||||||
|
{
|
||||||
|
finalpoint = p + (l2.Direction * (interval - gap) / 2) + (offestVector * width / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
pts.Add(finalpoint);
|
||||||
|
}
|
||||||
|
//var lastl2 = pts.Last().DistanceTo(endp2);
|
||||||
|
}
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
//删除模型线
|
||||||
|
doc.Delete(modelCurveIds);
|
||||||
|
family = RsRevitUtils.GetLoadedFamily(doc, UserConstant.FamilyLibraryDirectory + "FloorFinish\\地砖.rfa");
|
||||||
|
ElementId symbolId = family.GetFamilySymbolIds().FirstOrDefault();
|
||||||
|
symbol = doc.GetElement(symbolId) as FamilySymbol;
|
||||||
|
symbol.Activate();
|
||||||
|
foreach (var p in pts)
|
||||||
|
{
|
||||||
|
var fi = doc.Create
|
||||||
|
.NewFamilyInstance(p, symbol, baseLevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
||||||
|
instances.Add(fi);
|
||||||
|
}
|
||||||
|
foreach (var p in lastpoints)
|
||||||
|
{
|
||||||
|
var fi = doc.Create
|
||||||
|
.NewFamilyInstance(p, symbol, baseLevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
||||||
|
instances.Add(fi);
|
||||||
|
}
|
||||||
|
}, "地面铺装");
|
||||||
|
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
XYZ veroffestdir = null;
|
||||||
|
if (zdir1 != null)
|
||||||
|
{
|
||||||
|
veroffestdir = zdir1.CrossProduct(referline.Direction).Normalize();
|
||||||
|
}
|
||||||
|
if (zdir2 != null)
|
||||||
|
{
|
||||||
|
veroffestdir = zdir2.CrossProduct(referline.Direction).Normalize();
|
||||||
|
}
|
||||||
|
//旋转角度
|
||||||
|
double angle = XYZ.BasisY.AngleTo(veroffestdir);
|
||||||
|
//判断相对于Y轴是正向角度(逆时针)还是逆向角度(顺时针)
|
||||||
|
var z = veroffestdir.CrossProduct(XYZ.BasisY).Normalize();
|
||||||
|
if (z.IsAlmostEqualTo(XYZ.BasisZ))
|
||||||
|
{
|
||||||
|
//逆向旋转,角度取负值
|
||||||
|
angle = -angle;
|
||||||
|
}
|
||||||
|
//单行调整地砖数量
|
||||||
|
int n = 0;
|
||||||
|
if (v2.IsAlmostEqualTo(XYZ.Zero) || v1.IsAlmostEqualTo(XYZ.Zero))
|
||||||
|
{
|
||||||
|
n = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = 2;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < instances.Count; i++)
|
||||||
|
{
|
||||||
|
FamilyInstance fi = instances[i];
|
||||||
|
|
||||||
|
var filp = RsRevitUtils.GetLocationPointByElement(fi);
|
||||||
|
Line zaxis = Line.CreateUnbound(filp, XYZ.BasisZ);
|
||||||
|
|
||||||
|
//旋转,移动
|
||||||
|
ElementTransformUtils.RotateElement(doc, fi.Id, zaxis, angle);
|
||||||
|
fi.GetParameters("长").FirstOrDefault().Set(length);
|
||||||
|
fi.GetParameters("宽").FirstOrDefault().Set(width);
|
||||||
|
|
||||||
|
if (i >= instances.Count - n)
|
||||||
|
{
|
||||||
|
var loc = RsRevitUtils.GetLocationPointByElement(instances[i]);
|
||||||
|
|
||||||
|
var dis1 = loc.DistanceTo(endpoint1);
|
||||||
|
var dis2 = loc.DistanceTo(endpoint2);
|
||||||
|
|
||||||
|
if (dis1 < interval)
|
||||||
|
{
|
||||||
|
fi.GetParameters("长").FirstOrDefault().Set(d1);
|
||||||
|
}
|
||||||
|
else if (dis2 < interval)
|
||||||
|
{
|
||||||
|
fi.GetParameters("长").FirstOrDefault().Set(d2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ElementTransformUtils.CopyElement(doc, fi.Id, offestvector * (width + gap));
|
||||||
|
////垂直基准线平移
|
||||||
|
//ElementTransformUtils.MoveElement(doc, fi.Id, offestdir);
|
||||||
|
|
||||||
|
////平行基准线平移
|
||||||
|
//ElementTransformUtils.MoveElement(doc, fi.Id, line.Direction * w / 2);
|
||||||
|
//if (i >= 1)
|
||||||
|
//{
|
||||||
|
// XYZ additionaldir = zdir.CrossProduct(line.Direction).Normalize() * i * (passagewidth + l);
|
||||||
|
// ElementTransformUtils.MoveElement(doc, fi.Id, additionaldir);
|
||||||
|
//}
|
||||||
|
//位于直线右侧时,需要进行左右翻转
|
||||||
|
//if (OnLeft == false && fi.CanFlipHand)
|
||||||
|
//{
|
||||||
|
// fi.flipHand();
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}, "调整地砖");
|
||||||
|
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
List<ElementId> idsCopied = new List<ElementId>();
|
||||||
|
for (int i = 0; i < instances.Count; i++)
|
||||||
|
{
|
||||||
|
FamilyInstance fi = instances[i];
|
||||||
|
int num = (int)Math.Floor(longestLine.Length / (width + gap));
|
||||||
|
double rem = longestLine.Length - num * (width + gap);
|
||||||
|
for (int j = 1; j <= num; j++)
|
||||||
|
{
|
||||||
|
ICollection<ElementId> eles;
|
||||||
|
if (j == num)
|
||||||
|
{
|
||||||
|
eles = ElementTransformUtils.CopyElement(doc, fi.Id, offestVector * ((rem / 2) + (width + gap) * (j - 0.5) + gap));
|
||||||
|
FamilyInstance copyinstance = doc.GetElement(eles.FirstOrDefault()) as FamilyInstance;
|
||||||
|
copyinstance.GetParameters("宽").FirstOrDefault().Set(rem);
|
||||||
|
|
||||||
|
idsCopied.AddRange(eles.ToList());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
eles = ElementTransformUtils.CopyElement(doc, fi.Id, offestVector * (width + gap) * j);
|
||||||
|
idsCopied.AddRange(eles.ToList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var id in idsCopied)
|
||||||
|
{
|
||||||
|
FamilyInstance instanceCopied = doc.GetElement(id) as FamilyInstance;
|
||||||
|
if (instanceCopied.Room == null)
|
||||||
|
{
|
||||||
|
doc.Delete(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, "复制地砖");
|
||||||
|
|
||||||
|
#region MyRegion
|
||||||
|
|
||||||
|
//foreach (var seg in segments)
|
||||||
|
//{
|
||||||
|
// Curve cur = seg.GetCurve();
|
||||||
|
// if (cur.GetEndPoint(0).IsAlmostEqualTo(startP) || cur.GetEndPoint(1).IsAlmostEqualTo(startP))
|
||||||
|
// {
|
||||||
|
// currefer = cur;
|
||||||
|
// }
|
||||||
|
// if (cur.GetEndPoint(1).IsAlmostEqualTo(startP))
|
||||||
|
// {
|
||||||
|
// currefer1 = cur;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //XYZ p1 = cur.Evaluate(100 / 304.8, false);
|
||||||
|
// //XYZ p2 = cur.Evaluate(200 / 304.8, false);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//var n = Math.Floor(currefer1.Length / interval) + 1;
|
||||||
|
//var rem = currefer1.Length % interval / interval;
|
||||||
|
|
||||||
|
//var x = 0.5;
|
||||||
|
//if (rem < 0.334)
|
||||||
|
//{
|
||||||
|
// x = (1 + rem) / 4;
|
||||||
|
// for (int i = 0; i < n; i++)
|
||||||
|
// {
|
||||||
|
// Curve l = null;
|
||||||
|
// if (i == 0)
|
||||||
|
// {
|
||||||
|
// l = currefer.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
// if (i >= 1)
|
||||||
|
// {
|
||||||
|
// l = currefer.CreateOffset((i - 0.5 + 2 * x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
// if (i == n - 1)
|
||||||
|
// {
|
||||||
|
// l = currefer.CreateOffset((i - 1 + 3 * x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// curves.Add(l);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// for (int i = 0; i < n; i++)
|
||||||
|
// {
|
||||||
|
// //var v = cur.Direction.CrossProduct(XYZ.BasisZ);
|
||||||
|
// //createoffset的偏移方向由线方向 叉乘 自己给定的方向
|
||||||
|
|
||||||
|
// var l = currefer.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
||||||
|
// if (i == n - 1)
|
||||||
|
// {
|
||||||
|
// l = currefer.CreateOffset((i - 1 + x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
// curves.Add(l);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//var m = Math.Floor(currefer.Length / interval) + 1;
|
||||||
|
//var rem1 = currefer.Length % interval / interval;
|
||||||
|
//x = 0.5;
|
||||||
|
//if (rem1 < 0.334)
|
||||||
|
//{
|
||||||
|
// x = (1 + rem1) / 4;
|
||||||
|
// for (int i = 0; i < m; i++)
|
||||||
|
// {
|
||||||
|
// Curve l = null;
|
||||||
|
// if (i == 0)
|
||||||
|
// {
|
||||||
|
// l = currefer1.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
// if (i >= 1)
|
||||||
|
// {
|
||||||
|
// l = currefer1.CreateOffset((i - 0.5 + 2 * x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
// if (i == m - 1)
|
||||||
|
// {
|
||||||
|
// l = currefer1.CreateOffset((i - 1 + 3 * x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// curves.Add(l);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// for (int i = 0; i < m; i++)
|
||||||
|
// {
|
||||||
|
// var l = currefer1.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
||||||
|
// if (i == m - 1)
|
||||||
|
// {
|
||||||
|
// l = currefer.CreateOffset((i - 1 + x) * interval, -XYZ.BasisZ);
|
||||||
|
// }
|
||||||
|
// curves.Add(l);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//var pts = GetIntersectPoints(curves);
|
||||||
|
//Plane pl = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, new XYZ());
|
||||||
|
//foreach (var item in curves)
|
||||||
|
//{
|
||||||
|
// ModelCurve model = doc.Create.NewModelCurve(item, SketchPlane.Create(doc, pl));
|
||||||
|
//}
|
||||||
|
|
||||||
|
//foreach (var p in pts)
|
||||||
|
//{
|
||||||
|
// var fi = doc.Create
|
||||||
|
// .NewFamilyInstance(p, symbol, baselevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
||||||
|
// instances.Add(fi);
|
||||||
|
//}
|
||||||
|
//foreach (var fi in instances)
|
||||||
|
//{
|
||||||
|
// var lp = fi.Location as LocationPoint;
|
||||||
|
// var p = lp.Point;
|
||||||
|
// foreach (var seg in segments)
|
||||||
|
// {
|
||||||
|
// var l = seg.GetCurve() as Line;
|
||||||
|
// if (l.Distance(p) - ((1 + rem) / 4 * interval) < 0.001)
|
||||||
|
// {
|
||||||
|
// if (l.Direction.X < 0.001)
|
||||||
|
// {
|
||||||
|
// fi.GetParameters("长度").FirstOrDefault().Set((1 + rem) / 2 * (interval - halfgap));
|
||||||
|
// }
|
||||||
|
// else if (l.Direction.Y < 0.001)
|
||||||
|
// {
|
||||||
|
// fi.GetParameters("宽度").FirstOrDefault().Set((1 + rem) / 2 * (interval - halfgap));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if (l.Distance(p) - ((1 + rem1) / 4 * interval) < 0.001)
|
||||||
|
// {
|
||||||
|
// if (l.Direction.X < 0.001)
|
||||||
|
// {
|
||||||
|
// fi.GetParameters("长度").FirstOrDefault().Set((1 + rem1) / 2 * (interval - halfgap));
|
||||||
|
// }
|
||||||
|
// else if (l.Direction.Y < 0.001)
|
||||||
|
// {
|
||||||
|
// fi.GetParameters("宽度").FirstOrDefault().Set((1 + rem1) / 2 * (interval - halfgap));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (true)
|
||||||
|
// {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//Do Something.
|
||||||
|
|
||||||
|
#endregion MyRegion
|
||||||
|
}
|
||||||
|
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
||||||
|
{
|
||||||
|
if (tg.GetStatus() == TransactionStatus.Started)
|
||||||
|
{
|
||||||
|
tg.RollBack();
|
||||||
|
}
|
||||||
|
return Result.Succeeded;
|
||||||
|
}
|
||||||
|
return Result.Succeeded;
|
||||||
|
}, "地面铺装");
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<XYZ> GetIntersectPoints(List<Curve> curves)
|
||||||
|
{
|
||||||
|
//获取轴网的所有交点
|
||||||
|
List<XYZ> Points = new List<XYZ>();
|
||||||
|
foreach (Curve curve in curves)
|
||||||
|
{
|
||||||
|
Curve currentCurve = curve;
|
||||||
|
foreach (Curve cur in curves)
|
||||||
|
{
|
||||||
|
IntersectionResultArray ira = null;
|
||||||
|
SetComparisonResult scr = currentCurve.Intersect(cur, out ira);
|
||||||
|
if (scr == SetComparisonResult.Overlap && ira.Size == 1)
|
||||||
|
{
|
||||||
|
XYZ tp = ira.get_Item(0).XYZPoint;
|
||||||
|
if (Points.Where(m => m.IsAlmostEqualTo(tp)).Count() == 0)
|
||||||
|
{
|
||||||
|
Points.Add(tp); //收集所有的交点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Points;
|
||||||
|
}
|
||||||
|
|
||||||
|
//public class SelectionFilter : ISelectionFilter
|
||||||
|
//{
|
||||||
|
// public bool AllowElement(Element element)
|
||||||
|
// {
|
||||||
|
// if (element.Category.Id.IntegerValue == -2000160)
|
||||||
|
// {
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public bool AllowReference(Reference refer, XYZ point)
|
||||||
|
// {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
using Autodesk.Revit.DB;
|
using Autodesk.Revit.DB;
|
||||||
using Autodesk.Revit.UI;
|
using Autodesk.Revit.UI;
|
||||||
using Autodesk.Revit.UI.Selection;
|
using Autodesk.Revit.UI.Selection;
|
||||||
|
using RookieStation.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -96,7 +97,7 @@ namespace RookieStation
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
message = ex.Message;
|
Log.WriteLog(ex.Message);
|
||||||
if (trans.GetStatus() == TransactionStatus.Started)
|
if (trans.GetStatus() == TransactionStatus.Started)
|
||||||
{
|
{
|
||||||
trans.RollBack();
|
trans.RollBack();
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ namespace RookieStation
|
|||||||
|
|
||||||
trans.Commit();
|
trans.Commit();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//var fas = RevitCommonUtils.GetFacesByFamilyInstance(instance, opt);
|
//var fas = RevitCommonUtils.GetFacesByFamilyInstance(instance, opt);
|
||||||
//var fas = RevitCommonUtils.GetFamilyInstanceFaces(instance, opt);
|
//var fas = RevitCommonUtils.GetFamilyInstanceFaces(instance, opt);
|
||||||
|
|
||||||
@@ -77,8 +78,6 @@ namespace RookieStation
|
|||||||
//}
|
//}
|
||||||
//refArry.Append(reffaces.First().Reference);
|
//refArry.Append(reffaces.First().Reference);
|
||||||
//refArry.Append(reffaces.Last().Reference);
|
//refArry.Append(reffaces.Last().Reference);
|
||||||
}
|
|
||||||
|
|
||||||
return Result.Succeeded;
|
return Result.Succeeded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,12 @@ namespace RookieStation.PackAreaModule
|
|||||||
Document doc = uidoc.Document;
|
Document doc = uidoc.Document;
|
||||||
fis = new List<FamilyInstance>();
|
fis = new List<FamilyInstance>();
|
||||||
|
|
||||||
Level level = uidoc.ActiveView.GenLevel;
|
Level baseLevel = doc.ActiveView.GenLevel;
|
||||||
|
if (baseLevel == null)
|
||||||
|
{
|
||||||
|
offest = 0.0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
Family gateFamily = RsRevitUtils.GetLoadedFamily(doc, UserConstant.FamilyLibraryDirectory + "Gate\\闸机.rfa");
|
Family gateFamily = RsRevitUtils.GetLoadedFamily(doc, UserConstant.FamilyLibraryDirectory + "Gate\\闸机.rfa");
|
||||||
ElementId symbolId = gateFamily.GetFamilySymbolIds().FirstOrDefault();
|
ElementId symbolId = gateFamily.GetFamilySymbolIds().FirstOrDefault();
|
||||||
FamilySymbol gateSymbol = doc.GetElement(symbolId) as FamilySymbol;
|
FamilySymbol gateSymbol = doc.GetElement(symbolId) as FamilySymbol;
|
||||||
@@ -93,7 +98,7 @@ namespace RookieStation.PackAreaModule
|
|||||||
gateSymbol.Activate();
|
gateSymbol.Activate();
|
||||||
foreach (XYZ p in points)
|
foreach (XYZ p in points)
|
||||||
{
|
{
|
||||||
var instance = doc.Create.NewFamilyInstance(p, gateSymbol, level, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
var instance = doc.Create.NewFamilyInstance(p, gateSymbol, baseLevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
||||||
fis.Add(instance);
|
fis.Add(instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,6 +109,10 @@ namespace RookieStation.PackAreaModule
|
|||||||
//ElementId symbolId = family.GetFamilySymbolIds().FirstOrDefault();
|
//ElementId symbolId = family.GetFamilySymbolIds().FirstOrDefault();
|
||||||
FamilySymbol leftSymbol = doc.GetElement(leftSymbolId.FirstOrDefault()) as FamilySymbol;
|
FamilySymbol leftSymbol = doc.GetElement(leftSymbolId.FirstOrDefault()) as FamilySymbol;
|
||||||
Level level = uidoc.ActiveView.GenLevel;
|
Level level = uidoc.ActiveView.GenLevel;
|
||||||
|
if (level == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (isPassageStart)//起始是通道
|
if (isPassageStart)//起始是通道
|
||||||
{
|
{
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
|
|||||||
@@ -5,9 +5,10 @@ using Autodesk.Revit.UI.Selection;
|
|||||||
using RookieStation.Utils;
|
using RookieStation.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
namespace RookieStation.Finishes
|
namespace RookieStation.Finishes
|
||||||
{
|
{
|
||||||
@@ -15,522 +16,235 @@ namespace RookieStation.Finishes
|
|||||||
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
||||||
internal class CmdPlaceFloorFinishes : IExternalCommand
|
internal class CmdPlaceFloorFinishes : IExternalCommand
|
||||||
{
|
{
|
||||||
private static string AddinPath = typeof(CmdPlaceFloorFinishes).Assembly.Location;
|
|
||||||
|
|
||||||
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
||||||
{
|
{
|
||||||
UIApplication uiapp = commandData.Application;
|
UIApplication uiapp = commandData.Application;
|
||||||
UIDocument uidoc = uiapp.ActiveUIDocument;
|
UIDocument uidoc = uiapp.ActiveUIDocument;
|
||||||
|
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
|
||||||
Document doc = uidoc.Document;
|
Document doc = uidoc.Document;
|
||||||
Family family = null;
|
var baselevel = doc.ActiveView.GenLevel;
|
||||||
FamilySymbol symbol;
|
if (baselevel == null)
|
||||||
|
|
||||||
WpfFloorFinishes floorCovering = CommonUtils.GenerateWindow<WpfFloorFinishes>();
|
|
||||||
var roomcounts = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).OfClass(typeof(Room)).GetElementCount();
|
|
||||||
if (roomcounts == 0)
|
|
||||||
{
|
{
|
||||||
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
return Result.Failed;
|
||||||
return Result.Cancelled;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double length;
|
WpfFloorFinishes floorCovering = CommonUtils.GenerateWindow<WpfFloorFinishes>();
|
||||||
double width;
|
|
||||||
double gap;
|
double length, width, gap, thickness;
|
||||||
|
|
||||||
if (floorCovering.DialogResult == true)
|
if (floorCovering.DialogResult == true)
|
||||||
{
|
{
|
||||||
length = floorCovering.PavementLength / 304.8;
|
length = floorCovering.PavementLength;
|
||||||
width = floorCovering.PavementWidth / 304.8;
|
width = floorCovering.PavementWidth;
|
||||||
gap = floorCovering.PavementGap / 304.8;
|
gap = floorCovering.PavementGap;
|
||||||
|
thickness = floorCovering.PavementThickness;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return Result.Cancelled;
|
return Result.Cancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
return doc.InvokeGroup(tg =>
|
CreateCurtainSystemByFace(uidoc, doc, length, width, gap, thickness);
|
||||||
|
//CreateCurtainSystemByRoom(uidoc, length, width, gap, thickness);
|
||||||
|
return Result.Succeeded;
|
||||||
|
//ModelCurveArray mca = new ModelCurveArray();
|
||||||
|
//var roofTypes = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Roofs).OfClass(typeof(RoofType)).ToElements();
|
||||||
|
//RoofType roofType = null;
|
||||||
|
//foreach (RoofType rooftype in roofTypes)
|
||||||
|
//{
|
||||||
|
// if (rooftype.Name == "常规 - 400mm")
|
||||||
|
// {
|
||||||
|
// roofType = rooftype;
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//doc.Invoke(ts =>
|
||||||
|
//{
|
||||||
|
// doc.Create.NewFootPrintRoof(curveArray, baselevel, roofType, out mca);
|
||||||
|
//});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CreateCurtainSystemByFace(UIDocument uidoc, Document doc, double length, double width, double gap, double thickness)
|
||||||
|
{
|
||||||
|
Reference faceReference = uidoc.Selection.PickObject(ObjectType.Face, "请选择铺贴面");
|
||||||
|
Element element = doc.GetElement(faceReference);
|
||||||
|
Face face = element.GetGeometryObjectFromReference(faceReference) as Face;
|
||||||
|
FaceArray faceArray = new FaceArray();
|
||||||
|
faceArray.Append(face);
|
||||||
|
doc.InvokeGroup(tg =>
|
||||||
|
{
|
||||||
|
var curtainSystemType = SetCurtainSystemType(doc, length, width, gap, thickness);
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
var eleid = doc.Create.NewCurtainSystem(faceArray, curtainSystemType);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CreateCurtainSystemByRoom(UIDocument uidoc, double length, double width, double gap, double thickness)
|
||||||
|
{
|
||||||
|
Document doc = uidoc.Document;
|
||||||
|
|
||||||
|
var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms);
|
||||||
|
if (rooms.Count() == 0)
|
||||||
|
{
|
||||||
|
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
||||||
|
//return Result.Cancelled;
|
||||||
|
}
|
||||||
|
Reference refer = uidoc.Selection.PickObject(ObjectType.Element, new SelectFilter<Room>(), "请选择布置的房间");
|
||||||
|
Room room = doc.GetElement(refer) as Room;
|
||||||
|
List<CurveLoop> curveLoops = new List<CurveLoop>();
|
||||||
|
var opts = new SpatialElementBoundaryOptions();
|
||||||
|
var segementsList = room.GetBoundarySegments(opts);
|
||||||
|
if (segementsList != null)
|
||||||
|
{
|
||||||
|
foreach (var boundarySegments in segementsList)
|
||||||
|
{
|
||||||
|
CurveLoop curveLoop = new CurveLoop();
|
||||||
|
|
||||||
|
foreach (var boundarySegment in boundarySegments)
|
||||||
|
{
|
||||||
|
curveLoop.Append(boundarySegment.GetCurve());
|
||||||
|
}
|
||||||
|
curveLoops.Add(curveLoop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
doc.InvokeGroup(tg =>
|
||||||
|
{
|
||||||
|
//平面视图Z方向
|
||||||
|
//doc.ActiveView.ViewDirection;
|
||||||
|
FaceArray array = new FaceArray();
|
||||||
|
DirectShape ds = null;
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
Solid solid = GeometryCreationUtilities.CreateExtrusionGeometry(curveLoops, -XYZ.BasisZ, 10.0);
|
||||||
|
ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_Mass));
|
||||||
|
if (ds != null)
|
||||||
|
{
|
||||||
|
ds.AppendShape(new List<GeometryObject>() { solid });
|
||||||
|
}
|
||||||
|
//doc.Create.NewFamilyInstance(,,,)
|
||||||
|
|
||||||
|
foreach (Face face in solid.Faces)
|
||||||
|
{
|
||||||
|
PlanarFace pf = face as PlanarFace;
|
||||||
|
if (pf.FaceNormal.IsAlmostEqualTo(XYZ.BasisZ))
|
||||||
|
{
|
||||||
|
array.Append(face);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, "创建体量,获取底面");
|
||||||
|
|
||||||
|
CurtainSystemType curtainSystemType = SetCurtainSystemType(doc, length, width, gap, thickness);
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
doc.Create.NewCurtainSystem(array, curtainSystemType);
|
||||||
|
if (ds != null)
|
||||||
|
{
|
||||||
|
doc.Delete(ds.Id);
|
||||||
|
}
|
||||||
|
}, "创建幕墙系统");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CurtainSystemType SetCurtainSystemType(Document doc, double length, double width, double gap, double thickness)
|
||||||
|
{
|
||||||
|
var curtainSystemTypeCollector = new FilteredElementCollector(doc).OfClass(typeof(CurtainSystemType)).OfCategory(BuiltInCategory.OST_CurtaSystem);
|
||||||
|
var panelTypeCollector = new FilteredElementCollector(doc).OfClass(typeof(PanelType)).OfCategory(BuiltInCategory.OST_CurtainWallPanels);
|
||||||
|
var curtainWallMullionsTypeCollector = new FilteredElementCollector(doc).OfClass(typeof(MullionType)).OfCategory(BuiltInCategory.OST_CurtainWallMullions);
|
||||||
|
|
||||||
|
CurtainSystemType curtainSystemType = null;
|
||||||
|
PanelType panelType = null;
|
||||||
|
MullionType mullionType = null;
|
||||||
|
|
||||||
|
string cutainSystemTypeName = String.Format("{0}{1}{2}{3}", length, " x ", width, "mm");
|
||||||
|
string panelTypeName = "铺贴";
|
||||||
|
string mullionTypeName = String.Format("{0}{1}{2}{3}", gap, " x ", thickness, "mm");
|
||||||
|
|
||||||
|
doc.Invoke(ts =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//var v = new FilteredElementCollector(doc).OfClass(typeof(View))
|
PanelType defaultPanelType = panelTypeCollector.FirstOrDefault(p => p.Name.Contains("实体") || p.Name.Contains("Solid")) as PanelType;
|
||||||
// .Cast<View>()
|
panelType = defaultPanelType.Duplicate(panelTypeName) as PanelType;
|
||||||
// .FirstOrDefault(x => x.ViewType == ViewType.FloorPlan && x.GenLevel.Elevation == 0);
|
|
||||||
|
|
||||||
//if (uidoc.ActiveView.ViewType != ViewType.FloorPlan)
|
|
||||||
//{
|
|
||||||
// uidoc.RequestViewChange(v);
|
|
||||||
//}
|
|
||||||
var baseLevel = doc.ActiveView.GenLevel;
|
|
||||||
List<ElementId> modelCurveIds = new List<ElementId>();
|
|
||||||
|
|
||||||
SelectFilter<Room> roomFilter = new SelectFilter<Room>();
|
|
||||||
Reference roomReference = uidoc.Selection.PickObject(ObjectType.Element, roomFilter, "请选择房间");
|
|
||||||
Room room = doc.GetElement(roomReference) as Room;
|
|
||||||
|
|
||||||
var roompoint = RsRevitUtils.GetLocationPointByElement(room);
|
|
||||||
var segments = room.GetBoundarySegments(new SpatialElementBoundaryOptions()).FirstOrDefault();
|
|
||||||
|
|
||||||
doc.Invoke(ts =>
|
|
||||||
{
|
|
||||||
foreach (var seg in segments)
|
|
||||||
{
|
|
||||||
Curve cur = seg.GetCurve();
|
|
||||||
Plane plane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, new XYZ());
|
|
||||||
var mc = doc.Create.NewModelCurve(cur, SketchPlane.Create(doc, plane));
|
|
||||||
modelCurveIds.Add(mc.Id);
|
|
||||||
}
|
}
|
||||||
}, "模型线创建");
|
catch (Autodesk.Revit.Exceptions.ArgumentException)
|
||||||
|
|
||||||
//Reference edge = uidoc.Selection.PickObject(ObjectType.Edge, "请选择边界");
|
|
||||||
SelectFilter<ModelLine> mlFilter = new SelectFilter<ModelLine>();
|
|
||||||
Reference refline = uidoc.Selection.PickObject(ObjectType.Element, mlFilter, "请选择基准边线");
|
|
||||||
//模型线选取
|
|
||||||
var ml = doc.GetElement(refline) as ModelLine;
|
|
||||||
Line referline = ml.GeometryCurve as Line;
|
|
||||||
Line longestLine = RsRevitUtils.GetLongestSegmentLine(segments, referline);
|
|
||||||
XYZ basePoint = uidoc.Selection.PickPoint(UserConstant.SnapAll, "请选择基准点(位于基准线上)");
|
|
||||||
double lengthCount = basePoint.DistanceTo(referline.GetEndPoint(0)) + basePoint.DistanceTo(referline.GetEndPoint(1));
|
|
||||||
if (referline.Length - lengthCount > 0.001)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("请选择基准线上的点", "温馨提示");
|
foreach (PanelType t in panelTypeCollector)
|
||||||
return Result.Cancelled;
|
|
||||||
}
|
|
||||||
//if (basepoint.IsAlmostEqualTo(ml.GeometryCurve.GetEndPoint(0)) || basepoint.IsAlmostEqualTo(ml.GeometryCurve.GetEndPoint(1)))
|
|
||||||
//{
|
|
||||||
//}
|
|
||||||
//基准线端点
|
|
||||||
var endpoint1 = referline.GetEndPoint(0);
|
|
||||||
var endpoint2 = referline.GetEndPoint(1);
|
|
||||||
//基准点向端点的向量
|
|
||||||
XYZ v1 = endpoint1 - basePoint;
|
|
||||||
XYZ v2 = endpoint2 - basePoint;
|
|
||||||
//用于确认布置方向
|
|
||||||
var v0 = roompoint - basePoint;
|
|
||||||
List<Curve> curves = new List<Curve>();
|
|
||||||
List<FamilyInstance> instances = new List<FamilyInstance>();
|
|
||||||
//Curve currefer = null;
|
|
||||||
//Curve currefer1 = null;
|
|
||||||
|
|
||||||
double interval = length + gap;
|
|
||||||
List<XYZ> pts = new List<XYZ>();
|
|
||||||
List<XYZ> lastpoints = new List<XYZ>();
|
|
||||||
XYZ zdir1 = null;
|
|
||||||
XYZ zdir2 = null;
|
|
||||||
XYZ offestVector = null;
|
|
||||||
double d1 = 0.0;
|
|
||||||
double d2 = 0.0;
|
|
||||||
//切分基准线后,两侧向量不为0
|
|
||||||
if (!v1.IsAlmostEqualTo(XYZ.Zero))
|
|
||||||
{
|
{
|
||||||
if (endpoint1.DistanceTo(basePoint) < length)
|
if (t.Name == panelTypeName)
|
||||||
{
|
{
|
||||||
System.Windows.MessageBox.Show("基准点与基准线端点距离太近");
|
panelType = t;
|
||||||
return Result.Cancelled;
|
|
||||||
}
|
|
||||||
zdir1 = v1.CrossProduct(v0).Normalize();
|
|
||||||
//偏移的方向,直线的侧方向
|
|
||||||
offestVector = zdir1.CrossProduct(v1).Normalize();
|
|
||||||
Line l1 = Line.CreateBound(basePoint, ml.GeometryCurve.GetEndPoint(0));
|
|
||||||
|
|
||||||
for (int i = 0; i < 10000; i++)
|
|
||||||
{
|
|
||||||
var parameter = i * interval;
|
|
||||||
if (!l1.IsInside(parameter + interval - gap / 2))
|
|
||||||
{
|
|
||||||
var lastp1 = pts.Last() - offestVector * width / 2;
|
|
||||||
|
|
||||||
d1 = lastp1.DistanceTo(endpoint1) - length / 2 - gap;
|
|
||||||
|
|
||||||
var lastfinalpoint = lastp1 + (l1.Direction * (d1 / 2 + length / 2 + gap)) + (offestVector * width / 2);
|
|
||||||
|
|
||||||
lastpoints.Add(lastfinalpoint);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
XYZ p = l1.Evaluate(parameter, false);
|
|
||||||
XYZ finalPoint = p + (l1.Direction * interval / 2) + (offestVector * width / 2);
|
|
||||||
//当选择的基准点为端点时
|
|
||||||
if (v2.IsAlmostEqualTo(XYZ.Zero))
|
|
||||||
{
|
|
||||||
finalPoint = p + (l1.Direction * (interval - gap) / 2) + (offestVector * width / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
pts.Add(finalPoint);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}, "创建嵌板类型");
|
||||||
if (!v2.IsAlmostEqualTo(XYZ.Zero))
|
doc.Invoke(ts =>
|
||||||
{
|
{
|
||||||
if (endpoint2.DistanceTo(basePoint) < length)
|
try
|
||||||
{
|
{
|
||||||
System.Windows.MessageBox.Show("基准点与基准线端点距离太近");
|
MullionType defaultMullionType = curtainWallMullionsTypeCollector.FirstOrDefault(m => ((MullionType)m).FamilyName.Contains("矩形") || ((MullionType)m).FamilyName.Contains("Rectangular")) as MullionType;
|
||||||
return Result.Cancelled;
|
mullionType = defaultMullionType.Duplicate(mullionTypeName) as MullionType;
|
||||||
}
|
}
|
||||||
zdir2 = v2.CrossProduct(v0).Normalize();
|
catch (Autodesk.Revit.Exceptions.ArgumentException)
|
||||||
offestVector = zdir2.CrossProduct(v2).Normalize();
|
|
||||||
Line l2 = Line.CreateBound(basePoint, ml.GeometryCurve.GetEndPoint(1));
|
|
||||||
|
|
||||||
for (int i = 0; i < 10000; i++)
|
|
||||||
{
|
{
|
||||||
var parameter = i * interval;
|
foreach (MullionType t in curtainWallMullionsTypeCollector)
|
||||||
if (!l2.IsInside(parameter + interval - gap / 2))
|
|
||||||
{
|
{
|
||||||
//var lastdistance = pts.Last().DistanceTo(endp1) - interval / 2 - gap / 2;
|
if (t.Name == mullionTypeName)
|
||||||
|
{
|
||||||
var lastp2 = pts.Last() - offestVector * width / 2;
|
mullionType = t;
|
||||||
|
|
||||||
d2 = lastp2.DistanceTo(endpoint2) - length / 2 - gap;
|
|
||||||
|
|
||||||
var lastFinalPoint = lastp2 + (l2.Direction * (d2 / 2 + length / 2 + gap)) + (offestVector * width / 2);
|
|
||||||
|
|
||||||
lastpoints.Add(lastFinalPoint);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
XYZ p = l2.Evaluate(parameter, false);
|
|
||||||
//附加的基准线的水平垂直偏移距离
|
|
||||||
var finalpoint = p + (l2.Direction * interval / 2) + (offestVector * width / 2);
|
|
||||||
if (v1.IsAlmostEqualTo(XYZ.Zero))
|
|
||||||
{
|
|
||||||
finalpoint = p + (l2.Direction * (interval - gap) / 2) + (offestVector * width / 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts.Add(finalpoint);
|
|
||||||
}
|
|
||||||
//var lastl2 = pts.Last().DistanceTo(endp2);
|
|
||||||
}
|
}
|
||||||
|
}, "创建竖挺类型");
|
||||||
doc.Invoke(ts =>
|
doc.Invoke(ts =>
|
||||||
{
|
{
|
||||||
//删除模型线
|
try
|
||||||
doc.Delete(modelCurveIds);
|
|
||||||
family = RsRevitUtils.GetLoadedFamily(doc, UserConstant.FamilyLibraryDirectory + "FloorFinish\\地砖.rfa");
|
|
||||||
ElementId symbolId = family.GetFamilySymbolIds().FirstOrDefault();
|
|
||||||
symbol = doc.GetElement(symbolId) as FamilySymbol;
|
|
||||||
symbol.Activate();
|
|
||||||
foreach (var p in pts)
|
|
||||||
{
|
{
|
||||||
var fi = doc.Create
|
CurtainSystemType defaultCurtainSystemType = curtainSystemTypeCollector.FirstOrDefault() as CurtainSystemType;
|
||||||
.NewFamilyInstance(p, symbol, baseLevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
curtainSystemType = defaultCurtainSystemType.Duplicate(cutainSystemTypeName) as CurtainSystemType;
|
||||||
instances.Add(fi);
|
|
||||||
}
|
}
|
||||||
foreach (var p in lastpoints)
|
catch (Autodesk.Revit.Exceptions.ArgumentException)
|
||||||
{
|
{
|
||||||
var fi = doc.Create
|
foreach (CurtainSystemType t in curtainSystemTypeCollector)
|
||||||
.NewFamilyInstance(p, symbol, baseLevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
|
||||||
instances.Add(fi);
|
|
||||||
}
|
|
||||||
}, "地面铺装");
|
|
||||||
|
|
||||||
doc.Invoke(ts =>
|
|
||||||
{
|
{
|
||||||
XYZ veroffestdir = null;
|
if (t.Name == cutainSystemTypeName)
|
||||||
if (zdir1 != null)
|
|
||||||
{
|
{
|
||||||
veroffestdir = zdir1.CrossProduct(referline.Direction).Normalize();
|
curtainSystemType = t;
|
||||||
}
|
|
||||||
if (zdir2 != null)
|
|
||||||
{
|
|
||||||
veroffestdir = zdir2.CrossProduct(referline.Direction).Normalize();
|
|
||||||
}
|
|
||||||
//旋转角度
|
|
||||||
double angle = XYZ.BasisY.AngleTo(veroffestdir);
|
|
||||||
//判断相对于Y轴是正向角度(逆时针)还是逆向角度(顺时针)
|
|
||||||
var z = veroffestdir.CrossProduct(XYZ.BasisY).Normalize();
|
|
||||||
if (z.IsAlmostEqualTo(XYZ.BasisZ))
|
|
||||||
{
|
|
||||||
//逆向旋转,角度取负值
|
|
||||||
angle = -angle;
|
|
||||||
}
|
|
||||||
//单行调整地砖数量
|
|
||||||
int n = 0;
|
|
||||||
if (v2.IsAlmostEqualTo(XYZ.Zero) || v1.IsAlmostEqualTo(XYZ.Zero))
|
|
||||||
{
|
|
||||||
n = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
n = 2;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < instances.Count; i++)
|
|
||||||
{
|
|
||||||
FamilyInstance fi = instances[i];
|
|
||||||
|
|
||||||
var filp = RsRevitUtils.GetLocationPointByElement(fi);
|
|
||||||
Line zaxis = Line.CreateUnbound(filp, XYZ.BasisZ);
|
|
||||||
|
|
||||||
//旋转,移动
|
|
||||||
ElementTransformUtils.RotateElement(doc, fi.Id, zaxis, angle);
|
|
||||||
fi.GetParameters("长").FirstOrDefault().Set(length);
|
|
||||||
fi.GetParameters("宽").FirstOrDefault().Set(width);
|
|
||||||
|
|
||||||
if (i >= instances.Count - n)
|
|
||||||
{
|
|
||||||
var loc = RsRevitUtils.GetLocationPointByElement(instances[i]);
|
|
||||||
|
|
||||||
var dis1 = loc.DistanceTo(endpoint1);
|
|
||||||
var dis2 = loc.DistanceTo(endpoint2);
|
|
||||||
|
|
||||||
if (dis1 < interval)
|
|
||||||
{
|
|
||||||
fi.GetParameters("长").FirstOrDefault().Set(d1);
|
|
||||||
}
|
|
||||||
else if (dis2 < interval)
|
|
||||||
{
|
|
||||||
fi.GetParameters("长").FirstOrDefault().Set(d2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//ElementTransformUtils.CopyElement(doc, fi.Id, offestvector * (width + gap));
|
|
||||||
////垂直基准线平移
|
|
||||||
//ElementTransformUtils.MoveElement(doc, fi.Id, offestdir);
|
|
||||||
|
|
||||||
////平行基准线平移
|
|
||||||
//ElementTransformUtils.MoveElement(doc, fi.Id, line.Direction * w / 2);
|
|
||||||
//if (i >= 1)
|
|
||||||
//{
|
|
||||||
// XYZ additionaldir = zdir.CrossProduct(line.Direction).Normalize() * i * (passagewidth + l);
|
|
||||||
// ElementTransformUtils.MoveElement(doc, fi.Id, additionaldir);
|
|
||||||
//}
|
|
||||||
//位于直线右侧时,需要进行左右翻转
|
|
||||||
//if (OnLeft == false && fi.CanFlipHand)
|
|
||||||
//{
|
|
||||||
// fi.flipHand();
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}, "调整地砖");
|
|
||||||
|
|
||||||
doc.Invoke(ts =>
|
|
||||||
{
|
|
||||||
List<ElementId> idsCopied = new List<ElementId>();
|
|
||||||
for (int i = 0; i < instances.Count; i++)
|
|
||||||
{
|
|
||||||
FamilyInstance fi = instances[i];
|
|
||||||
int num = (int)Math.Floor(longestLine.Length / (width + gap));
|
|
||||||
double rem = longestLine.Length - num * (width + gap);
|
|
||||||
for (int j = 1; j <= num; j++)
|
|
||||||
{
|
|
||||||
ICollection<ElementId> eles;
|
|
||||||
if (j == num)
|
|
||||||
{
|
|
||||||
eles = ElementTransformUtils.CopyElement(doc, fi.Id, offestVector * ((rem / 2) + (width + gap) * (j - 0.5) + gap));
|
|
||||||
FamilyInstance copyinstance = doc.GetElement(eles.FirstOrDefault()) as FamilyInstance;
|
|
||||||
copyinstance.GetParameters("宽").FirstOrDefault().Set(rem);
|
|
||||||
|
|
||||||
idsCopied.AddRange(eles.ToList());
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
eles = ElementTransformUtils.CopyElement(doc, fi.Id, offestVector * (width + gap) * j);
|
|
||||||
idsCopied.AddRange(eles.ToList());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var id in idsCopied)
|
}, "创建幕墙系统类型");
|
||||||
|
doc.Invoke(ts =>
|
||||||
{
|
{
|
||||||
FamilyInstance instanceCopied = doc.GetElement(id) as FamilyInstance;
|
mullionType.get_Parameter(BuiltInParameter.RECT_MULLION_WIDTH1).Set(gap / 304.8 / 2);
|
||||||
if (instanceCopied.Room == null)
|
mullionType.get_Parameter(BuiltInParameter.RECT_MULLION_WIDTH2).Set(gap / 304.8 / 2);
|
||||||
|
mullionType.get_Parameter(BuiltInParameter.RECT_MULLION_THICK).Set(thickness / 304.8 * 2);
|
||||||
|
//mullionType.get_Parameter(BuiltInParameter.MULLION_OFFSET).Set(0);
|
||||||
|
//mullionType.get_Parameter(BuiltInParameter.MULLION_OFFSET).Set(thickness / 304.8 * 0.75 / 2);
|
||||||
|
|
||||||
|
panelType.get_Parameter(BuiltInParameter.CURTAIN_WALL_SYSPANEL_THICKNESS).Set(thickness / 304.8 * 2);
|
||||||
|
//panelType.get_Parameter(BuiltInParameter.CURTAIN_WALL_SYSPANEL_OFFSET).Set(0);
|
||||||
|
//panelType.get_Parameter(BuiltInParameter.CURTAIN_WALL_SYSPANEL_OFFSET).Set(-thickness / 304.8 / 2);
|
||||||
|
|
||||||
|
curtainSystemType.get_Parameter(BuiltInParameter.SPACING_LENGTH_1).Set((length + gap) / 304.8);
|
||||||
|
curtainSystemType.get_Parameter(BuiltInParameter.SPACING_LENGTH_2).Set((width + gap) / 304.8);
|
||||||
|
try
|
||||||
{
|
{
|
||||||
doc.Delete(id);
|
curtainSystemType.get_Parameter(BuiltInParameter.AUTO_PANEL).Set(panelType.Id);
|
||||||
|
curtainSystemType.get_Parameter(BuiltInParameter.AUTO_MULLION_INTERIOR_GRID1).Set(mullionType.Id);
|
||||||
|
curtainSystemType.get_Parameter(BuiltInParameter.AUTO_MULLION_INTERIOR_GRID2).Set(mullionType.Id);
|
||||||
}
|
}
|
||||||
}
|
catch (Exception)
|
||||||
}, "复制地砖");
|
|
||||||
|
|
||||||
#region MyRegion
|
|
||||||
|
|
||||||
//foreach (var seg in segments)
|
|
||||||
//{
|
|
||||||
// Curve cur = seg.GetCurve();
|
|
||||||
// if (cur.GetEndPoint(0).IsAlmostEqualTo(startP) || cur.GetEndPoint(1).IsAlmostEqualTo(startP))
|
|
||||||
// {
|
|
||||||
// currefer = cur;
|
|
||||||
// }
|
|
||||||
// if (cur.GetEndPoint(1).IsAlmostEqualTo(startP))
|
|
||||||
// {
|
|
||||||
// currefer1 = cur;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //XYZ p1 = cur.Evaluate(100 / 304.8, false);
|
|
||||||
// //XYZ p2 = cur.Evaluate(200 / 304.8, false);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//var n = Math.Floor(currefer1.Length / interval) + 1;
|
|
||||||
//var rem = currefer1.Length % interval / interval;
|
|
||||||
|
|
||||||
//var x = 0.5;
|
|
||||||
//if (rem < 0.334)
|
|
||||||
//{
|
|
||||||
// x = (1 + rem) / 4;
|
|
||||||
// for (int i = 0; i < n; i++)
|
|
||||||
// {
|
|
||||||
// Curve l = null;
|
|
||||||
// if (i == 0)
|
|
||||||
// {
|
|
||||||
// l = currefer.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
// if (i >= 1)
|
|
||||||
// {
|
|
||||||
// l = currefer.CreateOffset((i - 0.5 + 2 * x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
// if (i == n - 1)
|
|
||||||
// {
|
|
||||||
// l = currefer.CreateOffset((i - 1 + 3 * x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// curves.Add(l);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// for (int i = 0; i < n; i++)
|
|
||||||
// {
|
|
||||||
// //var v = cur.Direction.CrossProduct(XYZ.BasisZ);
|
|
||||||
// //createoffset的偏移方向由线方向 叉乘 自己给定的方向
|
|
||||||
|
|
||||||
// var l = currefer.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
|
||||||
// if (i == n - 1)
|
|
||||||
// {
|
|
||||||
// l = currefer.CreateOffset((i - 1 + x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
// curves.Add(l);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//var m = Math.Floor(currefer.Length / interval) + 1;
|
|
||||||
//var rem1 = currefer.Length % interval / interval;
|
|
||||||
//x = 0.5;
|
|
||||||
//if (rem1 < 0.334)
|
|
||||||
//{
|
|
||||||
// x = (1 + rem1) / 4;
|
|
||||||
// for (int i = 0; i < m; i++)
|
|
||||||
// {
|
|
||||||
// Curve l = null;
|
|
||||||
// if (i == 0)
|
|
||||||
// {
|
|
||||||
// l = currefer1.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
// if (i >= 1)
|
|
||||||
// {
|
|
||||||
// l = currefer1.CreateOffset((i - 0.5 + 2 * x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
// if (i == m - 1)
|
|
||||||
// {
|
|
||||||
// l = currefer1.CreateOffset((i - 1 + 3 * x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// curves.Add(l);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// for (int i = 0; i < m; i++)
|
|
||||||
// {
|
|
||||||
// var l = currefer1.CreateOffset((i + x) * interval, -XYZ.BasisZ);
|
|
||||||
// if (i == m - 1)
|
|
||||||
// {
|
|
||||||
// l = currefer.CreateOffset((i - 1 + x) * interval, -XYZ.BasisZ);
|
|
||||||
// }
|
|
||||||
// curves.Add(l);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//var pts = GetIntersectPoints(curves);
|
|
||||||
//Plane pl = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, new XYZ());
|
|
||||||
//foreach (var item in curves)
|
|
||||||
//{
|
|
||||||
// ModelCurve model = doc.Create.NewModelCurve(item, SketchPlane.Create(doc, pl));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//foreach (var p in pts)
|
|
||||||
//{
|
|
||||||
// var fi = doc.Create
|
|
||||||
// .NewFamilyInstance(p, symbol, baselevel, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
|
||||||
// instances.Add(fi);
|
|
||||||
//}
|
|
||||||
//foreach (var fi in instances)
|
|
||||||
//{
|
|
||||||
// var lp = fi.Location as LocationPoint;
|
|
||||||
// var p = lp.Point;
|
|
||||||
// foreach (var seg in segments)
|
|
||||||
// {
|
|
||||||
// var l = seg.GetCurve() as Line;
|
|
||||||
// if (l.Distance(p) - ((1 + rem) / 4 * interval) < 0.001)
|
|
||||||
// {
|
|
||||||
// if (l.Direction.X < 0.001)
|
|
||||||
// {
|
|
||||||
// fi.GetParameters("长度").FirstOrDefault().Set((1 + rem) / 2 * (interval - halfgap));
|
|
||||||
// }
|
|
||||||
// else if (l.Direction.Y < 0.001)
|
|
||||||
// {
|
|
||||||
// fi.GetParameters("宽度").FirstOrDefault().Set((1 + rem) / 2 * (interval - halfgap));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else if (l.Distance(p) - ((1 + rem1) / 4 * interval) < 0.001)
|
|
||||||
// {
|
|
||||||
// if (l.Direction.X < 0.001)
|
|
||||||
// {
|
|
||||||
// fi.GetParameters("长度").FirstOrDefault().Set((1 + rem1) / 2 * (interval - halfgap));
|
|
||||||
// }
|
|
||||||
// else if (l.Direction.Y < 0.001)
|
|
||||||
// {
|
|
||||||
// fi.GetParameters("宽度").FirstOrDefault().Set((1 + rem1) / 2 * (interval - halfgap));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (true)
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//Do Something.
|
|
||||||
|
|
||||||
#endregion MyRegion
|
|
||||||
}
|
|
||||||
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
|
||||||
{
|
{
|
||||||
if (tg.GetStatus() == TransactionStatus.Started)
|
throw;
|
||||||
{
|
|
||||||
tg.RollBack();
|
|
||||||
}
|
}
|
||||||
return Result.Succeeded;
|
}, "设置参数");
|
||||||
|
return curtainSystemType;
|
||||||
}
|
}
|
||||||
return Result.Succeeded;
|
|
||||||
}, "地面铺装");
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<XYZ> GetIntersectPoints(List<Curve> curves)
|
|
||||||
{
|
|
||||||
//获取轴网的所有交点
|
|
||||||
List<XYZ> Points = new List<XYZ>();
|
|
||||||
foreach (Curve curve in curves)
|
|
||||||
{
|
|
||||||
Curve currentCurve = curve;
|
|
||||||
foreach (Curve cur in curves)
|
|
||||||
{
|
|
||||||
IntersectionResultArray ira = null;
|
|
||||||
SetComparisonResult scr = currentCurve.Intersect(cur, out ira);
|
|
||||||
if (scr == SetComparisonResult.Overlap && ira.Size == 1)
|
|
||||||
{
|
|
||||||
XYZ tp = ira.get_Item(0).XYZPoint;
|
|
||||||
if (Points.Where(m => m.IsAlmostEqualTo(tp)).Count() == 0)
|
|
||||||
{
|
|
||||||
Points.Add(tp); //收集所有的交点
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Points;
|
|
||||||
}
|
|
||||||
|
|
||||||
//public class SelectionFilter : ISelectionFilter
|
|
||||||
//{
|
|
||||||
// public bool AllowElement(Element element)
|
|
||||||
// {
|
|
||||||
// if (element.Category.Id.IntegerValue == -2000160)
|
|
||||||
// {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public bool AllowReference(Reference refer, XYZ point)
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,8 +30,8 @@ namespace RookieStation.PackAreaModule
|
|||||||
double leftRightDistance = 0.0;
|
double leftRightDistance = 0.0;
|
||||||
double frontDistance = 0.0;
|
double frontDistance = 0.0;
|
||||||
|
|
||||||
var roomCount = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).GetElementCount();
|
var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms);
|
||||||
if (roomCount == 0)
|
if (rooms.Count() == 0)
|
||||||
{
|
{
|
||||||
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
||||||
return Result.Cancelled;
|
return Result.Cancelled;
|
||||||
@@ -53,21 +53,26 @@ namespace RookieStation.PackAreaModule
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var v = new FilteredElementCollector(doc).OfClass(typeof(View))
|
|
||||||
.Cast<View>()
|
|
||||||
.FirstOrDefault(x => x.ViewType == ViewType.FloorPlan && x.GenLevel.Elevation == 0);
|
|
||||||
|
|
||||||
var baseLevel = new FilteredElementCollector(doc)
|
|
||||||
.OfClass(typeof(Level))
|
|
||||||
.Cast<Level>()
|
|
||||||
.FirstOrDefault(x => x.Elevation == 0);
|
|
||||||
|
|
||||||
List<ElementId> modelCurveIds = new List<ElementId>();
|
List<ElementId> modelCurveIds = new List<ElementId>();
|
||||||
if (uidoc.ActiveView.ViewType != ViewType.FloorPlan)
|
|
||||||
{
|
|
||||||
uidoc.RequestViewChange(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//var v = new FilteredElementCollector(doc).OfClass(typeof(View))
|
||||||
|
// .Cast<View>()
|
||||||
|
// .FirstOrDefault(x => x.ViewType == ViewType.FloorPlan && x.GenLevel.Elevation == 0);
|
||||||
|
|
||||||
|
//var baseLevel = new FilteredElementCollector(doc)
|
||||||
|
// .OfClass(typeof(Level))
|
||||||
|
// .Cast<Level>()
|
||||||
|
// .FirstOrDefault(x => x.Elevation == 0);
|
||||||
|
|
||||||
|
//if (uidoc.ActiveView.ViewType != ViewType.FloorPlan)
|
||||||
|
//{
|
||||||
|
// uidoc.RequestViewChange(v);
|
||||||
|
//}
|
||||||
|
Level baseLevel = doc.ActiveView.GenLevel;
|
||||||
|
if (baseLevel == null)
|
||||||
|
{
|
||||||
|
return Result.Failed;
|
||||||
|
}
|
||||||
SelectFilter<Room> roomFilter = new SelectFilter<Room>();
|
SelectFilter<Room> roomFilter = new SelectFilter<Room>();
|
||||||
Reference roomReference = uidoc.Selection.PickObject(ObjectType.Element, roomFilter, "请选择房间");
|
Reference roomReference = uidoc.Selection.PickObject(ObjectType.Element, roomFilter, "请选择房间");
|
||||||
Room room = doc.GetElement(roomReference) as Room;
|
Room room = doc.GetElement(roomReference) as Room;
|
||||||
|
|||||||
@@ -93,6 +93,10 @@ namespace RookieStation.ShippingAreaModule
|
|||||||
return Result.Cancelled;
|
return Result.Cancelled;
|
||||||
}
|
}
|
||||||
Level baseLevel = uidoc.ActiveView.GenLevel;
|
Level baseLevel = uidoc.ActiveView.GenLevel;
|
||||||
|
if (baseLevel == null)
|
||||||
|
{
|
||||||
|
return Result.Failed;
|
||||||
|
}
|
||||||
Family family = null;
|
Family family = null;
|
||||||
FamilySymbol symbol;
|
FamilySymbol symbol;
|
||||||
return doc.InvokeGroup<Result>(tg =>
|
return doc.InvokeGroup<Result>(tg =>
|
||||||
@@ -149,7 +153,7 @@ namespace RookieStation.ShippingAreaModule
|
|||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
var offestline = referline.CreateOffset(aluminumPlasticPanelThickness / 2 + baseLayerThickness, -XYZ.BasisZ);
|
var offestline = referline.CreateOffset(aluminumPlasticPanelThickness / 2 + baseLayerThickness, -XYZ.BasisZ);
|
||||||
var wall = Wall.Create(doc, offestline, aluminumPlasticPanelType.Id, doc.ActiveView.GenLevel.Id, aluminumPlasticPanelHeight, skirtingLineHeight, false, false);
|
var wall = Wall.Create(doc, offestline, aluminumPlasticPanelType.Id, baseLevel.Id, aluminumPlasticPanelHeight, skirtingLineHeight, false, false);
|
||||||
wallIds.Add(wall.Id);
|
wallIds.Add(wall.Id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -165,7 +169,7 @@ namespace RookieStation.ShippingAreaModule
|
|||||||
}
|
}
|
||||||
Line line = Line.CreateBound(startpoint, endpoint);
|
Line line = Line.CreateBound(startpoint, endpoint);
|
||||||
var offestline = line.CreateOffset(aluminumPlasticPanelThickness / 2 + baseLayerThickness, -XYZ.BasisZ);
|
var offestline = line.CreateOffset(aluminumPlasticPanelThickness / 2 + baseLayerThickness, -XYZ.BasisZ);
|
||||||
var wall = Wall.Create(doc, offestline, aluminumPlasticPanelType.Id, doc.ActiveView.GenLevel.Id, aluminumPlasticPanelHeight, skirtingLineHeight, false, false);
|
var wall = Wall.Create(doc, offestline, aluminumPlasticPanelType.Id, baseLevel.Id, aluminumPlasticPanelHeight, skirtingLineHeight, false, false);
|
||||||
//不允许连接
|
//不允许连接
|
||||||
WallUtils.DisallowWallJoinAtEnd(wall, 0);
|
WallUtils.DisallowWallJoinAtEnd(wall, 0);
|
||||||
//curves.Add()
|
//curves.Add()
|
||||||
@@ -174,18 +178,18 @@ namespace RookieStation.ShippingAreaModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
var skirtingOffestLine = referline.CreateOffset(skirtingLineThickness / 2 + baseLayerThickness, -XYZ.BasisZ);
|
var skirtingOffestLine = referline.CreateOffset(skirtingLineThickness / 2 + baseLayerThickness, -XYZ.BasisZ);
|
||||||
var skirtingwall = Wall.Create(doc, skirtingOffestLine, skirtingLineType.Id, doc.ActiveView.GenLevel.Id, skirtingLineHeight, 0, false, false);
|
var skirtingwall = Wall.Create(doc, skirtingOffestLine, skirtingLineType.Id, baseLevel.Id, skirtingLineHeight, 0, false, false);
|
||||||
wallIds.Add(skirtingwall.Id);
|
wallIds.Add(skirtingwall.Id);
|
||||||
|
|
||||||
var baseLayerOffestLine = referline.CreateOffset(baseLayerThickness / 2, -XYZ.BasisZ);
|
var baseLayerOffestLine = referline.CreateOffset(baseLayerThickness / 2, -XYZ.BasisZ);
|
||||||
var baseLayerWall = Wall.Create(doc, baseLayerOffestLine, baseLayerType.Id, doc.ActiveView.GenLevel.Id, UserConstant.Height / 304.8, 0, false, false);
|
var baseLayerWall = Wall.Create(doc, baseLayerOffestLine, baseLayerType.Id, baseLevel.Id, UserConstant.Height / 304.8, 0, false, false);
|
||||||
wallIds.Add(baseLayerWall.Id);
|
wallIds.Add(baseLayerWall.Id);
|
||||||
//高度大于3000才有灰色乳胶漆
|
//高度大于3000才有灰色乳胶漆
|
||||||
if (UserConstant.Height > 3000)
|
if (UserConstant.Height > 3000)
|
||||||
{
|
{
|
||||||
double baseHeight = aluminumPlasticPanelHeight + skirtingLineHeight;
|
double baseHeight = aluminumPlasticPanelHeight + skirtingLineHeight;
|
||||||
var greyEmulsionPaintOffestLine = referline.CreateOffset(baseLayerThickness + greyEmulsionPaintWidth / 2, -XYZ.BasisZ);
|
var greyEmulsionPaintOffestLine = referline.CreateOffset(baseLayerThickness + greyEmulsionPaintWidth / 2, -XYZ.BasisZ);
|
||||||
Wall greyPaintWall = Wall.Create(doc, greyEmulsionPaintOffestLine, greyEmulsionPaintType.Id, doc.ActiveView.GenLevel.Id, UserConstant.Height / 304.8 - baseHeight, baseHeight, false, false);
|
Wall greyPaintWall = Wall.Create(doc, greyEmulsionPaintOffestLine, greyEmulsionPaintType.Id, baseLevel.Id, UserConstant.Height / 304.8 - baseHeight, baseHeight, false, false);
|
||||||
wallIds.Add(greyPaintWall.Id);
|
wallIds.Add(greyPaintWall.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,10 @@ namespace RookieStation.PackAreaModule
|
|||||||
ObservableCollection<Shelf> shelves = vm.Data;
|
ObservableCollection<Shelf> shelves = vm.Data;
|
||||||
|
|
||||||
Level level = uidoc.ActiveView.GenLevel;
|
Level level = uidoc.ActiveView.GenLevel;
|
||||||
|
if (level == null)
|
||||||
|
{
|
||||||
|
return Result.Failed;
|
||||||
|
}
|
||||||
return doc.InvokeGroup<Result>(tg =>
|
return doc.InvokeGroup<Result>(tg =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ namespace RookieStation.Finishes
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
TaskDialog.Show("错误", ex.Message);
|
|
||||||
Log.WriteLog(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -68,13 +67,15 @@ namespace RookieStation.Finishes
|
|||||||
{
|
{
|
||||||
while (isContinue)
|
while (isContinue)
|
||||||
{
|
{
|
||||||
|
var baselevel = doc.ActiveView.GenLevel;
|
||||||
|
|
||||||
if (placeType == "房间")
|
if (placeType == "房间")
|
||||||
{
|
{
|
||||||
var roomCount = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).GetElementCount();
|
var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms);
|
||||||
if (roomCount == 0)
|
if (rooms.Count() == 0)
|
||||||
{
|
{
|
||||||
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
TaskDialog.Show("温馨提示", "项目中当前没有房间");
|
||||||
return Result.Failed;
|
return Result.Cancelled;
|
||||||
}
|
}
|
||||||
Reference refer = uidoc.Selection.PickObject(ObjectType.Element, new SelectFilter<Room>(), "请选择布置的房间");
|
Reference refer = uidoc.Selection.PickObject(ObjectType.Element, new SelectFilter<Room>(), "请选择布置的房间");
|
||||||
Room room = uidoc.Document.GetElement(refer) as Room;
|
Room room = uidoc.Document.GetElement(refer) as Room;
|
||||||
@@ -134,7 +135,7 @@ namespace RookieStation.Finishes
|
|||||||
//var x = curve.ComputeDerivatives(0.5, true).BasisX.CrossProduct(-XYZ.BasisZ).Normalize() * 100 / 304.8;
|
//var x = curve.ComputeDerivatives(0.5, true).BasisX.CrossProduct(-XYZ.BasisZ).Normalize() * 100 / 304.8;
|
||||||
//var mc = doc.Create.NewModelCurve(lc, SketchPlane.Create(doc, plane));
|
//var mc = doc.Create.NewModelCurve(lc, SketchPlane.Create(doc, plane));
|
||||||
//var mc = doc.Create.NewModelCurve(c, SketchPlane.Create(doc, plane));
|
//var mc = doc.Create.NewModelCurve(c, SketchPlane.Create(doc, plane));
|
||||||
var wallCreated = Wall.Create(doc, curve, wallType.Id, doc.ActiveView.GenLevel.Id, wallHeight / 304.8, wallBaseOffest / 304.8, false, false);
|
var wallCreated = Wall.Create(doc, curve, wallType.Id, baselevel.Id, wallHeight / 304.8, wallBaseOffest / 304.8, false, false);
|
||||||
wallCreated.get_Parameter(BuiltInParameter.WALL_ATTR_ROOM_BOUNDING).Set(0);
|
wallCreated.get_Parameter(BuiltInParameter.WALL_ATTR_ROOM_BOUNDING).Set(0);
|
||||||
doc.Regenerate();
|
doc.Regenerate();
|
||||||
//连接墙体让门窗可以剪切出来
|
//连接墙体让门窗可以剪切出来
|
||||||
@@ -142,9 +143,20 @@ namespace RookieStation.Finishes
|
|||||||
{
|
{
|
||||||
Element elemToJoin = doc.GetElement(wallToJoinList[i][j]);
|
Element elemToJoin = doc.GetElement(wallToJoinList[i][j]);
|
||||||
try
|
try
|
||||||
|
{
|
||||||
|
if (wallCreated.WallType.Kind == WallKind.Stacked)
|
||||||
|
{
|
||||||
|
foreach (var wallid in wallCreated.GetStackedWallMemberIds())
|
||||||
|
{
|
||||||
|
Wall stackedwall = doc.GetElement(wallid) as Wall;
|
||||||
|
JoinGeometryUtils.JoinGeometry(doc, elemToJoin, stackedwall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
JoinGeometryUtils.JoinGeometry(doc, elemToJoin, wallCreated);
|
JoinGeometryUtils.JoinGeometry(doc, elemToJoin, wallCreated);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.WriteLog(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
@@ -168,14 +180,26 @@ namespace RookieStation.Finishes
|
|||||||
face.Intersect(bottomFace, out instersectCurve);
|
face.Intersect(bottomFace, out instersectCurve);
|
||||||
doc.Invoke(ts =>
|
doc.Invoke(ts =>
|
||||||
{
|
{
|
||||||
Curve curve = instersectCurve.CreateOffset(wallWidth / 2, XYZ.BasisZ);
|
Curve curve = instersectCurve.CreateOffset(wallWidth / 2, XYZ.BasisZ).CreateReversed();
|
||||||
|
|
||||||
var wallCreated = Wall.Create(doc, curve, wallType.Id, doc.ActiveView.GenLevel.Id, wallHeight / 304.8, wallBaseOffest / 304.8, false, false);
|
var wallCreated = Wall.Create(doc, curve, wallType.Id, baselevel.Id, wallHeight / 304.8, wallBaseOffest / 304.8, false, false);
|
||||||
doc.Regenerate();
|
doc.Regenerate();
|
||||||
try
|
try
|
||||||
|
{
|
||||||
|
if (wallCreated.WallType.Kind == WallKind.Stacked)
|
||||||
|
{
|
||||||
|
foreach (var wallid in wallCreated.GetStackedWallMemberIds())
|
||||||
|
{
|
||||||
|
Wall stackedwall = doc.GetElement(wallid) as Wall;
|
||||||
|
JoinGeometryUtils.JoinGeometry(doc, wall, stackedwall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
JoinGeometryUtils.JoinGeometry(doc, wall, wallCreated);
|
JoinGeometryUtils.JoinGeometry(doc, wall, wallCreated);
|
||||||
}
|
}
|
||||||
|
//JoinGeometryUtils.JoinGeometry(doc, wall, wallCreated);
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.WriteLog(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
@@ -216,13 +240,25 @@ namespace RookieStation.Finishes
|
|||||||
for (int i = 0; i < curs.Count(); i++)
|
for (int i = 0; i < curs.Count(); i++)
|
||||||
{
|
{
|
||||||
Curve curve = curs.ElementAt(i).CreateOffset(wallWidth / 2, -XYZ.BasisZ);
|
Curve curve = curs.ElementAt(i).CreateOffset(wallWidth / 2, -XYZ.BasisZ);
|
||||||
var wallCreated = Wall.Create(doc, curve, wallType.Id, doc.ActiveView.GenLevel.Id, wallHeight / 304.8, wallBaseOffest / 304.8, false, false);
|
var wallCreated = Wall.Create(doc, curve, wallType.Id, baselevel.Id, wallHeight / 304.8, wallBaseOffest / 304.8, false, false);
|
||||||
|
|
||||||
doc.Regenerate();
|
doc.Regenerate();
|
||||||
try
|
try
|
||||||
|
{
|
||||||
|
if (wallCreated.WallType.Kind == WallKind.Stacked)
|
||||||
|
{
|
||||||
|
foreach (var wallid in wallCreated.GetStackedWallMemberIds())
|
||||||
|
{
|
||||||
|
Wall stackedwall = doc.GetElement(wallid) as Wall;
|
||||||
|
JoinGeometryUtils.JoinGeometry(doc, wall, stackedwall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
JoinGeometryUtils.JoinGeometry(doc, wall, wallCreated);
|
JoinGeometryUtils.JoinGeometry(doc, wall, wallCreated);
|
||||||
}
|
}
|
||||||
|
//JoinGeometryUtils.JoinGeometry(doc, wall, wallCreated);
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.WriteLog(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
|
|||||||
36
RookieStation/Common/FamilyInfo.cs
Normal file
36
RookieStation/Common/FamilyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Interop;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows;
|
||||||
|
using RookieStation.Utils;
|
||||||
|
|
||||||
|
namespace RookieStation
|
||||||
|
{
|
||||||
|
internal class FamilyInfo
|
||||||
|
{
|
||||||
|
public FamilyInfo(string fullFileName)
|
||||||
|
{
|
||||||
|
FullFileName = fullFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FullFileName { get; internal set; }
|
||||||
|
|
||||||
|
public BitmapSource ImageData => LoadImage(FullFileName, 128, 128);
|
||||||
|
public string Title => Path.GetFileNameWithoutExtension(FullFileName);
|
||||||
|
public string ToolTip { get; set; }
|
||||||
|
|
||||||
|
public FileInfo FileInfo { get; set; }
|
||||||
|
|
||||||
|
private BitmapSource LoadImage(string filename, int width, int height)
|
||||||
|
{
|
||||||
|
Bitmap bm = WindowsThumbnailProvider.GetThumbnail(filename, width, height, ThumbnailOptions.None);
|
||||||
|
return Imaging.CreateBitmapSourceFromHBitmap(bm.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace RookieStation
|
namespace RookieStation.PackAreaModule
|
||||||
{
|
{
|
||||||
public class Shelf
|
public class Shelf
|
||||||
{
|
{
|
||||||
@@ -14,7 +14,17 @@ namespace RookieStation
|
|||||||
|
|
||||||
public static string AddinDirectory => System.IO.Path.GetDirectoryName(AddinPath);
|
public static string AddinDirectory => System.IO.Path.GetDirectoryName(AddinPath);
|
||||||
|
|
||||||
internal static string FamilyLibraryDirectory => AddinDirectory + "RsLibrary\\FamilyLibrary\\";
|
//打包路径
|
||||||
|
//internal static string FamilyLibraryDirectory => AddinDirectory + "\\FamilyLibrary\\";
|
||||||
|
|
||||||
|
//调试路径
|
||||||
|
internal static string FamilyLibraryDirectory => AddinDirectory + "\\RsLibrary\\FamilyLibrary\\";
|
||||||
|
|
||||||
|
//打包路径
|
||||||
|
//internal static string DocumentDirectory => AddinDirectory + "\\Document\\";
|
||||||
|
|
||||||
|
//调试路径
|
||||||
|
internal static string DocumentDirectory => AddinDirectory + "\\RsLibrary\\Document\\";
|
||||||
|
|
||||||
internal static ObjectSnapTypes SnapAll =>
|
internal static ObjectSnapTypes SnapAll =>
|
||||||
ObjectSnapTypes.Intersections
|
ObjectSnapTypes.Intersections
|
||||||
59
RookieStation/FamilyDockablePaneHandler.cs
Normal file
59
RookieStation/FamilyDockablePaneHandler.cs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
using Autodesk.Revit.DB;
|
||||||
|
using Autodesk.Revit.UI;
|
||||||
|
using RookieStation.Utils;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace RookieStation.CommonTools
|
||||||
|
{
|
||||||
|
internal class LoadFamilyHandler : IExternalEventHandler
|
||||||
|
{
|
||||||
|
public FamilyInfo FamilyInfo { get; set; }
|
||||||
|
|
||||||
|
public void Execute(UIApplication app)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Document doc = app.ActiveUIDocument.Document;
|
||||||
|
RsFamilyLoadOption familyLoadOption = new RsFamilyLoadOption();
|
||||||
|
Family family = null;
|
||||||
|
FamilySymbol fs = null;
|
||||||
|
|
||||||
|
doc.Invoke(ts =>
|
||||||
|
{
|
||||||
|
var canloaded = doc.LoadFamily(FamilyInfo.FullFileName, familyLoadOption, out family);
|
||||||
|
if (canloaded)
|
||||||
|
{
|
||||||
|
fs = doc.GetElement(family.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol;
|
||||||
|
if (!fs.IsActive)
|
||||||
|
{
|
||||||
|
fs.Activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TaskDialog.Show("温馨提示", "族已载入或载入失败。");
|
||||||
|
}
|
||||||
|
}, "载入-" + FamilyInfo.Title);
|
||||||
|
if (fs != null)
|
||||||
|
{
|
||||||
|
app.ActiveUIDocument.PromptForFamilyInstancePlacement(fs);
|
||||||
|
//app.ActiveUIDocument.PromptToPlaceElementTypeOnLegendView(fs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.WriteLog(e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetName()
|
||||||
|
{
|
||||||
|
return "加载族";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
RookieStation/Properties/Settings.Designer.cs
generated
12
RookieStation/Properties/Settings.Designer.cs
generated
@@ -72,5 +72,17 @@ namespace RookieStation.Properties {
|
|||||||
this["Shelves"] = value;
|
this["Shelves"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("C:\\ProgramData\\Autodesk\\Revit\\Addins\\2020\\RsLibrary\\FamilyLibrary")]
|
||||||
|
public string FamilyFolder {
|
||||||
|
get {
|
||||||
|
return ((string)(this["FamilyFolder"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["FamilyFolder"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,5 +17,8 @@
|
|||||||
<string>单个,1500,400</string>
|
<string>单个,1500,400</string>
|
||||||
</ArrayOfString></Value>
|
</ArrayOfString></Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
|
<Setting Name="FamilyFolder" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)">C:\ProgramData\Autodesk\Revit\Addins\2020\RsLibrary\FamilyLibrary</Value>
|
||||||
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
BIN
RookieStation/Resources/Fonts/iconfont.ttf
Normal file
BIN
RookieStation/Resources/Fonts/iconfont.ttf
Normal file
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 638 B |
@@ -2,7 +2,7 @@
|
|||||||
<RevitAddIns>
|
<RevitAddIns>
|
||||||
<AddIn Type="Application">
|
<AddIn Type="Application">
|
||||||
<Name>菜鸟驿站插件</Name>
|
<Name>菜鸟驿站插件</Name>
|
||||||
<Assembly>\RsLibrary\RookieStation.dll</Assembly>
|
<Assembly>RsLibrary\RookieStation.dll</Assembly>
|
||||||
<ClientId>1aac8233-690c-4dd6-89c0-78221dd65497</ClientId>
|
<ClientId>1aac8233-690c-4dd6-89c0-78221dd65497</ClientId>
|
||||||
<FullClassName>RookieStation.RsApp</FullClassName>
|
<FullClassName>RookieStation.RsApp</FullClassName>
|
||||||
<VendorId>ADSK</VendorId>
|
<VendorId>ADSK</VendorId>
|
||||||
|
|||||||
@@ -90,8 +90,11 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="CmdExportWorkSchedule.cs" />
|
<Compile Include="CmdExportWorkSchedule.cs" />
|
||||||
|
<Compile Include="CmdPlaceFloorFinishes.cs" />
|
||||||
<Compile Include="CmdLogoExtrusion.cs" />
|
<Compile Include="CmdLogoExtrusion.cs" />
|
||||||
<Compile Include="CmdPlaceWallFinishes.cs" />
|
<Compile Include="CmdPlaceWallFinishes.cs" />
|
||||||
|
<Compile Include="FamilyDockablePaneHandler.cs" />
|
||||||
|
<Compile Include="Common\FamilyInfo.cs" />
|
||||||
<Compile Include="Properties\Settings.Designer.cs">
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
@@ -107,13 +110,13 @@
|
|||||||
<Compile Include="CmdPlaceShelves.cs" />
|
<Compile Include="CmdPlaceShelves.cs" />
|
||||||
<Compile Include="Utils\CommonUtils.cs" />
|
<Compile Include="Utils\CommonUtils.cs" />
|
||||||
<Compile Include="Utils\Log.cs" />
|
<Compile Include="Utils\Log.cs" />
|
||||||
<Compile Include="Utils\ViewPlanCmdEnabled.cs" />
|
<Compile Include="Utils\EnableCmdInViewPlan.cs" />
|
||||||
<Compile Include="CmdPlaceEntranceGate.cs" />
|
<Compile Include="CmdPlaceEntranceGate.cs" />
|
||||||
<Compile Include="CmdPlaceExitGate.cs" />
|
<Compile Include="CmdPlaceExitGate.cs" />
|
||||||
<Compile Include="Utils\RsRevitUtils.cs" />
|
<Compile Include="Utils\RsRevitUtils.cs" />
|
||||||
<Compile Include="CmdPlaceFloorFinishes.cs" />
|
<Compile Include="CmdFloorFinishes.cs" />
|
||||||
<Compile Include="CmdPlaceLamps.cs" />
|
<Compile Include="CmdPlaceLamps.cs" />
|
||||||
<Compile Include="Custom\Enum.cs" />
|
<Compile Include="Common\Enum.cs" />
|
||||||
<Compile Include="Utils\ProjectConfigUtil.cs" />
|
<Compile Include="Utils\ProjectConfigUtil.cs" />
|
||||||
<Compile Include="CmdProjectSettings.cs" />
|
<Compile Include="CmdProjectSettings.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
@@ -127,8 +130,9 @@
|
|||||||
<Compile Include="ShelvesPlacementViewModel.cs" />
|
<Compile Include="ShelvesPlacementViewModel.cs" />
|
||||||
<Compile Include="Utils\SelectFilter.cs" />
|
<Compile Include="Utils\SelectFilter.cs" />
|
||||||
<Compile Include="CmdPlaceReceptionArea.cs" />
|
<Compile Include="CmdPlaceReceptionArea.cs" />
|
||||||
<Compile Include="Custom\Shelf.cs" />
|
<Compile Include="Common\Shelf.cs" />
|
||||||
<Compile Include="Custom\UserConstant.cs" />
|
<Compile Include="Common\UserConstant.cs" />
|
||||||
|
<Compile Include="Utils\WindowsThumbnailProvider.cs" />
|
||||||
<Compile Include="Utils\WinIntPtr.cs" />
|
<Compile Include="Utils\WinIntPtr.cs" />
|
||||||
<Compile Include="WpfEntranceGate.xaml.cs">
|
<Compile Include="WpfEntranceGate.xaml.cs">
|
||||||
<DependentUpon>WpfEntranceGate.xaml</DependentUpon>
|
<DependentUpon>WpfEntranceGate.xaml</DependentUpon>
|
||||||
@@ -136,6 +140,9 @@
|
|||||||
<Compile Include="WpfExitGate.xaml.cs">
|
<Compile Include="WpfExitGate.xaml.cs">
|
||||||
<DependentUpon>WpfExitGate.xaml</DependentUpon>
|
<DependentUpon>WpfExitGate.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="WpfFamilyDockablePane.xaml.cs">
|
||||||
|
<DependentUpon>WpfFamilyDockablePane.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="WpfFloorFinishes.xaml.cs">
|
<Compile Include="WpfFloorFinishes.xaml.cs">
|
||||||
<DependentUpon>WpfFloorFinishes.xaml</DependentUpon>
|
<DependentUpon>WpfFloorFinishes.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -164,6 +171,7 @@
|
|||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
|
<Resource Include="Resources\Fonts\iconfont.ttf" />
|
||||||
<None Include="RsLibrary\Document\样板工程量清单.xlsx">
|
<None Include="RsLibrary\Document\样板工程量清单.xlsx">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
@@ -185,6 +193,9 @@
|
|||||||
<None Include="RsLibrary\FamilyLibrary\Gate\L型收检台.rfa">
|
<None Include="RsLibrary\FamilyLibrary\Gate\L型收检台.rfa">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="RsLibrary\FamilyLibrary\Gate\直线形收检台.rfa">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
<None Include="RsLibrary\FamilyLibrary\Gate\简易收检台.rfa">
|
<None Include="RsLibrary\FamilyLibrary\Gate\简易收检台.rfa">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
@@ -278,6 +289,10 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="WpfFamilyDockablePane.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="WpfFloorFinishes.xaml">
|
<Page Include="WpfFloorFinishes.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
using Autodesk.Revit.UI;
|
using Autodesk.Revit.UI;
|
||||||
|
using RookieStation.CommonTools;
|
||||||
|
using RookieStation.Finishes;
|
||||||
|
using RookieStation.PackAreaModule;
|
||||||
|
using RookieStation.ShippingAreaModule;
|
||||||
|
using RookieStation.Statistics;
|
||||||
|
using RookieStation.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@@ -27,6 +33,8 @@ namespace RookieStation
|
|||||||
//获取AddInPath的目录
|
//获取AddInPath的目录
|
||||||
private static string DirRequestAssembly = Path.GetDirectoryName(AddInPath);
|
private static string DirRequestAssembly = Path.GetDirectoryName(AddInPath);
|
||||||
|
|
||||||
|
private static string ViewPlanCmdEnabled = typeof(EnableCmdInViewPlan).ToString();
|
||||||
|
|
||||||
private BitmapSource ConvertFromBitmap(System.Drawing.Bitmap bitmap)
|
private BitmapSource ConvertFromBitmap(System.Drawing.Bitmap bitmap)
|
||||||
{
|
{
|
||||||
return Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
|
return Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
|
||||||
@@ -50,7 +58,7 @@ namespace RookieStation
|
|||||||
|
|
||||||
//项目设置
|
//项目设置
|
||||||
RibbonPanel projectPanel = application.CreateRibbonPanel(TabName, ProjectSettingsPanelName);
|
RibbonPanel projectPanel = application.CreateRibbonPanel(TabName, ProjectSettingsPanelName);
|
||||||
PushButtonData projectPBD = new PushButtonData("项目设置", "项目设置", AddInPath, "RookieStation.CmdProjectSettings")
|
PushButtonData projectPBD = new PushButtonData("项目设置", "项目设置", AddInPath, typeof(CmdProjectSettings).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.cainiao),
|
LargeImage = ConvertFromBitmap(Properties.Resources.cainiao),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.cainiao)
|
Image = ConvertFromBitmap(Properties.Resources.cainiao)
|
||||||
@@ -58,21 +66,21 @@ namespace RookieStation
|
|||||||
var projectBtn = (PushButton)projectPanel.AddItem(projectPBD);
|
var projectBtn = (PushButton)projectPanel.AddItem(projectPBD);
|
||||||
//前台布置
|
//前台布置
|
||||||
RibbonPanel receptionAreaPanel = application.CreateRibbonPanel(TabName, ReceptionPanelName);
|
RibbonPanel receptionAreaPanel = application.CreateRibbonPanel(TabName, ReceptionPanelName);
|
||||||
PushButtonData receptionLayoutPBD = new PushButtonData("寄件区布置", "前台布置", AddInPath, "RookieStation.ShippingAreaModule.CmdPlaceReceptionArea")
|
PushButtonData receptionLayoutPBD = new PushButtonData("寄件区布置", "前台布置", AddInPath, typeof(CmdPlaceReceptionArea).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.Reception),
|
LargeImage = ConvertFromBitmap(Properties.Resources.Reception),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.Reception)
|
Image = ConvertFromBitmap(Properties.Resources.Reception)
|
||||||
};
|
};
|
||||||
var receptionBtn = (PushButton)receptionAreaPanel.AddItem(receptionLayoutPBD);
|
var receptionBtn = (PushButton)receptionAreaPanel.AddItem(receptionLayoutPBD);
|
||||||
receptionBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
receptionBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
//出入口布置
|
//出入口布置
|
||||||
RibbonPanel packAreaPanel = application.CreateRibbonPanel(TabName, EntranceAndExitGatePanelName);
|
RibbonPanel packAreaPanel = application.CreateRibbonPanel(TabName, EntranceAndExitGatePanelName);
|
||||||
PushButtonData entrancegateLayoutPBD = new PushButtonData("入口布置", "入口闸机", AddInPath, "RookieStation.PackAreaModule.CmdPlaceEntranceGate")
|
PushButtonData entrancegateLayoutPBD = new PushButtonData("入口布置", "入口闸机", AddInPath, typeof(CmdPlaceEntranceGate).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.EntranceGate),
|
LargeImage = ConvertFromBitmap(Properties.Resources.EntranceGate),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.EntranceGate)
|
Image = ConvertFromBitmap(Properties.Resources.EntranceGate)
|
||||||
};
|
};
|
||||||
PushButtonData exitGateLayoutPBD = new PushButtonData("出口布置", "出口收检台", AddInPath, "RookieStation.PackAreaModule.CmdPlaceExitGate")
|
PushButtonData exitGateLayoutPBD = new PushButtonData("出口布置", "出口收检台", AddInPath, typeof(CmdPlaceExitGate).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.ExitGate),
|
LargeImage = ConvertFromBitmap(Properties.Resources.ExitGate),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.ExitGate)
|
Image = ConvertFromBitmap(Properties.Resources.ExitGate)
|
||||||
@@ -84,54 +92,54 @@ namespace RookieStation
|
|||||||
//var exitBtn = (PushButton)gateItemsStacked[1];
|
//var exitBtn = (PushButton)gateItemsStacked[1];
|
||||||
var entranceBtn = (PushButton)packAreaPanel.AddItem(entrancegateLayoutPBD);
|
var entranceBtn = (PushButton)packAreaPanel.AddItem(entrancegateLayoutPBD);
|
||||||
var exitBtn = (PushButton)packAreaPanel.AddItem(exitGateLayoutPBD);
|
var exitBtn = (PushButton)packAreaPanel.AddItem(exitGateLayoutPBD);
|
||||||
entranceBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
entranceBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
exitBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
exitBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
|
|
||||||
PushButtonData placeShelvesPBD = new PushButtonData("货架布置", "货架布置", AddInPath, "RookieStation.PackAreaModule.CmdPlaceShelves")
|
PushButtonData placeShelvesPBD = new PushButtonData("货架布置", "货架布置", AddInPath, typeof(CmdPlaceShelves).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.Shelf),
|
LargeImage = ConvertFromBitmap(Properties.Resources.Shelf),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.Shelf)
|
Image = ConvertFromBitmap(Properties.Resources.Shelf)
|
||||||
};
|
};
|
||||||
var placeShelvesBtn = (PushButton)packAreaPanel.AddItem(placeShelvesPBD);
|
var placeShelvesBtn = (PushButton)packAreaPanel.AddItem(placeShelvesPBD);
|
||||||
placeShelvesBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
placeShelvesBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
|
|
||||||
PushButtonData placeShelveCardsPBD = new PushButtonData("货架端牌", "货架端牌", AddInPath, "RookieStation.PackAreaModule.CmdArrangeShelfCards")
|
PushButtonData placeShelveCardsPBD = new PushButtonData("货架端牌", "货架端牌", AddInPath, typeof(CmdArrangeShelfCards).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.ShelfCard),
|
LargeImage = ConvertFromBitmap(Properties.Resources.ShelfCard),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.ShelfCard)
|
Image = ConvertFromBitmap(Properties.Resources.ShelfCard)
|
||||||
};
|
};
|
||||||
var placeShelveCardsBtn = (PushButton)packAreaPanel.AddItem(placeShelveCardsPBD);
|
var placeShelveCardsBtn = (PushButton)packAreaPanel.AddItem(placeShelveCardsPBD);
|
||||||
|
|
||||||
PushButtonData placeLampsPBD = new PushButtonData("灯具布置", "灯具布置", AddInPath, "RookieStation.PackAreaModule.CmdPlaceLamps")
|
PushButtonData placeLampsPBD = new PushButtonData("灯具布置", "灯具布置", AddInPath, typeof(CmdPlaceLamps).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.Lamp),
|
LargeImage = ConvertFromBitmap(Properties.Resources.Lamp),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.Lamp)
|
Image = ConvertFromBitmap(Properties.Resources.Lamp)
|
||||||
};
|
};
|
||||||
var placeLampsBtn = (PushButton)packAreaPanel.AddItem(placeLampsPBD);
|
var placeLampsBtn = (PushButton)packAreaPanel.AddItem(placeLampsPBD);
|
||||||
placeLampsBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
placeLampsBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
//饰面,完成面
|
//饰面,完成面
|
||||||
RibbonPanel finishesPanel = application.CreateRibbonPanel(TabName, FinishesPanelName);
|
RibbonPanel finishesPanel = application.CreateRibbonPanel(TabName, FinishesPanelName);
|
||||||
|
|
||||||
PushButtonData floorfinishesPBD = new PushButtonData("地面铺装", "地面铺装", AddInPath, "RookieStation.Finishes.CmdPlaceFloorFinishes")
|
PushButtonData floorfinishesPBD = new PushButtonData("地面铺装", "地面铺装", AddInPath, typeof(CmdPlaceFloorFinishes).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.FloorFinishes),
|
LargeImage = ConvertFromBitmap(Properties.Resources.FloorFinishes),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.FloorFinishes)
|
Image = ConvertFromBitmap(Properties.Resources.FloorFinishes)
|
||||||
};
|
};
|
||||||
var floorcoveringBtn = (PushButton)finishesPanel.AddItem(floorfinishesPBD);
|
var floorcoveringBtn = (PushButton)finishesPanel.AddItem(floorfinishesPBD);
|
||||||
floorcoveringBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
floorcoveringBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
|
|
||||||
PushButtonData wallcoveringPBD = new PushButtonData("墙饰面", "墙饰面", AddInPath, "RookieStation.Finishes.CmdPlaceWallFinishes")
|
PushButtonData wallcoveringPBD = new PushButtonData("墙饰面", "墙饰面", AddInPath, typeof(CmdPlaceWallFinishes).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.WallFinishes),
|
LargeImage = ConvertFromBitmap(Properties.Resources.WallFinishes),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.WallFinishes)
|
Image = ConvertFromBitmap(Properties.Resources.WallFinishes)
|
||||||
};
|
};
|
||||||
|
|
||||||
var wallcoveringBtn = (PushButton)finishesPanel.AddItem(wallcoveringPBD);
|
var wallcoveringBtn = (PushButton)finishesPanel.AddItem(wallcoveringPBD);
|
||||||
wallcoveringBtn.AvailabilityClassName = "RookieStation.ViewPlanCmdEnabled";
|
wallcoveringBtn.AvailabilityClassName = ViewPlanCmdEnabled;
|
||||||
//统计面板
|
//统计面板
|
||||||
RibbonPanel statisticsPanel = application.CreateRibbonPanel(TabName, StatisticsPanelName);
|
RibbonPanel statisticsPanel = application.CreateRibbonPanel(TabName, StatisticsPanelName);
|
||||||
|
|
||||||
PushButtonData statisticsfamilyPBD = new PushButtonData("输出统计表", "工程量统计", AddInPath, "RookieStation.Statistics.CmdExportWorkSchedule")
|
PushButtonData statisticsfamilyPBD = new PushButtonData("输出统计表", "工程量统计", AddInPath, typeof(CmdExportWorkSchedule).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.WorkSchedule),
|
LargeImage = ConvertFromBitmap(Properties.Resources.WorkSchedule),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.WorkSchedule)
|
Image = ConvertFromBitmap(Properties.Resources.WorkSchedule)
|
||||||
@@ -140,13 +148,14 @@ namespace RookieStation
|
|||||||
//通用面板
|
//通用面板
|
||||||
RibbonPanel commonToolsPanel = application.CreateRibbonPanel(TabName, CommonTools);
|
RibbonPanel commonToolsPanel = application.CreateRibbonPanel(TabName, CommonTools);
|
||||||
|
|
||||||
PushButtonData browserfamilyPBD = new PushButtonData("浏览族", "浏览族文件", AddInPath, "RookieStation.CommonTools.CmdBrowserFamily")
|
PushButtonData browserfamilyPBD = new PushButtonData("浏览族", "浏览族文件", AddInPath, typeof(CmdBrowserFamily).FullName)
|
||||||
{
|
{
|
||||||
LargeImage = ConvertFromBitmap(Properties.Resources.FamilyLib),
|
LargeImage = ConvertFromBitmap(Properties.Resources.FamilyLib),
|
||||||
Image = ConvertFromBitmap(Properties.Resources.FamilyLib)
|
Image = ConvertFromBitmap(Properties.Resources.FamilyLib)
|
||||||
};
|
};
|
||||||
commonToolsPanel.AddItem(browserfamilyPBD);
|
commonToolsPanel.AddItem(browserfamilyPBD);
|
||||||
|
|
||||||
|
RegisterDockPane(application);
|
||||||
return Result.Succeeded;
|
return Result.Succeeded;
|
||||||
|
|
||||||
#region MyRegion
|
#region MyRegion
|
||||||
@@ -205,9 +214,17 @@ namespace RookieStation
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
return Result.Cancelled;
|
return Result.Cancelled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RegisterDockPane(UIControlledApplication application)
|
||||||
|
{
|
||||||
|
Guid guid = new Guid("{028001AD-0588-4A9C-AA03-D7E472D85050}");
|
||||||
|
DockablePaneId id = new DockablePaneId(guid);
|
||||||
|
WpfFamilyDockablePane pane = new WpfFamilyDockablePane();
|
||||||
|
application.RegisterDockablePane(id, "族库", pane as IDockablePaneProvider);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Binary file not shown.
BIN
RookieStation/RsLibrary/FamilyLibrary/Gate/直线形收检台.0001.rfa
Normal file
BIN
RookieStation/RsLibrary/FamilyLibrary/Gate/直线形收检台.0001.rfa
Normal file
Binary file not shown.
Binary file not shown.
@@ -6,7 +6,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace RookieStation
|
namespace RookieStation.PackAreaModule
|
||||||
{
|
{
|
||||||
public class ShelvesPlacementViewModel
|
public class ShelvesPlacementViewModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ namespace RookieStation.Utils
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
TaskDialog.Show("错误", ex.Message);
|
|
||||||
Log.WriteLog(ex.Message);
|
Log.WriteLog(ex.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace RookieStation
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 平面视图命令才可用
|
/// 平面视图命令才可用
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class ViewPlanCmdEnabled : IExternalCommandAvailability
|
internal class EnableCmdInViewPlan : IExternalCommandAvailability
|
||||||
{
|
{
|
||||||
public bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
|
public bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
|
||||||
{
|
{
|
||||||
@@ -140,8 +140,9 @@ namespace RookieStation.Utils
|
|||||||
ExcelWorksheet workSheet = package.Workbook.Worksheets.Add(dt.TableName);
|
ExcelWorksheet workSheet = package.Workbook.Worksheets.Add(dt.TableName);
|
||||||
workSheet.Cells["A1"].LoadFromDataTable(dt, true);
|
workSheet.Cells["A1"].LoadFromDataTable(dt, true);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Log.WriteLog(ex.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace RookieStation.Utils
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string logFolder = UserConstant.FamilyLibraryDirectory + "\\Log";
|
string logFolder = UserConstant.FamilyLibraryDirectory + "Log\\";
|
||||||
string logFile = Path.Combine(logFolder, DateTime.Now.ToString("yyyyMMdd") + ".log");
|
string logFile = Path.Combine(logFolder, DateTime.Now.ToString("yyyyMMdd") + ".log");
|
||||||
if (!Directory.Exists(logFolder))
|
if (!Directory.Exists(logFolder))
|
||||||
Directory.CreateDirectory(logFolder);
|
Directory.CreateDirectory(logFolder);
|
||||||
|
|||||||
210
RookieStation/Utils/WindowsThumbnailProvider.cs
Normal file
210
RookieStation/Utils/WindowsThumbnailProvider.cs
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace RookieStation.Utils
|
||||||
|
{
|
||||||
|
public enum ThumbnailOptions
|
||||||
|
{
|
||||||
|
None = 0x00,
|
||||||
|
BiggerSizeOk = 0x01,
|
||||||
|
InMemoryOnly = 0x02,
|
||||||
|
IconOnly = 0x04,
|
||||||
|
ThumbnailOnly = 0x08,
|
||||||
|
InCacheOnly = 0x10,
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WindowsThumbnailProvider
|
||||||
|
{
|
||||||
|
private const string IShellItem2Guid = "7E9FB0D3-919F-4307-AB2E-9B1860310C93";
|
||||||
|
|
||||||
|
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||||
|
internal static extern int SHCreateItemFromParsingName(
|
||||||
|
[MarshalAs(UnmanagedType.LPWStr)] string path,
|
||||||
|
// The following parameter is not used - binding context.
|
||||||
|
IntPtr pbc,
|
||||||
|
ref Guid riid,
|
||||||
|
[MarshalAs(UnmanagedType.Interface)] out IShellItem shellItem);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
internal static extern bool DeleteObject(IntPtr hObject);
|
||||||
|
|
||||||
|
[ComImport]
|
||||||
|
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
[Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe")]
|
||||||
|
internal interface IShellItem
|
||||||
|
{
|
||||||
|
void BindToHandler(IntPtr pbc,
|
||||||
|
[MarshalAs(UnmanagedType.LPStruct)] Guid bhid,
|
||||||
|
[MarshalAs(UnmanagedType.LPStruct)] Guid riid,
|
||||||
|
out IntPtr ppv);
|
||||||
|
|
||||||
|
void GetParent(out IShellItem ppsi);
|
||||||
|
|
||||||
|
void GetDisplayName(SIGDN sigdnName, out IntPtr ppszName);
|
||||||
|
|
||||||
|
void GetAttributes(uint sfgaoMask, out uint psfgaoAttribs);
|
||||||
|
|
||||||
|
void Compare(IShellItem psi, uint hint, out int piOrder);
|
||||||
|
};
|
||||||
|
|
||||||
|
internal enum SIGDN : uint
|
||||||
|
{
|
||||||
|
NORMALDISPLAY = 0,
|
||||||
|
PARENTRELATIVEPARSING = 0x80018001,
|
||||||
|
PARENTRELATIVEFORADDRESSBAR = 0x8001c001,
|
||||||
|
DESKTOPABSOLUTEPARSING = 0x80028000,
|
||||||
|
PARENTRELATIVEEDITING = 0x80031001,
|
||||||
|
DESKTOPABSOLUTEEDITING = 0x8004c000,
|
||||||
|
FILESYSPATH = 0x80058000,
|
||||||
|
URL = 0x80068000
|
||||||
|
}
|
||||||
|
|
||||||
|
internal enum HResult
|
||||||
|
{
|
||||||
|
Ok = 0x0000,
|
||||||
|
False = 0x0001,
|
||||||
|
InvalidArguments = unchecked((int)0x80070057),
|
||||||
|
OutOfMemory = unchecked((int)0x8007000E),
|
||||||
|
NoInterface = unchecked((int)0x80004002),
|
||||||
|
Fail = unchecked((int)0x80004005),
|
||||||
|
ElementNotFound = unchecked((int)0x80070490),
|
||||||
|
TypeElementNotFound = unchecked((int)0x8002802B),
|
||||||
|
NoObject = unchecked((int)0x800401E5),
|
||||||
|
Win32ErrorCanceled = 1223,
|
||||||
|
Canceled = unchecked((int)0x800704C7),
|
||||||
|
ResourceInUse = unchecked((int)0x800700AA),
|
||||||
|
AccessDenied = unchecked((int)0x80030005)
|
||||||
|
}
|
||||||
|
|
||||||
|
[ComImportAttribute()]
|
||||||
|
[GuidAttribute("bcc18b79-ba16-442f-80c4-8a59c30c463b")]
|
||||||
|
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
internal interface IShellItemImageFactory
|
||||||
|
{
|
||||||
|
[PreserveSig]
|
||||||
|
HResult GetImage(
|
||||||
|
[In, MarshalAs(UnmanagedType.Struct)] NativeSize size,
|
||||||
|
[In] ThumbnailOptions flags,
|
||||||
|
[Out] out IntPtr phbm);
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
internal struct NativeSize
|
||||||
|
{
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
|
||||||
|
public int Width { set { width = value; } }
|
||||||
|
public int Height { set { height = value; } }
|
||||||
|
};
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct RGBQUAD
|
||||||
|
{
|
||||||
|
public byte rgbBlue;
|
||||||
|
public byte rgbGreen;
|
||||||
|
public byte rgbRed;
|
||||||
|
public byte rgbReserved;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bitmap GetThumbnail(string fileName, int width, int height, ThumbnailOptions options)
|
||||||
|
{
|
||||||
|
IntPtr hBitmap = GetHBitmap(Path.GetFullPath(fileName), width, height, options);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// return a System.Drawing.Bitmap from the hBitmap
|
||||||
|
return GetBitmapFromHBitmap(hBitmap);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// delete HBitmap to avoid memory leaks
|
||||||
|
DeleteObject(hBitmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bitmap GetBitmapFromHBitmap(IntPtr nativeHBitmap)
|
||||||
|
{
|
||||||
|
Bitmap bmp = Bitmap.FromHbitmap(nativeHBitmap);
|
||||||
|
|
||||||
|
if (Bitmap.GetPixelFormatSize(bmp.PixelFormat) < 32)
|
||||||
|
return bmp;
|
||||||
|
|
||||||
|
return CreateAlphaBitmap(bmp, PixelFormat.Format32bppArgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bitmap CreateAlphaBitmap(Bitmap srcBitmap, PixelFormat targetPixelFormat)
|
||||||
|
{
|
||||||
|
Bitmap result = new Bitmap(srcBitmap.Width, srcBitmap.Height, targetPixelFormat);
|
||||||
|
|
||||||
|
Rectangle bmpBounds = new Rectangle(0, 0, srcBitmap.Width, srcBitmap.Height);
|
||||||
|
|
||||||
|
BitmapData srcData = srcBitmap.LockBits(bmpBounds, ImageLockMode.ReadOnly, srcBitmap.PixelFormat);
|
||||||
|
|
||||||
|
bool isAlplaBitmap = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (int y = 0; y <= srcData.Height - 1; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x <= srcData.Width - 1; x++)
|
||||||
|
{
|
||||||
|
Color pixelColor = Color.FromArgb(
|
||||||
|
Marshal.ReadInt32(srcData.Scan0, (srcData.Stride * y) + (4 * x)));
|
||||||
|
|
||||||
|
if (pixelColor.A > 0 & pixelColor.A < 255)
|
||||||
|
{
|
||||||
|
isAlplaBitmap = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.SetPixel(x, y, pixelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
srcBitmap.UnlockBits(srcData);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAlplaBitmap)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return srcBitmap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IntPtr GetHBitmap(string fileName, int width, int height, ThumbnailOptions options)
|
||||||
|
{
|
||||||
|
IShellItem nativeShellItem;
|
||||||
|
Guid shellItem2Guid = new Guid(IShellItem2Guid);
|
||||||
|
int retCode = SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out nativeShellItem);
|
||||||
|
|
||||||
|
if (retCode != 0)
|
||||||
|
throw Marshal.GetExceptionForHR(retCode);
|
||||||
|
|
||||||
|
NativeSize nativeSize = new NativeSize();
|
||||||
|
nativeSize.Width = width;
|
||||||
|
nativeSize.Height = height;
|
||||||
|
|
||||||
|
IntPtr hBitmap;
|
||||||
|
HResult hr = ((IShellItemImageFactory)nativeShellItem).GetImage(nativeSize, options, out hBitmap);
|
||||||
|
|
||||||
|
Marshal.ReleaseComObject(nativeShellItem);
|
||||||
|
|
||||||
|
if (hr == HResult.Ok) return hBitmap;
|
||||||
|
|
||||||
|
throw Marshal.GetExceptionForHR((int)hr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
RookieStation/WpfFamilyDockPane.xaml
Normal file
12
RookieStation/WpfFamilyDockPane.xaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<UserControl x:Class="RookieStation.WpfFamilyDockPane"
|
||||||
|
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"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:RookieStation"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="450" d:DesignWidth="800">
|
||||||
|
<Grid>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
28
RookieStation/WpfFamilyDockPane.xaml.cs
Normal file
28
RookieStation/WpfFamilyDockPane.xaml.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
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 RookieStation
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WpfFamilyDockPane.xaml 的交互逻辑
|
||||||
|
/// </summary>
|
||||||
|
public partial class WpfFamilyDockPane : UserControl
|
||||||
|
{
|
||||||
|
public WpfFamilyDockPane()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
122
RookieStation/WpfFamilyDockablePane.xaml
Normal file
122
RookieStation/WpfFamilyDockablePane.xaml
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
<Page
|
||||||
|
x:Class="RookieStation.CommonTools.WpfFamilyDockablePane"
|
||||||
|
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:hc="https://handyorg.github.io/handycontrol"
|
||||||
|
xmlns:local="clr-namespace:RookieStation"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
Width="216"
|
||||||
|
Height="540"
|
||||||
|
MinWidth="200"
|
||||||
|
Background="LightGray"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<Page.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<FontFamily x:Key="IconFont">pack://application:,,,/RookieStation;component/Resources/Fonts/#iconfont</FontFamily>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
|
||||||
|
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Page.Resources>
|
||||||
|
<Grid Margin="2">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="35" />
|
||||||
|
<RowDefinition Height="35" />
|
||||||
|
<RowDefinition />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="0.5*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<hc:ComboBox
|
||||||
|
x:Name="cbbLibrary"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
hc:InfoElement.Placeholder="请选择库"
|
||||||
|
DisplayMemberPath="Key"
|
||||||
|
SelectedValuePath="Value"
|
||||||
|
SelectionChanged="cbbLibrary_SelectionChanged" />
|
||||||
|
<Button
|
||||||
|
x:Name="btnSelectPath"
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.Column="1"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Click="btnSelectPath_Click"
|
||||||
|
Content=""
|
||||||
|
FontFamily="{StaticResource IconFont}"
|
||||||
|
ToolTip="选择族库路径" />
|
||||||
|
<hc:TextBox
|
||||||
|
x:Name="tbSearch"
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
hc:InfoElement.Placeholder="请输入搜索的族文件名"
|
||||||
|
FontFamily="{StaticResource IconFont}"
|
||||||
|
TextChanged="tbSearch_TextChanged" />
|
||||||
|
<Button
|
||||||
|
x:Name="btnSearch"
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="1"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Click="btnSearch_Click"
|
||||||
|
Content=""
|
||||||
|
FontFamily="{StaticResource IconFont}"
|
||||||
|
IsDefault="True" />
|
||||||
|
<ListBox x:Name="lbFamilyLib" Grid.Row="2" Grid.ColumnSpan="3" Style="{DynamicResource WrapPanelHorizontalListBox}">
|
||||||
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Border Margin="10" BorderBrush="Black" BorderThickness="2" CornerRadius="5">
|
||||||
|
<Grid Width="128">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="128" />
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Image
|
||||||
|
Grid.Row="0"
|
||||||
|
Width="128"
|
||||||
|
Height="128"
|
||||||
|
Source="{Binding ImageData}"
|
||||||
|
Stretch="Uniform"
|
||||||
|
ToolTip="{Binding ToolTip}" />
|
||||||
|
<hc:RunningBlock Grid.Row="1" Runaway="False">
|
||||||
|
<TextBlock Text="{Binding Title}" TextAlignment="Center" />
|
||||||
|
</hc:RunningBlock>
|
||||||
|
<StackPanel Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||||
|
<StackPanel.Style>
|
||||||
|
<Style TargetType="{x:Type StackPanel}">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" />
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsMouseOver}" Value="True">
|
||||||
|
<Setter Property="Visibility" Value="Visible" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</StackPanel.Style>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
Width="64"
|
||||||
|
Margin="2"
|
||||||
|
Click="BtnLoadFamily_Click"
|
||||||
|
Content="载入"
|
||||||
|
FontFamily="{StaticResource IconFont}"
|
||||||
|
ToolTip="载入项目" />
|
||||||
|
<Button
|
||||||
|
Width="64"
|
||||||
|
Margin="2"
|
||||||
|
Click="BtnOpenFile_Click"
|
||||||
|
Content="定位"
|
||||||
|
FontFamily="{StaticResource IconFont}"
|
||||||
|
ToolTip="定位文件" />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListBox.ItemTemplate>
|
||||||
|
</ListBox>
|
||||||
|
</Grid>
|
||||||
|
</Page>
|
||||||
171
RookieStation/WpfFamilyDockablePane.xaml.cs
Normal file
171
RookieStation/WpfFamilyDockablePane.xaml.cs
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
using Autodesk.Revit.UI;
|
||||||
|
using RookieStation.Properties;
|
||||||
|
using RookieStation.Utils;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
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.Forms;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Markup;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace RookieStation.CommonTools
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WpfFamilyDockablePane.xaml 的交互逻辑
|
||||||
|
/// </summary>
|
||||||
|
public partial class WpfFamilyDockablePane : Page, IDockablePaneProvider
|
||||||
|
{
|
||||||
|
internal LoadFamilyHandler LoadHandler = new LoadFamilyHandler();
|
||||||
|
|
||||||
|
public ExternalEvent LoadFamilyExEvent { get; set; }
|
||||||
|
public string FamilyFolder;
|
||||||
|
private ObservableCollection<FamilyInfo> FamilyInfos = null;
|
||||||
|
|
||||||
|
public WpfFamilyDockablePane()
|
||||||
|
{
|
||||||
|
FamilyFolder = Settings.Default.FamilyFolder;
|
||||||
|
|
||||||
|
LoadFamilyExEvent = ExternalEvent.Create(LoadHandler);
|
||||||
|
//if (IsContain)
|
||||||
|
//{
|
||||||
|
// FamilyInfos = GetFamilyFiles(FamilyFolder, SearchOption.AllDirectories);
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// FamilyInfos = GetFamilyFiles(FamilyFolder, SearchOption.TopDirectoryOnly);
|
||||||
|
//}
|
||||||
|
//cbbLibrary.DataContext
|
||||||
|
InitializeComponent();
|
||||||
|
btnSelectPath.ToolTip = FamilyFolder;
|
||||||
|
cbbLibrary.ItemsSource = GetTopDirectoryFolder(FamilyFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetupDockablePane(DockablePaneProviderData data)
|
||||||
|
{
|
||||||
|
data.FrameworkElement = this as FrameworkElement;
|
||||||
|
|
||||||
|
data.InitialState = new DockablePaneState();
|
||||||
|
data.InitialState.DockPosition = DockPosition.Left;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dictionary<string, string> GetTopDirectoryFolder(string folder)
|
||||||
|
{
|
||||||
|
DirectoryInfo directory = new DirectoryInfo(folder);
|
||||||
|
var dirs = directory.GetDirectories("*", SearchOption.TopDirectoryOnly);
|
||||||
|
//ComboBox Key显示,Value路径下的文件夹路径
|
||||||
|
Dictionary<string, string> dictFolderInfo = new Dictionary<string, string>();
|
||||||
|
for (int i = 0; i < dirs.Count(); i++)
|
||||||
|
{
|
||||||
|
dictFolderInfo.Add(dirs[i].Name, dirs[i].FullName);
|
||||||
|
}
|
||||||
|
return dictFolderInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObservableCollection<FamilyInfo> GetFamilyInfos(string folder)
|
||||||
|
{
|
||||||
|
var fileinfos = new ObservableCollection<FamilyInfo>();
|
||||||
|
DirectoryInfo directory = new DirectoryInfo(folder);
|
||||||
|
var files = directory.GetFiles("*.rfa");
|
||||||
|
for (int i = 0; i < files.Count(); i++)
|
||||||
|
{
|
||||||
|
FamilyInfo fi = new FamilyInfo(files[i].FullName);
|
||||||
|
fileinfos.Add(fi);
|
||||||
|
}
|
||||||
|
return fileinfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbbLibrary_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var selected = cbbLibrary.SelectedValue;
|
||||||
|
FamilyInfos = GetFamilyInfos(selected.ToString());
|
||||||
|
lbFamilyLib.ItemsSource = FamilyInfos;
|
||||||
|
|
||||||
|
//lbFamilyLib.DataContext =;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BtnLoadFamily_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.Windows.Controls.Button btn = sender as System.Windows.Controls.Button;
|
||||||
|
LoadHandler.FamilyInfo = btn.DataContext as FamilyInfo;
|
||||||
|
LoadFamilyExEvent.Raise();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.WriteLog(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BtnOpenFile_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
System.Windows.Controls.Button btn = sender as System.Windows.Controls.Button;
|
||||||
|
FamilyInfo file = btn.DataContext as FamilyInfo;
|
||||||
|
ExploreFile(file.FullFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 定位文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filePath"></param>
|
||||||
|
public static void ExploreFile(string filePath)
|
||||||
|
{
|
||||||
|
Process proc = new Process();
|
||||||
|
proc.StartInfo.FileName = "explorer";
|
||||||
|
//打开资源管理器
|
||||||
|
proc.StartInfo.Arguments = @"/select," + filePath;
|
||||||
|
proc.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSelectPath_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
|
||||||
|
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
FamilyFolder = folderBrowserDialog.SelectedPath;
|
||||||
|
btnSelectPath.ToolTip = FamilyFolder;
|
||||||
|
cbbLibrary.DataContext = GetTopDirectoryFolder(FamilyFolder);
|
||||||
|
Settings.Default.FamilyFolder = FamilyFolder;
|
||||||
|
Settings.Default.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSearch_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (tbSearch.Text == "")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ObservableCollection<FamilyInfo> searchfamily = new ObservableCollection<FamilyInfo>();
|
||||||
|
foreach (FamilyInfo item in FamilyInfos)
|
||||||
|
{
|
||||||
|
if (item.Title.Contains(tbSearch.Text.Trim()))
|
||||||
|
{
|
||||||
|
searchfamily.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lbFamilyLib.ItemsSource = searchfamily;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tbSearch_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (tbSearch.Text == "")
|
||||||
|
{
|
||||||
|
lbFamilyLib.ItemsSource = FamilyInfos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
Width="81"
|
Width="81"
|
||||||
Height="59"
|
Height="59"
|
||||||
MinWidth="260"
|
MinWidth="280"
|
||||||
MinHeight="240"
|
MinHeight="300"
|
||||||
ShowInTaskbar="False"
|
ShowInTaskbar="False"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
|
<RowDefinition Height="0.5*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition />
|
<ColumnDefinition />
|
||||||
@@ -65,10 +66,23 @@
|
|||||||
Text="2"
|
Text="2"
|
||||||
TextAlignment="Center" />
|
TextAlignment="Center" />
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<Button
|
<GroupBox
|
||||||
x:Name="btnConfirm"
|
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
|
Margin="2"
|
||||||
|
Header="厚度(mm)">
|
||||||
|
<TextBox
|
||||||
|
x:Name="tbPavementThickness"
|
||||||
|
InputMethod.IsInputMethodEnabled="False"
|
||||||
|
PreviewTextInput="tb_PreviewTextInput"
|
||||||
|
Text="2"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</GroupBox>
|
||||||
|
<Button
|
||||||
|
x:Name="btnConfirm"
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
Click="btnConfirm_Click"
|
Click="btnConfirm_Click"
|
||||||
Content="铺设" />
|
Content="铺设" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ namespace RookieStation
|
|||||||
|
|
||||||
public double PavementGap { get; set; }
|
public double PavementGap { get; set; }
|
||||||
|
|
||||||
|
public double PavementThickness { get; set; }
|
||||||
|
|
||||||
public WpfFloorFinishes()
|
public WpfFloorFinishes()
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -34,15 +36,17 @@ namespace RookieStation
|
|||||||
|
|
||||||
private void btnConfirm_Click(object sender, RoutedEventArgs e)
|
private void btnConfirm_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
double length, width, gap;
|
double length, width, gap, thickness;
|
||||||
var a = double.TryParse(tbPavementLength.Text, out length);
|
var a = double.TryParse(tbPavementLength.Text, out length);
|
||||||
var b = double.TryParse(tbPavementWidth.Text, out width);
|
var b = double.TryParse(tbPavementWidth.Text, out width);
|
||||||
var c = double.TryParse(tbPavementGap.Text, out gap);
|
var c = double.TryParse(tbPavementGap.Text, out gap);
|
||||||
if (a && b && c)
|
var d = double.TryParse(tbPavementGap.Text, out thickness);
|
||||||
|
if (a && b && c && d)
|
||||||
{
|
{
|
||||||
PavementLength = length;
|
PavementLength = length;
|
||||||
PavementWidth = width;
|
PavementWidth = width;
|
||||||
PavementGap = gap;
|
PavementGap = gap;
|
||||||
|
PavementThickness = thickness;
|
||||||
DialogResult = true;
|
DialogResult = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,21 +1,9 @@
|
|||||||
using Autodesk.Revit.UI;
|
using Autodesk.Revit.UI;
|
||||||
|
using RookieStation.PackAreaModule;
|
||||||
using RookieStation.Utils;
|
using RookieStation.Utils;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
|
|
||||||
namespace RookieStation
|
namespace RookieStation
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,19 +35,24 @@
|
|||||||
x:Name="cbbWallTypes"
|
x:Name="cbbWallTypes"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="250"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
hc:InfoElement.Title="饰面层类型:"
|
hc:InfoElement.Title="饰面层类型:"
|
||||||
hc:InfoElement.TitlePlacement="Left"
|
hc:InfoElement.TitlePlacement="Left"
|
||||||
|
hc:IsEditable="True"
|
||||||
|
hc:IsTextSearchEnabled="True"
|
||||||
|
AutoComplete="True"
|
||||||
DisplayMemberPath="Name"
|
DisplayMemberPath="Name"
|
||||||
|
IsTextSearchCaseSensitive="False"
|
||||||
SelectedIndex="0"
|
SelectedIndex="0"
|
||||||
SelectedValuePath="Name" />
|
SelectedValuePath="Name"
|
||||||
|
Style="{StaticResource ComboBoxExtend}" />
|
||||||
<hc:TextBox
|
<hc:TextBox
|
||||||
x:Name="tbWallHeight"
|
x:Name="tbWallHeight"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="250"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
hc:InfoElement.Title="饰面层高度:"
|
hc:InfoElement.Title="饰面层高度:"
|
||||||
@@ -60,7 +65,7 @@
|
|||||||
x:Name="tbWallBase"
|
x:Name="tbWallBase"
|
||||||
Grid.Row="2"
|
Grid.Row="2"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="250"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
hc:InfoElement.Title="饰面层底部偏移:"
|
hc:InfoElement.Title="饰面层底部偏移:"
|
||||||
@@ -73,7 +78,7 @@
|
|||||||
x:Name="cbbPlaceType"
|
x:Name="cbbPlaceType"
|
||||||
Grid.Row="3"
|
Grid.Row="3"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="250"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
hc:InfoElement.Title="布置方式:"
|
hc:InfoElement.Title="布置方式:"
|
||||||
@@ -81,8 +86,8 @@
|
|||||||
PreviewTextInput="tb_PreviewTextInput"
|
PreviewTextInput="tb_PreviewTextInput"
|
||||||
Text="0"
|
Text="0"
|
||||||
ToolTip="饰面底部离地高度">
|
ToolTip="饰面底部离地高度">
|
||||||
<ComboBoxItem Content="房间" IsSelected="True" />
|
<ComboBoxItem Content="房间" />
|
||||||
<ComboBoxItem Content="墙面" />
|
<ComboBoxItem Content="墙面" IsSelected="True" />
|
||||||
<ComboBoxItem Content="整墙" />
|
<ComboBoxItem Content="整墙" />
|
||||||
</hc:ComboBox>
|
</hc:ComboBox>
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -18,11 +18,15 @@
|
|||||||
</setting>
|
</setting>
|
||||||
<setting name="Shelves" serializeAs="Xml">
|
<setting name="Shelves" serializeAs="Xml">
|
||||||
<value>
|
<value>
|
||||||
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
<string>单个,1500,400</string>
|
<string>单个,1500,400</string>
|
||||||
</ArrayOfString>
|
</ArrayOfString>
|
||||||
</value>
|
</value>
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting name="FamilyFolder" serializeAs="String">
|
||||||
|
<value>C:\ProgramData\Autodesk\Revit\Addins\2020\RsLibrary\FamilyLibrary</value>
|
||||||
|
</setting>
|
||||||
</RookieStation.Properties.Settings>
|
</RookieStation.Properties.Settings>
|
||||||
</userSettings>
|
</userSettings>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/></startup></configuration>
|
||||||
|
|||||||
@@ -26,8 +26,9 @@ namespace RookieStation.Statistics
|
|||||||
UIApplication uiapp = commandData.Application;
|
UIApplication uiapp = commandData.Application;
|
||||||
UIDocument uidoc = uiapp.ActiveUIDocument;
|
UIDocument uidoc = uiapp.ActiveUIDocument;
|
||||||
Document doc = uidoc.Document;
|
Document doc = uidoc.Document;
|
||||||
|
//调试路径
|
||||||
string fileName = UserConstant.AddinDirectory + "\\RsLibrary\\Document\\样板工程量清单.xlsx";
|
//string fileName = UserConstant.AddinDirectory + "\\RsLibrary\\Document\\样板工程量清单.xlsx";
|
||||||
|
string fileName = UserConstant.DocumentDirectory + "样板工程量清单.xlsx";
|
||||||
SaveFileDialog sfd = new SaveFileDialog()
|
SaveFileDialog sfd = new SaveFileDialog()
|
||||||
{
|
{
|
||||||
Filter = "Excel文件|*.xlsx"
|
Filter = "Excel文件|*.xlsx"
|
||||||
@@ -227,7 +228,14 @@ namespace RookieStation.Statistics
|
|||||||
var furnitures = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Furniture).OfClass(typeof(FamilyInstance));
|
var furnitures = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Furniture).OfClass(typeof(FamilyInstance));
|
||||||
foreach (FamilyInstance furn in furnitures)
|
foreach (FamilyInstance furn in furnitures)
|
||||||
{
|
{
|
||||||
bool isdetail = furn.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).AsString().Contains("大样");
|
var param = furn.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS);
|
||||||
|
string dayang = param.AsValueString();
|
||||||
|
bool isdetail = false;
|
||||||
|
if (dayang != null)
|
||||||
|
{
|
||||||
|
isdetail = dayang.Contains("大样");
|
||||||
|
}
|
||||||
|
|
||||||
if (furn.Symbol.FamilyName.Contains("收检台") && !isdetail)
|
if (furn.Symbol.FamilyName.Contains("收检台") && !isdetail)
|
||||||
{
|
{
|
||||||
exitGateDeskCount += 1;
|
exitGateDeskCount += 1;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user