错误161327 -LibreOffice无法正确处理dr3d:end-angle值
总结: LibreOffice无法正确处理dr3d:end-angle值
状态: 新款
别名:
产品: 办公套件
分类: 未分类
组件: 办公套件(显示其他错误)
版本:
(最早受影响)
从OOo继承
硬件: 全部全部
: 中等的正常的
受让人: 未分配
网址: https://docs.oasis-open.org/office/Op。。。
白板: odf目标:24.8.0
关键词:
取决于:
阻碍: ODF导入 3D-模型 ODF-导出无效
  显示相关性图表
 
报道: 2024-05-29 18:55 UTC截止日期里贾娜·亨舍尔
被改进的: 2024-06-11 09:47 UTC(历史)
用户(显示)

另请参阅:
碰撞报告或碰撞签名:


附件

注释你需要登录在您可以评论或更改此bug之前。
描述 里贾娜·亨舍尔 2024-05-29 18:55:59协调世界时
启动新的Draw文档。画一条对角线。将直线转换为三维旋转对象(从关联菜单)。如果尚未选择场景,请选择场景并打开“3D效果”对话框(从关联菜单)。进入场景。应选择旋转对象,否则选择它。将线条样式设置为“实心”。在“3D效果”对话框中,将字段“旋转角度”设置为180°。退出场景。保存文档,例如保存到.fodg。在编辑器中打开保存的文件。搜索属性“dr3d:end-angle”。它的值为1800。这是错误的。ODF指定角度具有数据类型角度(18.3.1)。打开那里的规范。https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part3-schema/open文档-v1.3-os-part3-chema.html#__RefHeading__1416540_253892949你在那里读到:<引用>[SVG]§4.1中定义的角度是一个双精度值,后面紧跟着以下角度单位标识符之一:deg(度)、grad(梯度)或rad(弧度)。如果未指定单位标识符,则假定该值以度为单位。</quote>由于LibreOffice没有写入单位,因此该值应为180,而不是1800。现在我们尝试读取该值。在编辑器集合中,不是“1800”,而是“180deg”、“200grad”或“3.14159265359rad”中的任意一个。打开如此更改的文档。在任何情况下,都会得到360°的旋转对象。也就是说,LibreOffice无法解释单位标识符,而是使用默认的360°。我认为,解决方案可以分为两个步骤。1.使LibreOffice能够解释dr3d:end-angle的角度单位标识符。2.写入ODF 1.4时,写入“180deg”而不是“1800”。我认为,我们应该继续将ODF 1.3和更早版本的文档中的无单位值解释为1/10度,以便与旧文档向后兼容。迈克尔,你觉得如何解决这个问题?
评论1 里贾娜·亨舍尔 2024-05-29 19:01:36 UTC
在“3D效果”对话框中,将字段“旋转角度”设置为180°_应用_
评论2 m_a_riosv(_R) 2024-05-30 10:58:00 UTC
我可以在原始文件(fodg)上看到值“1800”,但重新打开文件并调用3D效果时,显示值“180º”版本:24.8.0.0.alpha1+(X86_64)/LibreOffice Community内部版本ID:6084962f93efc005b6827edceae12d3170f17ccdCPU线程数:16;操作系统:Windows 11 X86_64(10.0内部版本22631);UI渲染:滑雪/光栅;VCL:赢区域设置:es es(es_es);用户界面:en-US计算:CL螺纹
评论3 里贾娜·亨舍尔 2024-05-30 12:55:10协调世界时
(答复来自的m_a_riosv评论#2)>我可以在原始文件(fodg)上看到值“1800”,但重新打开文件>并调用3D效果,显示值“180º”这就是为什么我们需要一种保持向后兼容的方法。LibreOffice将该值解释为1/10度,但ODF明确指定为度。我无法估计技术委员会是否会同意更改规范,以便将没有单位的值解释为1/10度。我不知道除了LibreOffice和OpenOffice之外是否还有其他应用程序可以显示3D对象。
评论4 m_a_riosv(_R) 2024-05-30 13:25:08 UTC(世界协调时)
我没有技术知识来查看代码,但可能最后的“0”被解释为默认值->度,而不是真正的1/10值。
评论5 迈克尔·斯塔尔(异向性) 2024-06-04 10:40:26 UTC
这个问题听起来很熟悉。。。
评论6 迈克尔·斯塔尔(异向性) 2024-06-04 11:03:01协调世界时
我想错误89475只是关于梯度。图式中也有这些“角度”:*“common-draw-circle-ellipse-attlist”上的draw:start-angle/draw:end-angle属性*样式:“通用旋转角度属性列表”上的旋转角度*dr3d:“dr3d-scene-attlist”上的阴影植物*draw:文本-状态-角度,draw:挤压-旋转-角度,draw:挤压-skew on“draw-enhanced-geometry-attlist”*绘制:在“draw-hatch-attlist”上旋转*图表:“style-chart-properties-attlist”上的角度设置*绘制:“样式-属性-属性列表”上的标题角度*style:“style-text-properties-attlist”上的text-rtation-angle我希望这些不是都破了吗?
评论7 里贾娜·亨舍尔 2024-06-04 11:54:13协调世界时
(回复Michael Stahl(异向性)评论#6)>我希望这些不是都破了吗?我会调查的。
评论8 里贾娜·亨舍尔 2024-06-05 20:20:53 UTC
我的调查(见下文)表明,我们需要一种更通用的方法https://gerrit.libreoffice.org/c/core网站/+/168336也许是以下内容?添加bool转换器::convertAngleWithUnit(double&rAngle,std::u16string_view rString,bool&rHasUnit)bool转换器::convertAngleWithUnit(double&rAngle,std::string_view rString,bool&rHasUnit)并在当前convertNumber或convertDouble用于角度时使用它。不仅可以将带有单位的角度转换为度,还可以告知是否有单位,允许在Converter::convertAngle中使用它,并且对于必须考虑错误写入十分之一度的情况(dr3d:end angle和draw:rotation in hatch)。所以,让所有情况下都能读取单位角度。在当前写无单位度的情况下,我们不需要更改导出,只需要更改导入。在当前单位小于1/10度的情况下,我们需要在某个时间导出单位“deg”,此时所有活动版本都可以读取单位。ODF1.4可能为时过早,但ODF1.5将起作用。以下是我的调查结果(希望正确):没有一种情况能够使用单位导入角度。所有情况都不导出角度单位。(A) 写无单位的十分之一学位-----------------------------------draw:rotation=>UNO FillHatch。角度dr3d:end-angle=>UNO D3DEndAngle(此错误报告)(B) 导出:无单位度导入:忽略单位,将数字部分作为度--------------------------------------------------公共绘图-圆形-椭圆-属性列表绘制:start-angle=>UNO CircleStartAngle绘制:结束角度=>UNO CircleEndAngle通用旋转角度附件图表:角度设置=>UNO起始角度在图表中,例如在标题和轴标签中style:rotation-angle=>UNO文本旋转dr3d-scene-attlistdr3d:shadow-slant=>UNO D3DSceneShadowSlant增强型几何图形附件draw:text-rotate-angle=>UNO TextRotateAngle(在CustomShapeGeometry中)draw:extrusion-rotation-angle=>UNO RotateAngle(CustomShapeGeometry.extrusion)draw:extrusion-skew=>UNO skew(在CustomShapeGeometry.extrusion中)draw:“样式图形属性attlist”上的标题角度draw:caption-angle=>UNO CaptionAngle(可以在宏中设置/获取,但在渲染中没有效果)(C) 导出:无单位度导入:带单位的数字根本不导入,结果默认为0°----------------------------------------------------------------------表格-属性-附件列表style:rotation-angle=>UNO RotateAngle(D) 导出:无单位度导入:无单位度数值映射到0、90和270;其他不支持带单位的数字根本不导入,导致默认值为0°-------------------------------------------------------------------------------------样式-文本-属性-字符样式中的属性列表style:text-rotation-angle=>UNO字符旋转(E) 样式:未实现数字格式、列表或大纲中的文本旋转角度
评论9 迈克尔·斯塔尔(异向性) 2024-06-07 09:53:07 UTC(世界协调时)
(回复Regina Henschel,来自评论#8)>我的调查(见下文)表明,我们需要一种更通用的方法>当前在https://gerrit.libreoffice.org/c/core网站/+/168336> >也许是以下内容?>添加>bool转换器::convertAngleWithUnit(double&rAngle,std::u16string_view>rString、bool和rHasUnit)>bool转换器::convertAngleWithUnit(double&rAngle,std::string_view>rString、bool和rHasUnit)>并在当前convertNumber或convertDouble用于角度时使用它。> >不仅可以将带单位的角度转换为度,还可以告知是否有>是一个单元,允许在Converter::convertAngle和>(dr3d:end angle and draw:rotation in hatch)其中错写了1/10>必须考虑学位。> >所以,让所有情况下都能读取单位角度。绝对应该在任何地方都能看到单位的角度。这些函数的一个问题是,SvXMLImport可以检查版本号,但不能从“sax”模块使用,所以必须由xmloff来完成。我认为使用rHasUnit输出参数或isWrongOOo10thDegAngle并让函数进行转换也同样有效。我想知道,是否需要新的导入功能?对于严重的情况,在导出修复之前,您可以只传递“true”作为convertAngle()的isWrongOOo10thDegAngle?除非在某些情况下支持的精度超过10度,否则“双精度”实现是有意义的。>在目前编写无单元学位的情况下,我们不需要更改>导出但仅导入。> >如果当前单位少于文凭的十分之一,我们将>当所有活动版本都能够>读取单位。ODF1.4可能为时过早,但ODF1.5将起作用。>以下是我的调查结果(希望正确):> >没有一种情况能够导入带单位的角度。>没有任何案例导出角度单位。> >(A)写不到1/10个学位的单位>     ----------------------------------->draw:rotation=>UNO FillHatch。角度>dr3d:end-angle=>UNO D3DEndAngle(此错误报告)好的,很好,所以只有一个额外的严重问题。。。
评论10 里贾娜·亨舍尔 2024-06-09 16:01:53 UTC
我已经打开了错误161483对于LibreOffice无法读取角度单位,但可以正确写入无单位角度的度数的情况。所以这个错误报告是针对(A)中的两个案例,LibreOffice错误地将角度值写入1/10度。(回复Michael Stahl(异向性)评论#9)>除非存在精度超过10度的情况>在支持的情况下,“双重”实现是有意义的。ODF中的数据类型“angle”是double。但在我上传了下一个版本的补丁之后,讨论起来就容易多了。
评论11 提交通知 2024-06-11 08:30:22 UTC
Regina Henschel提交了与此问题相关的修补程序。它已被推到“master”:https://git.libreoffice.org/core/commit/567dbcf68711402736f65f4a0a47ef57549fe50f

tdf编号161327解释dr3d:end-angle中的角度单位。。它将在24.8.0中提供。修补程序应包含在每日构建中,网址为https://dev-builds.libreoffice.org/每日/在接下来的24-48小时内。更多有关每日构建的信息,请访问:https://wiki.documentfoundation.org/Testing_Daily_Builds网站鼓励受影响的用户测试修复并报告反馈。
评论12 里贾娜·亨舍尔 2024-06-11 09:47:50协调世界时
只有当所有活动版本都能够读取“deg”并且用户可能已经切换到它们时,才能完成写入单元“deg“的部分。该准则对此有一些评论。保持这个错误报告的打开状态可能会很有用,以便在两年内自动获得剩余部分。因此,我没有将其设置为“已解决的固定”,而是将其重新设置为“新的”。