有没有试过用翻模软件翻设备(消防箱)位置会偏移?生成箱体和图块方向相反?就像下图1、2情况,研究了一下是因为是识别CAD图块的坐标点和族的原点不一致导致偏移的,还有CAD图块的Y比例会影响图块的方向。可惜调整了消防箱的原点(中心),翻模还是偏移。。。所以决定自己搞一个出来。
设备翻模思路:
1.根据CAD图块的坐标点,放置设备族(将消防箱族的原点调整在中心);
2.根据CAD图块的旋转角度、Y比例进行已生成的族实例旋转;
3.生成啦!测试检查完美,翻其他设备思路应该是一样的。
var pickp = CADLineReference.GlobalPoint;
var blockrefs = cADModelUtils.CADBlockRefenceInfos(uidoc, filpath);//获取CAD所有图块
string blocklayer = null;//图层名称
string blockname = null;//图块名称
double maxd = double.MaxValue;
foreach (var item in blockrefs)
{
var d = pickp.DistanceTo(CADtransform.OfPoint(item.BlockRefLoca));
if (d<maxd)
{
maxd = d;
blocklayer = item.LayerName;
blockname = item.BlockName;
}
}
Autodesk.Revit.DB.Transaction tr = new Autodesk.Revit.DB.Transaction(doc, "familyinstance");
tr.Start();
foreach (var item in blockrefs)
{
if (item.LayerName == blocklayer)
{
if (item.BlockName== blockname)
{
var rotan = item.Rotation;//角度
var locaP = CADtransform.OfPoint(item.BlockRefLoca);//坐标
var syblo = Tools.SearchFamilyGetFamilySybolByName(doc, "带灭火器箱组合式消防柜_单栓", "1800×700×240");
var familyinstance = doc.Create.NewFamilyInstance(locaP, syblo, doc.ActiveView.GenLevel, StructuralType.NonStructural);
var ScaleFactorsY = item.ScaleFactorY;//Y比例
ElementTransformUtils.RotateElement(doc, familyinstance.Id, locaP.GoesDirExtend(XYZ.BasisZ, 100),rotan);
if (familyinstance.Symbol.FamilyName.Contains("消防箱") || familyinstance.Symbol.FamilyName.Contains("消防柜"))
{
if (ScaleFactorsY > 0)
{
ElementTransformUtils.RotateElement(doc, familyinstance.Id, locaP.GoesDirExtend(XYZ.BasisZ, 100), 180.0.AngleToRadius());//旋转180°
}
}
}
}
}
tr.Commit();
!](https://img-blog.csdnimg.cn/e86be3c815294523a9f8a13b091f63b0.png)
分享一个自制Revit插件,本人是个BIM工程师,该插件是根据自己做工程一些经验和对插件功能的频繁度,自己整合开发功能,初衷是提高效率。
目前MagicTools的功能包括通用功能、土建、机电、审图、出图功能。还有好多功能都想做,如果有好的需求也可以提,后续有新增继续增加上去,努力弄个实用的插件,希望能帮到真正有需要的BIMer。
如有需要的可以加企鹅群:630552940
插件下载地址,免费试用
链接:https://pan.baidu.com/s/1GDnHeWwZ5r_HrnT3Mo7twA?pwd=jhlt
提取码:jhlt