Revit二次开发-用GDI+绘制线样式

  最近有个需求就是将动态将当前文档中的线样式绘制出来,并且显示在自己的UI上。查阅了一下api文档以及吉米大佬的博客,并且这篇博客中受到启发 填充样式绘制

然后自己琢磨了一下,成功将线样式绘制出来了。 但是目前有个问题就是圆点我在dash pattern里面设置的是1f的单位,如果图片放大看的话是个小矩形,目前还未找到好的方法处理。我在这里抛砖引玉,希望有大佬研究出完美的绘制方案。 下面是代码和效果图

[Transaction(TransactionMode.Manual)]
    internal class DashLine : IExternalCommand
    {
        private readonly string _desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var doc = commandData.Application.ActiveUIDocument.Document;
            using (var collector = new FilteredElementCollector(doc))
            using (var filter = new ElementClassFilter(typeof(LinePatternElement)))
            {
                var elems = collector.WherePasses(filter).OfType<LinePatternElement>();
                var pen = new Pen(System.Drawing.Color.Black);
                foreach (var item in elems)
                {
                    try
                    {
                        var filePath = Path.Combine(_desktop, $"{item.Name}.bmp");
                        var linePattern = LinePatternElement.GetLinePattern(doc, item.Id);
                        var actualWidth = 400;
                        var actualHeight = 50;
                        var image = new Bitmap(actualWidth, actualHeight);
                        if (linePattern?.IsValidObject ?? false)
                        {
                            using (var graphics = Graphics.FromImage(image))
                            {
                                var dashPattern = linePattern.GetSegments().Select(s => s.Type == LinePatternSegmentType.Dot ? 1f : Convert.ToSingle(s.Length * 304.8));
                                var rectangle = new System.Drawing.Rectangle(0, 0, actualWidth, actualHeight);
                                var orginX = rectangle.Left + rectangle.Width / 2;
                                var orginY = rectangle.Top + rectangle.Height / 2;
                                graphics.TranslateTransform(orginX, orginY);
                                var rect = new System.Drawing.Rectangle(-(actualWidth / 2), -(actualWidth / 2), (int)actualWidth, actualWidth);
                                graphics.FillRectangle(Brushes.White, rect);
                                graphics.ResetTransform();
                                orginX = rectangle.Left;
                                orginY = rectangle.Top + rectangle.Height / 2;
                                pen.DashPattern = dashPattern.ToArray();
                                graphics.TranslateTransform(orginX, orginY);
                                graphics.DrawLine(pen, 0f, 0f, 400f, 0f);
                            }
                            image.Save(filePath, System.Drawing.Imaging.ImageFormat.Bmp);
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
            return Result.Succeeded;
        }
    }

 

 

 

 

 

 

 

 

 

 

 

欢迎大家加入Q群:307886854 这里可以聊Revit二次开发 .net开发~

posted @   热情定无变  阅读(338)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
主题色彩
点击右上角即可分享
微信分享提示