开源改变世界

DXF 支持 #68

推推 grbl 2年前 (2023-02-03) 297次浏览
关闭
 打开了这个问题 2016 年 12 月 11 日 · 23条评论
关闭

DXF 支持#68

 打开了这个问题 2016 年 12 月 11 日 · 23条评论

评论

DXF 支持 #68

来自 LW3 的端口 DXF 支持——然而它严重依赖 threejs 将圆/弧/等分割成多段线,所以……可能是一个困难的
导入库(three-dxf 来自https://github.com/gdsestimating/three- dxf ) 做得非常出色……我们可以扔给它的每个文件都有效。除了“线”dxf 没有自动关闭。并且不支持样条曲线。就是这样

DXF 支持 #68  加了 请编码 标签 2016 年 12 月 11 日
DXF 支持 #68
作者
 评论了 2016 年 12 月 12 日 通过电子邮件
DXF 支持 #68
成员

在内部,新架构不使用 SVG;相反,它将 SVG 转换为更方便的格式。我们不需要 DXF 到 SVG 的转换;相反,我们需要 DXF 格式。

DXF 支持 #68
合作者
jorgerobles 评论了 2016 年 12 月 12 日 通过电子邮件
DXF 支持 #68
作者
 评论了 2016 年 12 月 12 日 通过电子邮件
DXF 支持 #68
作者
 评论了 2016 年 12 月 12 日 通过电子邮件
DXF 支持 #68
成员

该格式也在自述文件中。

DXF 支持 #68
作者
 评论了 2016 年 12 月 12 日 通过电子邮件
DXF 支持 #68
作者

@lautr3k 你还活着吗(;?

1条相似评论
DXF 支持 #68

是的,我还活着 :) 努力研究 SVG 解析器(ES6 和 NPM 模块):https ://github.com/lautr3k/lw.svg-parser

正如我一开始所说,我想制作每个人都可以(重新)使用的库。很快与 DXF 解析器相同。

DXF 支持 #68
作者

(; 只是检查 – 担心沉默

DXF 支持 #68

也就是说,很快,我开始了一份带薪工作,几周内我都不会很忙。

DXF 支持 #68
作者

(:虽然这对我们来说很悲伤,但我为你感到高兴!

DXF 支持 #68
贡献者

我计划使用 @lautr3k lw.svg-parser 作为我的路线图来破解 dxf 解析。

我不是代码忍者,但我可能可以获得对 Sketchup DXF 导出选项的支持,因为我可以使用 NB70/sketchup-dxf-stl-exporter 源仅导出 3 种线型。

DXF 支持 #68
作者
 评论了 2016 年 12 月 31 日 通过电子邮件
DXF 支持 #68
贡献者

感谢您的澄清。我倾向于重新发明轮子。

今晚我会看一下流程,然后带着问题回来。

DXF 支持 #68
贡献者
冰蓝3710 评论了 2016 年 12 月 31 日  

哎呀。所以最终目标是将解析器输出转换为密钥state下的主要程序documents

对象结构为:

Object {
  children: Array[], // <= Relational tree of descendants under the same "grouping"
  dataURL: "", // <= N/A
  dpi: 1, // <= N/A
  fillColor: Array[], // <= Obvious
  id: uuid.v4(), // <= Used to track each primitive on canvas
  isRoot: false, // <= true on root of whole object only, not on root of children
  mimeType: "", // <= N/A
  name: "b: bla", // <= name + id or layerName
  rawPaths: Array[], // <= The coords for the primitive
  scale: Array[], // <= FloatingControls modifies this? 
  selected: false, // <= For marching ants outline
  strokeColor: Array[], // <= Obvious
  translate: Array[], // <= FloatingControls modifies this? 
  type: "rect", // <= drawing primitive name
}

因为做事情骨架然后增加复杂性会很好,所以我有一个简单的 DXF,带有几条线和一个框。对象中至少需要哪些字段才能使绘图引擎发挥作用?

Object {
  id: uuid.v4(),
  name: "b: bla", // Cam tree layer/group name
  type: "rect", // Cam tree item name
  rawPaths: Array[], // <= The coords for the primitive
  strokeColor: Array[0,0,0,0.8], // Force dark grey 
  scale: Array[1,1,1],
  translate: Array[0,0,0],
  selected: false
}
DXF 支持 #68
作者
 评论了 2016 年 12 月 31 日 通过电子邮件
DXF 支持 #68
成员
纠结 评论了 2017 年 1 月 1 日  

整个字段集是必需的,并且会随着时间的推移而变化。通过克隆 initialDocument(使用{...initialDocument})创建新对象,然后更改必要的字段。有两种情况。

父对象和组对象:更改这些字段:

let root = {
    ...initialDocument,
    id: uuid.v4(),
    type: 'document', (or group, layer, etc)
    name: 'File Name',
    isRoot: true,
    children: [...],
};

形状:

let shape = {
    ...initialDocument,
    id: uuid.v4(),
    type: 'type of object (rect, polyline, etc)',
    name: 'this shows up in UI', // For SVG, I use 'SVG name: SVG id' "name" in SVG is really type (rect, circle, etc.)
    translate: [0, 0, 0],
    scale: [1, 1, 1],
    rawPaths: [...],
    strokeColor: [r, g, b, a],  // a=1: solid, a=0: invisible
    fillColor: [r, g, b, a],
};

保持 a = 0 或 1,除非源文件有 alpha,或表示有问题。例如,SVG 导入器使用浅灰色表示原始文件中缺少填充和描边。这可以防止格式错误的 SVG 文件不可见。

编辑:形状没有孩子

DXF 支持 #68
贡献者

好吧,我已经解析了 dxf,并在 reducer 中准备好映射到新doc树中。

我遵循了 LW3 中的流程,在输出端没有什么是相同的,我认为渲染和fillTree()代码是为加载的每种文件类型专门构建的?在 LW4 中,我们试图制作一个统一的 docTree,我们可以将其传递给新的绘制函数?

我至少应该能够使用 LW3 流程来填充 docTree,然后我就可以担心点函数了。

DXF 支持 #68
贡献者
冰蓝3710 评论了 2017 年 1 月 1 日  

我在 PR #113中有一个工作示例

尚未准备好合并,但欢迎发表评论。

编辑:如果有人有一个 DXF 示例,其中包含我们想要支持的所有功能,那就太好了。很难找到免费的 DXF 文件。

DXF 支持 #68
贡献者

好吧,DXF_R12 中的所有内容(文本除外)都可以正常工作。解析器不支持样条曲线等较新的功能,但 R12 文件格式将它们保存为折线,因此一切都很好。

TEST_EVERYTHING_R12.dxf.txt
DXF 支持 #68

DXF 支持 #68

只需要清理代码,添加一些文档,我们就可以将其放入测试版。我已经尝试了所有的 dxf,所以现在需要一些真实世界的经验。