如何在Excel中绘制3D线框?

法比奥意大利面

使用Excel界面,如何绘制3D线框?我不知道该怎么做!但想通过给出关节之间有框架的坐标来实现。

为了简化示例,仅设想一个立方体形式的3D线框。

在此处输入图片说明

梅登

好的,因此我之前曾建议打开宏记录器,但这不会给您绘制线框所需的3D数学。为此,您需要一个库,即Philip Rideout的SVG线框Python库,该在他的博客上编写

我的博客上,我添加了一些代码,这些代码解析由Philip Rideout的代码生成的SVG文件,然后将Polygon指令从工作表上的形状转换为Excel。这是输出的屏幕截图。

Excel工作表上的3D线框

我也在这里添加了代码

class ScreenUpdatingRAII(object):
    def __init__(self, app, visible:bool=False):
        self.app = app
        self.saved = app.ScreenUpdating
        app.ScreenUpdating = visible

    def restore(self):
        self.app.ScreenUpdating = self.saved
        self.app = None


def convertSvgToExcelShapes(filename):
    import xml.etree.ElementTree as ET
    from win32com.client  import GetObject,Dispatch

    # code below is highly dependent on the child
    # structure because xpath was not working for me (my bad)
    dom = ET.parse(filename)
    rootxml = dom.getroot()
    g = rootxml[1] # second child 
    wb = Dispatch(GetObject(r"C:\Users\Simon\source\repos\WireframeExcelShapes\WireframeExcelShapes\WireframeExcelShapes.xlsx"))
    app = Dispatch(wb.Parent)
    ws = Dispatch(wb.Worksheets.Item("WireFrame"))

    shps = Dispatch(ws.Shapes)

    for x in shps:
        Dispatch(x).Delete()
    idx =0
    scale, xoffset, yoffset = 500, 300,300

    screenUpdates = ScreenUpdatingRAII(app)

    for polygon in g:

        # triple nested list comprehension parsing the points by splitting 
        # first by space then by comma then converting to float
        points = [[float(z[0])*scale+xoffset, float(z[1])*scale+yoffset] for z in [y.split(',') for y in [x for x in polygon.attrib['points'].split()]]]

        #print(points)
        msoEditingAuto,msoSegmentLine, msoFalse, msoTrue = 0,0,0, -1 

        freeformbuilder=shps.BuildFreeform(msoEditingAuto, points[0][0] , points[0][1])
        freeformbuilder.AddNodes(msoSegmentLine, msoEditingAuto, points[1][0] , points[1][1])
        freeformbuilder.AddNodes(msoSegmentLine, msoEditingAuto, points[2][0] , points[2][1])
        freeformbuilder.AddNodes(msoSegmentLine, msoEditingAuto, points[0][0], points[0][1])
        newShp = Dispatch(freeformbuilder.ConvertToShape())

        shpFill = Dispatch(newShp.Fill)

        shpFill.Visible = msoTrue
        shpFill.Transparency = 0.25
        shpFill.Solid
        shpFill.ForeColor.RGB = 0xFFFFFF 
        idx=+1

    screenUpdates.restore()
    pass



filename = "octahedron.svg" 
generate_svg(filename)
convertSvgToExcelShapes(filename)

由于样品形状是八面体,因此您仍然需要做一些工作来生成自己的形状。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Matlab中绘制3d贝壳

来自分类Dev

如何在Matlab中快速绘制3D向量?

来自分类Dev

如何在R中绘制3d参数方程式?

来自分类Dev

如何在R中绘制3D函数?

来自分类Dev

Matplotlib 3d线框图未按预期绘制

来自分类Dev

如何在QML场景上绘制3D线?

来自分类Dev

如何在八度/ Matlab中绘制3D线

来自分类Dev

如何在Matlab中绘制3D有向图

来自分类Dev

在3D中绘制正态分布

来自分类Dev

如何在a帧中创建线框3D立方体?

来自分类Dev

问题在matplotlib 3D线框可视化

来自分类Dev

如何绘制3D曲面?

来自分类Dev

如何在Simulink中根据实时(x,y,z)坐标绘制3d图?

来自分类Dev

在3D surfaceplot中绘制DataFrame

来自分类Dev

在Matlab中绘制3D曲面

来自分类Dev

如何在通过kmeans获得的星团的R中绘制3D图?

来自分类Dev

如何在R中为时间序列光谱数据绘制漂亮的3D图

来自分类Dev

gnuplot:如何在不同直径的3D中绘制均匀球体?

来自分类Dev

在3D中绘制多个系列

来自分类Dev

如何在3D空间中绘制参数曲线?

来自分类Dev

如何在matplotlib中绘制伪3d条形图?

来自分类Dev

如何在matlab中绘制一个用颜色填充的3d圆

来自分类Dev

线框(x,数据...)中x的格式(R中的晶格3D绘图包)

来自分类Dev

如何在Matlab中绘制圆形3D图

来自分类Dev

如何在R中绘制矩阵或3D体积的堆栈

来自分类Dev

如何在R中绘制3d参数方程式?

来自分类Dev

如何从Matlab中的线段绘制3D对象

来自分类Dev

如何在three.js中从BufferGeometry绘制2D/3D网格

来自分类Dev

如何在python中绘制3d图形