添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Hello,

I’m getting a list of block instance preview “thumbnails” as System.Drawing.Bitmaps that I want to use in an Eto.ImageView control like so:

It appears I cannot directly pass the system bitmap to the Eto bitmap.

Is there a method I can use that handles this conversion? Perhaps casting, or something else I am overlooking?

Here’s the excerpt from my code:

        # Calculate grid cell count
        cell_size = 150  # Set your desired cell size here
        column_count, row_count = self.calculate_grid(cell_size)
        top_padding = 30
        # capture bitmap
        thumbnail = forms.ImageView()
        t_size = System.Drawing.Size(cell_size, cell_size)
        thumbnail.Image = None
        # # get active view
        # view = sc.doc.Views.ActiveView
        # thumbnail_bitmap = view.CaptureToBitmap()
        # Rhino.RhinoApp.WriteLine(str(thumbnail_bitmap))
        block_table = sc.doc.ActiveDoc.InstanceDefinitions  # Get All Block Instance Definitions In Document
        block_names = []
        block_thumbnails = []
        for block in block_table:
            block_names.append(block.Name)  # Get Individual Block Name
            block_thumbnails.append(Rhino.DocObjects.InstanceDefinition.CreatePreviewBitmap(block, Rhino.Display.DefinedViewportProjection.Perspective, t_size))  # Create Bitmap Of Block Preview Image
        Rhino.RhinoApp.WriteLine(str(block_names))
        Rhino.RhinoApp.WriteLine(str(block_thumbnails))
        # Add text labels and thumbnails to the grid layout
        for row in range(row_count):
            for col in range(column_count):
                # Create a panel to hold label and thumbnail
                panel = forms.Panel()
                panel.Size = drawing.Size(cell_size, cell_size)
                panel_layout = forms.TableLayout(panel.Size)
                panel_layout.Padding = drawing.Padding(5)
                panel_layout.Spacing = drawing.Size(5, 5)
                # Add label
                label = forms.Label()
                label.Text = f"({row}, {col}) - "
                if row * column_count + col < len(block_names):
                    label.Text += block_names[row * column_count + col]
                else:
                    label.Text += "No block defined"
                label.TextColor = b_color_light if dark_mode else b_color_dark
                panel_layout.Add(label, 0, 0)
                # Add thumbnail
                thumbnail = forms.ImageView()
                thumbnail.Size = drawing.Size(cell_size - 10, cell_size - 40)
                # thumbnail.SizeMode = forms.PictureBoxSizeMode.StretchImage
                if row * column_count + col < len(block_thumbnails):
                    thumbnail.Image = block_thumbnails[row * column_count + col]
                else:
                    thumbnail.Image = None
                panel_layout.Add(thumbnail, 0, 1)
                panel.Content = panel_layout
                # Add panel to the layout
                self.layout.Add(panel, (col * cell_size) + lib_padding, (row * cell_size) + lib_padding + top_padding)
        self.Content = self.layout

and the type error I am getting:

TypeError: System.Drawing.Bitmap value cannot be converted to Eto.Drawing.Image

Thank you all for your help!

Thanks but this doesn’t seem to work in Python3? Am I missing something @nathanletwory ?

import Rhino.UI.EtoExtensions
ModuleNotFoundError: No module named 'Rhino.UI.EtoExtensions'