乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 41|回复: 17

[编程交流] 需要体素3D实体

[复制链接]

11

主题

31

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 15:22:13 | 显示全部楼层 |阅读模式
大家好,
 
下面是我在AutoCAD中对三维实体进行体素化的例程的初稿。我使用的方法是检查每个体素立方体和原始三维实体之间的干涉。如果存在重叠(大于50%),则保留该体素并继续。它可以工作,但运行非常缓慢。
 
任何和所有的投入,以优化这将不胜感激。
 
  1. (defun c:voxelize ()
  2.    (command "undo" "begin")
  3.    (setq
  4. oosmode                (getvar "osmode")
  5. o3Dosmode        (getvar "3Dosmode")
  6. clayer                (getvar "clayer")
  7.    )
  8.    (setvar "osmode" 0)
  9.    (setvar "3Dosmode" 0)
  10.    (setq
  11. voxsld                (car (entsel "\nSelect Solid to Voxelize: "))
  12. voxsldobj        (vlax-ename->vla-object voxsld)
  13.    )
  14.    (vla-GetBoundingBox voxsldobj 'MinP 'MaxP)
  15.    (setq
  16. minsld        (vlax-safearray->list MinP)
  17. maxsld        (vlax-safearray->list MaxP)
  18. abssldx        (- (car maxsld) (car minsld))
  19. abssldy        (- (cadr maxsld) (cadr minsld))
  20. abssldz        (- (caddr maxsld) (caddr minsld))
  21.            voxsize        (getint (strcat "\nVoxel Size (Bounding box is " (rtos abssldx 2 0) "x" (rtos abssldy 2 0) "x" (rtos abssldy 2 0) "): "))
  22. xcount        (1+ (fix (/ abssldx voxsize)))
  23. ycount        (1+ (fix (/ abssldy voxsize)))
  24. zcount        (1+ (fix (/ abssldz voxsize)))
  25. voxcnt        1
  26. xcnt        0
  27. ycnt        0
  28. zcnt        0
  29. voxx        (car minsld)
  30. voxy        (cadr minsld)
  31. voxz        (caddr minsld)
  32. voxvol        (expt voxsize 3)
  33.    )
  34.    (setq
  35. voxx1        (- voxx (/ voxsize 2))
  36. voxy1        (- voxy (/ voxsize 2))
  37. voxz1        (- voxz (/ voxsize 2))
  38. voxpnt1        (list voxx1 voxy1 voxz1)
  39.    )
  40.    (setq nl (open "c:/temp/pointfile.csv" "w") )
  41.   
  42.    (command "._layer" "_m" "cons" "")
  43.    (command "._box" voxpnt1 "_C" voxsize)
  44.    (setq curvox (entlast))
  45.    (while (< zcnt zcount)
  46. (while (< ycnt ycount)
  47.     (while (< xcnt xcount)
  48.         (setq
  49.             xcnt        (1+ xcnt)
  50.             voxxcen        (+ voxx (* xcnt voxsize))
  51.             voxx2        (- voxxcen (/ voxsize 2))
  52.             voxycen        (+ voxy (* ycnt voxsize))
  53.             voxy2        (- voxycen (/ voxsize 2))
  54.             voxzcen        (+ voxz (* zcnt voxsize))
  55.             voxz2        (- voxzcen (/ voxsize 2))
  56.             voxpnt2        (list voxx2 voxy2 voxz2)
  57.         )
  58.         (if (vla-CheckInterference (vlax-ename->vla-object curvox) (vlax-ename->vla-object voxsld) :vlax-true 'test)
  59.             (progn
  60.                 (setq
  61.                     curvoxint                (entlast)
  62.                     curvoxintobj        (vlax-ename->vla-object curvoxint)
  63.                 )
  64.                 (if (> (vla-get-volume curvoxintobj) (/ voxvol 2.01))
  65.                     (progn
  66.                         (entdel curvoxint)
  67.                         (command "._copy" curvox "" voxpnt1 voxpnt2)
  68.                         (setq curvox (entlast))
  69.                         (write-line (strcat (itoa voxcnt) "," (rtos voxxcen 2 3) "," (rtos voxycen 2 3) "," (rtos voxzcen 2 3)) nl)
  70.                         (setq voxcnt (1+ voxcnt) )
  71.                     )
  72.                     (progn
  73.                         (entdel curvoxint)
  74.                         (command "._move" curvox "" voxpnt1 voxpnt2)
  75.                     )
  76.                 )
  77.             )
  78.             (command "._move" curvox "" voxpnt1 voxpnt2)
  79.         )
  80.         (setq
  81.             voxx1        voxx2
  82.             voxy1        voxy2
  83.             voxz1        voxz2
  84.             voxpnt1        voxpnt2
  85.         )
  86.     )
  87.     (setq
  88.         xcnt        0
  89.         ycnt        (1+ ycnt)
  90.     )
  91. )
  92. (setq
  93.     ycnt        0
  94.     zcnt        (1+ zcnt)
  95. )
  96.    )
  97.    (entdel (entlast))
  98.    (close nl)
  99.    (setvar "clayer" clayer)
  100.    (setvar "osmode" oosmode)
  101.    (setvar "3Dosmode" o3Dosmode)
  102.    (if (> voxcnt 1)
  103. (setq cntplrl "s")
  104. (setq cntplrl "")
  105.    )
  106.    (princ (strcat "\n" (itoa voxcnt) " Voxel" cntplrl " Created"))
  107.    (command "undo" "end")
  108.    (princ)
  109. )
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:27:51 | 显示全部楼层
 
我很好奇,我决定试试,但注意到你添加了代码!无论如何,谢谢分享。
 
1、为了优化性能,IMO关闭视觉效果平面图。
2、避免使用命令,尤其是在循环中(重复等时),entmake或vla方法更快
 
我的尝试也很慢。
(尺寸为1x1x1时,20x15x10大约需要1minit)
可能是因为使用3DArray方法填充边界框。
然后花时间与主体干涉,然后去除残余物。
3Darray有限制,不能超过约1M!!
 
我试图采纳您的想法,即用户输入的行x列x高度允许用户决定适当的体素大小。
 
  1. (defun c:voxel (/ *error* doc s os en i sol sob ss sz int bb xyz box a b z)
  2. ;hanhphuc .29.03.2018
  3. [color="green"];Just for voxel test purpose, currently only WCS[/color]
  4. (defun *error* (msg) (if os (setvar 'osmode os)))
  5. (setq os (getvar 'osmode)
  6. doc '((l / doc)
  7. (setq doc (vlax-get-acad-object))
  8. (foreach x l (setq doc (vlax-get doc x))))
  9. )
  10. (setvar 'osmode 0)
  11. (princ "\nVoxelize Solid object..")
  12. (and
  13.      (while (not s)
  14.              (setq s (ssget "_:S:E+." '((0 . "3DSOLID")))
  15.               )
  16.      )
  17.       (setq sol (ssname s 0) sob (vlax-ename->vla-object sol))
  18.       (progn (vla-GetBoundingBox sob 'a 'b)
  19.       (setq bb (mapcar 'vlax-safearray->list (list a b)))
  20.       (setq xyz (apply 'mapcar (cons '(lambda (a b) (rtos (- b a) 2 0)) bb)) )
  21.       (initget 7)
  22.       (setq sz (getint (strcat "\nSpecify voxel size (Bounding box is " (cadr xyz) "x" (car xyz) "x" (caddr xyz) "): ")))
  23. ); progn
  24. (setq xyz (mapcar 'atoi xyz))
  25.              (setq box (vla-AddBox (doc '(ActiveDocument ActiveLayout Block))
  26.                 (vlax-3d-point (mapcar ''((x)(+ x (* 0.5 sz)))(car bb))) sz sz sz))
  27.         (progn
  28. (vla-ArrayRectangular box (/(cadr xyz) sz) (/(car xyz) sz) (/([color="red"][b]caddr[/b][/color] xyz)sz) sz sz sz)
  29.       (gc)
  30. (princ "\nSelect voxel " )
  31.         (setq ss (ssget ":L" '((0 . "3DSOLID"))))
  32. );progn
  33.   (progn
  34.       (ssdel sol ss)
  35.       (repeat (setq i (sslength ss))
  36.         (if (and (setq en (ssname ss (setq i (1- i))))
  37.                  (setq int (vla-checkinterference (vlax-ename->vla-object en) sob :vlax-true))
  38.                  )
  39.           (ssdel en ss)
  40.           )
  41.         (if int (entdel (vlax-vla-object->ename int)))
  42.         )
  43.       (vl-cmdf "_.erase" ss "")
  44.       (if os
  45.         (setvar 'osmode os)
  46.         )
  47.       ); progn
  48.       ) ;and
  49. (*error* nil)
  50. (princ)
  51. ) ;_ end of defun
  52. (vl-load-com)
回复

使用道具 举报

11

主题

31

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 15:31:48 | 显示全部楼层
嗨,哈恩,
 
感谢您在此项目上的合作。这就是我喜欢CadTutor的地方!:-)
 
在过去的几天里,我改进了我的代码,将八叉树合并在一起,以加快这个过程。代码现在定义了一个包含选定实体的立方体,然后根据干涉实体是否具有100%的体素体积,将每个立方体依次划分为8个较小的立方体。这个过程一直持续到体素的总体积是原始实体的70%(这个数字很适合我的应用程序)。
 
这是我的最新代码。我期待着您的反馈、建议和代码改进。
 
  1. (defun c:voxelize2 ()
  2.    (command "undo" "begin")
  3.    (setq
  4. oosmode                (getvar "osmode")
  5. o3Dosmode        (getvar "3Dosmode")
  6. clayer                (getvar "clayer")
  7.    )
  8.    (setvar "osmode" 0)
  9.    (setvar "3Dosmode" 0)
  10.    (setq
  11. voxsld                (car (entsel "\nSelect Solid to Voxelize: "))
  12. voxsldobj        (vlax-ename->vla-object voxsld)
  13. voxsldvol        (vla-get-volume voxsldobj)
  14.    )
  15.    (vla-GetBoundingBox voxsldobj 'MinP 'MaxP)
  16.    (setq
  17. minsld                (vlax-safearray->list MinP)
  18. maxsld                (vlax-safearray->list MaxP)
  19. abssldx                (- (car maxsld) (car minsld))
  20. abssldy                (- (cadr maxsld) (cadr minsld))
  21. abssldz                (- (caddr maxsld) (caddr minsld))
  22. volratio        0.
  23. abslst                (list abssldx abssldy abssldz)
  24. abslst                (vl-sort abslst '>)
  25. octside                (car abslst)
  26. minoct                minsld
  27. maxoct                (list (+ (car minoct) octside) (+ (cadr minoct) octside) (+ (caddr minoct) octside))
  28. octcnt                0
  29.    )
  30.    (command "._layer" "_m" "cons" "")
  31.    (setq voxlst (octdivide (list minoct maxoct) 0) )
  32.    (while (< volratio 0.7) ; 70% fill volume
  33. (setq octcnt (1+ octcnt))
  34. (foreach vox voxlst
  35.     (if (= (car vox) 0)
  36.         (progn
  37.             (setq
  38.                 voxpnt1        (cadr vox)
  39.                 voxpnt2        (caddr vox)
  40.             )
  41.             (command "._box" voxpnt1 voxpnt2)
  42.             (setq
  43.                 curvox                (entlast)
  44.                 checkval        (checkinterfere curvox voxsld)
  45.             )
  46.             (entdel curvox)
  47.             (cond
  48.                 ((= checkval nil)        ;not inside solid (remove from list)
  49.                  (setq voxlst (vl-remove vox voxlst))
  50.                 )
  51.                 ((= checkval 0)        ;partialy inside solid (octree)
  52.                  (setq
  53.                      voxlst        (vl-remove vox voxlst)
  54.                      voxlst        (append voxlst (octdivide (list voxpnt1 voxpnt2) 0))
  55.                  )
  56.                 )
  57.                 ((> checkval 0)        ;100% inside solid (no more work needed)
  58.                  (setq voxlst (subst (cons octcnt (cdr vox)) vox voxlst))
  59.                 )
  60.             )
  61.         )
  62.     )
  63. )
  64. (setq totalvoxvol 0.)
  65. (foreach vox voxlst
  66.     (if (> (car vox) 0)
  67.         (progn
  68.             (setq
  69.                 voxpnt1        (cadr vox)
  70.                 voxpnt2        (caddr vox)
  71.             )
  72.             (command "._box" voxpnt1 voxpnt2)
  73.             (setq
  74.                 curvox                (entlast)
  75.                     curvoxobj        (vlax-ename->vla-object curvox)
  76.                 curvoxvol        (vla-get-volume curvoxobj)
  77.                 totalvoxvol        (+ totalvoxvol curvoxvol)
  78.             )
  79.             (entdel curvox)
  80.         )
  81.     )
  82. )
  83. (setq volratio (/ totalvoxvol voxsldvol) )
  84.    )
  85. ;;;    Remove un-used voxels
  86.    (foreach vox voxlst
  87. (if (= (car vox) 0)
  88.     (setq voxlst (vl-remove vox voxlst))
  89. )
  90.    )
  91.    
  92.    (setq revoxcnt 1)
  93.    
  94.    (while (< revoxcnt octcnt)
  95. (foreach vox voxlst
  96.     (if (= (car vox) revoxcnt)
  97.         (progn
  98.             (setq
  99.                 voxpnt1        (cadr vox)
  100.                 voxpnt2        (caddr vox)
  101.             )
  102.             (setq
  103.                 voxlst        (vl-remove vox voxlst)
  104.                 voxlst        (append voxlst (octdivide (list voxpnt1 voxpnt2) (1+ revoxcnt)))
  105.             )
  106.         )
  107.     )
  108. )
  109. (setq revoxcnt (1+ revoxcnt) )
  110.    )
  111.    (setq voxcnt 0)
  112. ;;;    Draw All Voxels
  113.    (foreach vox voxlst
  114. (setq
  115.     voxpnt1        (cadr vox)
  116.     voxpnt2        (caddr vox)
  117. )
  118. (command "._box" voxpnt1 voxpnt2)
  119. (setq voxcnt (1+ voxcnt) )
  120.    )
  121.    (setvar "clayer" clayer)
  122.    (setvar "osmode" oosmode)
  123.    (setvar "3Dosmode" o3Dosmode)
  124.    (if (> voxcnt 1)
  125. (setq cntplrl "s")
  126. (setq cntplrl "")
  127.    )
  128.    (princ (strcat "\n" (itoa voxcnt) " Voxel" cntplrl " Created"))
  129.    (command "undo" "end")
  130.    (princ)
  131. )
  132. (defun octdivide (cellcnrs octind)  
  133.    (setq
  134. cellmin                (car cellcnrs)
  135. cellmax                (cadr cellcnrs)
  136. cellabsx        (- (car cellmax) (car cellmin))
  137. cellabsy        (- (cadr cellmax) (cadr cellmin))
  138. cellabsz        (- (caddr cellmax) (caddr cellmin))
  139. newcell1        (list cellmin (dvmid cellmin cellmax))
  140. newcell2        (list (polar (car newcell1) (dtr 0.) (/ cellabsx 2)) (polar (cadr newcell1) (dtr 0.) (/ cellabsx 2)))
  141. newcell3        (list (polar (car newcell1) (dtr 90.) (/ cellabsy 2)) (polar (cadr newcell1) (dtr 90.) (/ cellabsy 2)))
  142. newcell4        (list (polar (car newcell2) (dtr 90.) (/ cellabsy 2)) (polar (cadr newcell2) (dtr 90.) (/ cellabsy 2)))
  143. newcell5        (list (list (car (car newcell1)) (cadr (car newcell1)) (caddr (cadr newcell1))) (list (car (cadr newcell1)) (cadr (cadr newcell1)) (caddr cellmax)))
  144. newcell6        (list (polar (car newcell5) (dtr 0.) (/ cellabsx 2)) (polar (cadr newcell5) (dtr 0.) (/ cellabsx 2)))
  145. newcell7        (list (polar (car newcell5) (dtr 90.) (/ cellabsy 2)) (polar (cadr newcell5) (dtr 90.) (/ cellabsy 2)))
  146. newcell8        (list (cadr newcell1) cellmax)
  147. newcellscnrs        (list (cons octind newcell1) (cons octind newcell2) (cons octind newcell3) (cons octind newcell4) (cons octind newcell5) (cons octind newcell6) (cons octind newcell7) (cons octind newcell8))
  148.    )
  149.    newcellscnrs
  150. )
  151. (defun checkinterfere (vox sld)
  152.    (setq
  153. return                0
  154. voxobj                (vlax-ename->vla-object vox)
  155. voxvol                (vla-get-volume voxobj)
  156.    )
  157.    (if (vla-CheckInterference voxobj (vlax-ename->vla-object sld) :vlax-true 'test)
  158. (progn
  159.     (setq
  160.         curvoxint        (entlast)
  161.         curvoxintobj        (vlax-ename->vla-object curvoxint)
  162.         curvoxintvol        (vla-get-volume curvoxintobj)
  163.     )
  164.     (if (equal curvoxintvol voxvol 1.)
  165.         (setq return octcnt)                ; 100% overlap
  166.         (setq return 0)                        ; less than 100% overlap (needs octree-ing)
  167.     )
  168.     (entdel curvoxint)
  169. )
  170. (setq return nil)                ; no overlap - remove from list
  171.    )
  172.    return
  173. )
  174. (defun DVmid ( a b )(mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) a b))                ;; Midpoint  -  Lee Mac Returns the midpoint of two points
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 15:34:44 | 显示全部楼层
嗨,科林
 
octodivide函数有一个未包含的依赖项(DVMID函数)
回复

使用道具 举报

11

主题

31

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 15:38:42 | 显示全部楼层
 
添加到代码部分。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:42:10 | 显示全部楼层
美好的毫无疑问,八叉树分形是最好的解决方案
 
 
不管好坏
  1. (car (car x )) = ([color="blue"]caar[/color] x)
  2. (dtr 90) --> (setq 90° (* 0.5 pi)) ; <--- just use variable 90°
  3. (dtr 0) = 0
回复

使用道具 举报

11

主题

31

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 15:44:00 | 显示全部楼层
 
我的建议是-通过提供恒定变量(setq 90°),我们是否可以优化非常大迭代的速度?这要考虑在内吗?
所以我也很感激你的建议
 
  1. (vla-CheckInterference voxobj sol :vlax-true '[color="red"]test[/color] )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 15:48:16 | 显示全部楼层
只是包括一些关于简单角度转换的内容,不管怎么说,谈到速度,这应该更快:(*1.5708 1.5708),但程序员更难解释。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:51:34 | 显示全部楼层
我不建议使用这样的方法,因为与使用pi相比,没有时间增益,但精度会降低
  1. (angtof "90" 0) >> 1.5708

使用pi也比使用angtof快
  1. Benchmarking ................Elapsed milliseconds / relative speed for 8192 iteration(s):
  2.    (* 90° 90°)..................................1014 / 6.62 <fastest>  [color="green"]; during iteration directly pointing to the value[/color]
  3.    (* ([color="blue"]DTR[/color] 90.0) ([color="blue"]DTR[/color] 90.0))....................1186 / 5.66 [color="green"]; <-- a bit slow because we need a function to convert the value[/color]
  4.    (* ([color="blue"]CVUNIT[/color] 90 "degrees" "radians") (...).....1794 / 3.74 [color="green"]; <-- function slows down due to lookup units degrees -> radians before conversion?[/color]
  5.    (* ([color="blue"]ANGTOF[/color] "90" 0) ([color="blue"]ANGTOF[/color] "90" 0))..........6708 / 1 <slowest> [color="green"]; <-- extra conversion string->number->lookup units->evaluation ?[/color]
  6.       

 
虽然Hanhphuc是正确的,(而不是使用类似angtof的函数),但这是使用包含在pi上执行的操作的var与执行pi操作的比较。
  1. Elapsed milliseconds / relative speed for 32768 iteration(s):
  2.    (/ PI 2).........1950 / 1.00 <fastest>
  3.    (/ 3.1416 2).....1950 / 1.00 <slowest>

差异可以忽略不计,差异仅由(/)运算引起。(毕竟,无论使用90DEG还是pi,它们都是相同的,一个包含浮点的变量)
 
对于vla CHECKINTERFACTION的第四个参数,可以使用它来查看是否存在干涉,而不实际创建实体,如果不需要,则需要在之后擦除。如果需要实体,则可以直接使用函数返回值(#vs nil)
 
科林·霍洛韦!
根据我对您代码的理解:
[列表=1]
  • 如果checkval为nil,则表示体素位于起始实体之外,并从体素列表中删除。
  • 如果checkval大于0,则表示体素位于起始实体内,并保留在体素列表中。
  • voxlst用于累积体积,以查看其是否超过0.70。
  • 如果一个立方体部分位于外部(checkval 0),则将其从列表中删除,并用8个八分位数替换,其中car为0,这应使其排除在累积体积的计数中。
    [/列表]
    这些我都对吗?如果是这样的话,有些事情让我困惑
     
    在此处绘制半径为6的图形。运行体素化2。最终得到1个球体和208个立方体,其中48个部分位于球体外部。
    球体体积为904.779。
    球体中100%包含的160个立方体的体积为540.0(59.6%)
    所有208个立方体(包括部分位于球体外的立方体)的体积为702.0(77.58%)。
    我只是不知道在你的代码立方体中,部分外部的部分在哪里可以计入总体积(除非我错过了什么,或者是由于在某处制作或操作某些列表时出错)
     
    我这样问是因为我制作了一个不使用任何命令调用的版本。它需要许多安全阵列>pline>区域>3Dsolid来处理。
    如果立方体有100%的干扰,我停止处理它们,并将其体积添加到累积总体积中。
    如果没有干扰,我会删除它们。
    如果部分在外,我计划下一个细分
    如果低于0.70,我创建下一个细分立方体,并使用相同的标准处理新立方体。
    我的运行时间并不好,但最终我得到了560个立方体(价值1568!)它们全部包含在球体中。基本上,对于这个球体,我使用vl调用,用2.5%的时间处理8倍多的立方体。为了进行苹果对苹果的比较,我们需要得到与tho相同的结果。是你的日常工作做得不够,还是我的日常工作做得太多?
  • 回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 15:56:27 | 显示全部楼层
    嗨,杰夫!
    感谢您对本项目的投入!
     
    我发现了一个逻辑炸弹,它允许我的例程在原始实体之外有立方体。。。我在一个公制毫米系统中工作,所以我在一个200半径的球体上测试,所以当我为干涉体积比较设置公差时,我将其设置为1.0。这适用于大型项目,但不是半径为6的球体!:-)
     
    下面是我的例行程序的修订版本。它为任意大小的球体创建1568个立方体。
     
    要回答第4点中的问题。。。是的,我正在对这些立方体进行八叉树运算,而不是在体积计算中使用它们。这是一个只有当体积比小于0.7时,我才可以通过分割立方体来获得一些效率的领域,但由于我处理列表的方式,我现在对另一个头还可以。
     
    我期待着看到运行时与解决同一问题的不同方法的比较:-)
     
    1. Elapsed milliseconds / relative speed for 16384 iteration(s):
    2.    (/ PI 2)............1030 / 2.10 <fastest>
    3.    (ANGTOF "90" 0).....2168 / 1.00 <slowest>
    回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-14 03:32 , Processed in 0.767662 second(s), 72 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表