本帖最后由 zgs378530220 于 2025-10-21 15:04 编辑

现在需要根据字符串内容画多线段:
例如字符串:“960*6+640+1280+[960*2+640]+1280*2+[960*2]+960*2+ []960*5”
字符串规则1:
*前数字(960或640或1280)为多线段一段的长度,*后数字为该多线段的数量,当数量为1时可省略
字符串规则2:
字符串中必须成组出现[];
当[]中间为空时,是折角;
当不为空时,是弧形;
当不存在[]时,为平面;
允许出现多组[];
折角角度和弧形角度暂时统一按照90度;

现在0~1组[]的结果比较容易用拆组判断解决,
求:如果出现[]两组或以上,该怎么解决,希望各位大大出出主意



网友答: 使用+将字符串分解,然后对每一段进行可能性分类:

  • 包含[]
  • 包含[XXXXXXX]
  • 只包含[
  • 只包含]
  • 。。。。

然后针对每种分类进行处理,整体上,需要一个角度的全局变量,根据分类确实能够是否需要增加90度。


网友答: 本帖最后由 llsheng_73 于 2025-10-22 09:52 编辑

按一楼的附图理解:[]出现时,线路会转折90度( 要么用弧线过渡,要么直接转)
那么需要转折-90度时,是不是用][或其它符号,另外,是不是需要用特定符号带数值来指定角度,当符号不出现时,直线方向为0度,转折为90度?
不然使用场景极其受限

网友答:
kozmosovia 发表于 2025-10-21 15:58
使用+将字符串分解,然后对每一段进行可能性分类:



如果字符串是960*5+640+[960*5+640+960*2],这样的[]内有多个+就容易漏掉

网友答:
llsheng_73 发表于 2025-10-22 09:50
按一楼的附图理解:[]出现时,线路会转折90度( 要么用弧线过渡,要么直接转)
那么需要转折-90度时,是不 ...

实际角度是个变量,通过正负值判断方向,而非通过[]判断

网友答:
zgs378530220 发表于 2025-10-22 12:06
如果字符串是960*5+640+[960*5+640+960*2],这样的[]内有多个+就容易漏掉

不会漏掉,说了需要有变量记录角度,或者和当前形状,只需要根据分解的数据绘制。
初始化:角度0,形状直线
960*5:绘制直线
640:绘制直线
[960*5:修改角度或者形状,然后绘制
640:按照刚刚修改的角度形状绘制
960*2]:按照刚刚修改的角度形状绘制,并更新角度或者形状

所以只需要枚举[和]可能出现的位置情况并相应处理即可。

网友答:
kozmosovia 发表于 2025-10-22 13:56
不会漏掉,说了需要有变量记录角度,或者和当前形状,只需要根据分解的数据绘制。
初始化:角度0,形状 ...

理解了,
用一个变量记录当前+分组的状态,这样无论多少[]都可以
这个方法非常好,
感谢
  • 上一篇:;删除块儿对象包围框内的线图元要素
  • 下一篇:没有了