明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4275|回复: 17

[函数] 断面线点表生成断面挖填点表

[复制链接]
发表于 2018-9-12 22:40:54 | 显示全部楼层 |阅读模式
;;[功能]断面数据点表生成断面挖填点表
;;[用法](LC:Section-line-ptlst-sort-lst ptlst1 ptlst2)
;;[作者]BY 老仓测绘上班记
;;;(setq ptlst1 (LC:WH-vxs (car (entsel"\n 请选择原始地貌线:"))))
;;;(setq ptlst2 (LC:WH-vxs (car (entsel"\n 请选择设计j线:"))))
;;;(PTLST1 PTLST2 / INTPTS ORIGINAL-INT DESIGN-INT I II ORIGINAL-INT-NEW JBLST WFLST TFLST INTPT DESIGN-INT1 ORIGINAL-INT1)
(defun LC:Section-line-ptlst-sort-lst (PTLST1 PTLST2 /)
  (setq intpts (BF-list-delsame (LC:TWO-ptlst-inters-lst ptlst1 ptlst2 "0")0.001));交点表
  (setq Original-int '() design-int '())
  (setq Original-int (append Original-int ptlst1 intpts);原始地貌线总数据
design-int (append design-int ptlst2 intpts));设计线总数据
  ;交点及原始断面数据按Y值从小到大即断面图从左到右排序(Y值控制偏距)
  (setq design-int (BF-list-delsame(vl-sort design-int '(lambda (x y) (> (car x) (car y))))0.001))
  (setq Original-int (BF-list-delsame(vl-sort Original-int '(lambda (x y) (< (car x) (car y))))0.001))
  (setq i 0 ii 0 Original-int-new '() wtfllst '() wflst '() tflst '())
  (repeat (- (length intpts) 1)
    (progn
      (setq intpt1 (nth ii intpts));第ii个交点
      (setq intpt2 (nth (+ ii 1) intpts));第ii个交点
      (setq Original-int1 (vl-remove-if '(lambda (x) (or (<= (car x)  (car(nth ii intpts))) (>= (car x)  (car(nth (1+ ii) intpts))))) Original-int));原始断面线两交点之间的端点列表
      (setq design-int1 (vl-remove-if '(lambda (x) (or (<= (car x)  (car(nth ii intpts))) (>= (car x)  (car(nth (1+ ii) intpts))))) design-int));设计线两交点之间的端点列表
;;;      (setq jblst (append jblst (list (append (list intpt1) Original-int1 (list intpt2) design-int1))));把每段地面线数据及设计数据合并(append design-int1 design-int1 Original-int1)
      (if (and (last design-int1) (or (> (cadr(nth ii intpts)) (cadr(last design-int1))) (> (cadr(nth (1+ ii) intpts)) (cadr(last design-int1)))))
(setq wflst (append wflst (list (append (list intpt1) Original-int1 (list intpt2) design-int1))))
(setq tflst (append tflst (list (append (list intpt1) Original-int1 (list intpt2) design-int1))))
      )
    )
    (setq ii (1+ ii))
  )
  (setq wtfllst (append wtfllst (list wflst) (list tflst)));挖填总表  
  (princ wtfllst)
  (princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-9-15 21:05:24 | 显示全部楼层
有兴趣的可以移驾到下面的连结去看一下:
https://www.theswamp.org/index.php?topic=45305.15



  1. ;;; Cut & Fill      by ymg                                                    ;
  2. ;;;                                                                           ;



  3. (defun c:cf (/ ** *acdoc* a are b bnd c cutcol d dir dl1 dl2 e fillcol hcol
  4.                intl len1 len2 p p0 p1 p2 pm pol1 pol2 sp1 sp2 spe ss1
  5.                ss2 totcut totfill txt txtlayer varl)
  6.                
  7.    (vl-load-com)

  8.    (defun *error* (msg)
  9.         (mapcar 'eval varl)
  10.         (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")))
  11.            (princ (strcat "\nError: " msg))
  12.         )
  13.         (and *acdoc* (vla-endundomark *acdoc*))
  14.         (princ)
  15.    )

  16.    (setq varl '("OSMODE" "CMDECHO" "DIMZIN" "PEDITACCEPT")
  17.          varl (mapcar (function (lambda (a) (list 'setvar a (getvar a)))) varl)
  18.    )

  19.    (or *acdoc* (setq *acdoc* (vla-get-activedocument (vlax-get-acad-object))))

  20.    (vla-startundomark *acdoc*)

  21.    (setvar 'CMDECHO 0)
  22.    (setvar 'DIMZIN  0)
  23.    (setvar 'OSMODE  0)


  24.    (setq cutcol 1  fillcol 3  ; Cut is Red, Fill is Green                     ;
  25.          totcut 0  totfill 0  ; Total Cut and Total Fill                      ;
  26.            txtlayer "Text"    ; Name of Layer for Cut and Fill Values         ;

  27.    )
  28.    (while (not (setq **  (princ "\nSelect Reference Polyline:")
  29.                      ss1 (ssget "_+.:L:S" '((0 . "LWPOLYLINE")))
  30.                )
  31.           )
  32.         (princ "\nYou Must Select a Polyline:")
  33.    )                  
  34.    (while (not (setq **  (princ "\nSelect Proposed Polyline:")
  35.                      ss2 (ssget "_+.:L:S" '((0 . "LWPOLYLINE")))
  36.                )
  37.           )
  38.         (princ "\nYou Must Select a Polyline:")
  39.    )

  40.      
  41.    (setq pol1 (ssname ss1 0)
  42.          len1 (vlax-curve-getDistAtParam pol1 (vlax-curve-getEndParam pol1))
  43.          pol2 (ssname ss2 0)
  44.          len2 (vlax-curve-getDistAtParam pol2 (vlax-curve-getEndParam pol2))
  45.          sp1  (vlax-curve-getstartpoint pol1)
  46.          spe  (vlax-curve-getendpoint pol1)
  47.          sp2  (if (vlax-curve-isClosed pol2)
  48.                  (setq lst2 (listpol pol2)
  49.                        disl (mapcar '(lambda (a) (distance sp1 a)) lst2)
  50.                        **   (plineorg pol2 (nth (vl-position (apply 'min disl) disl) lst2))
  51.                  )
  52.                  (vlax-curve-getstartpoint pol2)
  53.                )  
  54.          dir  (if (< (/ pi 2) (angle sp1 spe) (/ (* 3 pi) 2)) -1 1)
  55.    )      
  56.    

  57.    ; Getting all the intersections between poly.                              ;

  58.    (setq intl (intersections pol1 pol2))

  59.    (if (> (length intl) 1)
  60.       (progn
  61.    
  62.    ; Computing distance of intersections on each polyline                     ;
  63.    
  64.          (setq dl1  (mapcar '(lambda (a) (getdistoncurve pol1 a)) intl)
  65.                dl2  (mapcar '(lambda (a) (getdistoncurve pol2 a)) intl)
  66.          )
  67.    
  68.    ; If both polyline are closed add first Intersection to end of list        ;
  69.    ; We also add a distance to each distances list                            ;

  70.          (if (and (vlax-curve-isClosed pol1) (vlax-curve-isClosed pol2))
  71.             (setq dl1  (append dl1 (list (+ (car dl1) len1)))
  72.                   dl2  (append dl2 (list (+ (car dl2) len2)))
  73.                   intl (append intl (list (car intl)))
  74.                   dir  (if (iscw_p (listpol pol1)) -1 1)   
  75.             )      
  76.          )
  77.    

  78.    ; Finding points at mid-distance between intersections on each polyline    ;
  79.    ; Calculating midpoint between mid-distance points to get an internal point;
  80.    ; Creating a list of all these points plus the intersection points         ;
  81.    
  82.          (setq pm
  83.             (mapcar
  84.                 '(lambda (a b c d e)
  85.                     (list (midpoint
  86.                               (setq p1 (getptoncurve pol1 (rem (* (+ a b) 0.5) len1)))
  87.                               (setq p2 (getptoncurve pol2 (rem (* (+ c d) 0.5) len2)))
  88.                            )
  89.                            p1 p2 e            
  90.                      )
  91.                   )
  92.                   dl1 (cdr dl1) dl2 (cdr dl2) intl
  93.              )
  94.          )      

  95.    
  96.    
  97.          (foreach i pm
  98.             (setq  p (car    i)  ; Midpoint between p1 p2                           ;
  99.                   p0 (cadddr i)  ; Intersection Point                               ;
  100.                   p1 (cadr   i)  ; Midpoint of Intersections on Reference Polyline  ;
  101.                   p2 (caddr  i)  ; Midpoint of Intersections on Proposed Polyline   ;
  102.             )
  103.             (if (> (abs (onside p2 p0 p1)) 1e-3) ; Not Colinear                     ;
  104.                (progn
  105.                   (vl-cmdf "._-BOUNDARY" p "")
  106.                   (setq are (vla-get-area (vlax-ename->vla-object (entlast)))
  107.                         bnd (entlast)
  108.                   )
  109.             
  110.                   (if (minusp (* (onside p2 p0 p1) dir))               
  111.                      (setq totfill (+ totfill are) hcol fillcol)
  112.                      (setq totcut  (+ totcut  are) hcol  cutcol)
  113.                   )
  114.                
  115.                   (vl-cmdf "._-HATCH" "_CO" hcol "." "_P" "SOLID" "_S" bnd "" "")
  116.                   (entdel bnd)
  117.                )
  118.             )
  119.          )
  120.          (setq   p (cadr (grread nil 13 0))
  121.                txt (strcat "{\\C3;Fill: " (rtos totfill 2 2) " m2\\P\\C1;Cut: " (rtos totcut  2 2) " m2}")
  122.          )         
  123.          (entmakex (list
  124.                       (cons 0 "MTEXT")
  125.                       (cons 100 "AcDbEntity")
  126.                       (cons 8 txtlayer)
  127.                       (cons 100 "AcDbMText")
  128.                       (cons 10 p)                 
  129.                       (cons 40 3.0)
  130.                       (cons 1 txt)
  131.                     )
  132.          )            

  133.          (command "_MOVE" (entlast) "" p pause)
  134.       )
  135.       (Alert "Not Enough Intersections To Process !")
  136.   )

  137.   (*error* nil)

  138. )

  139. (princ "\nCalculates Cut & Fill Between Two Intersecting Polylines")
  140. (princ "\nCF to start...")



  141. (defun midpoint (p1 p2)
  142.    (mapcar '(lambda (a b) (* (+ a b) 0.5)) p1 p2)
  143. )

  144. ; onside        by ymg                                                        ;
  145. ; Negative return, point is on left of v1->v2                                 ;
  146. ; Positive return, point is on right of v1->v2                                ;
  147. ;        0 return, point is smack on the vector.                              ;
  148. ;                                                                             ;

  149. (defun onside (p v1 v2 / x y)
  150.     (setq x (car p) y (cadr p))
  151.     (- (* (- (cadr v1) y) (-  (car v2) x)) (* (- (car  v1) x) (- (cadr v2) y)))
  152. )

  153. ;                                                                             ;
  154. ; Is Polyline Clockwise                      by LeeMac                        ;
  155. ;                                                                             ;
  156. ; Argument:   l,  Point List                                                  ;
  157. ; Returns:    t, Polyline is ClockWise                                        ;
  158. ;           nil, Polyline is CounterClockWise                                 ;
  159. ;                                                                             ;

  160. (defun iscw_p (l)
  161.     (if (equal (car l) (last l) 1e-8) (setq l (cdr l)))
  162.     (minusp
  163.         (apply '+
  164.             (mapcar
  165.                 (function
  166.                   (lambda (a b) (- (* (car b) (cadr a)) (* (car a) (cadr b))))
  167.                 )
  168.                 l (cons (last l) l)
  169.             )
  170.         )
  171.     )
  172. )

  173. ;;                                                                            ;
  174. ;; Return list of intersection(s) between two VLA-Object or two ENAME         ;
  175. ;; obj1 - first VLA-Object                                                    ;
  176. ;; obj2 - second VLA-Object                                                   ;
  177. ;; mode - intersection mode (acExtendNone acExtendThisEntity                  ;
  178. ;;                                acExtendOtherEntity acExtendBoth)           ;
  179. ;; Requires triplet                                                           ;
  180. ;;                                                                            ;

  181. (defun Intersections (obj1 obj2)
  182.    (or (= (type obj1) 'VLA-OBJECT) (setq obj1 (vlax-ename->vla-object obj1)))
  183.    (or (= (type obj2) 'VLA-OBJECT) (setq obj2 (vlax-ename->vla-object obj2)))
  184.            
  185.    (triplet (vlax-invoke obj1 'intersectwith obj2 acExtendNone))
  186. )

  187. ;;                                                                            ;
  188. ;; triplet, Separates a list into triplets of items.                          ;
  189. ;;                                                                            ;

  190. (defun triplet (l)
  191.    (if l (cons (list (car l) (cadr l) (caddr l))(triplet (cdddr l))))
  192. )


  193. (defun getdistoncurve (e p)
  194.    (vlax-curve-getDistatParam e
  195.         (vlax-curve-getparamatpoint e
  196.              (vlax-curve-getclosestpointto e p)
  197.         )     
  198.    )            
  199. )

  200. (defun getptoncurve (e d)
  201.    (vlax-curve-getpointatparam e (vlax-curve-getparamatdist e d))
  202. )

  203. ;;                                                                            ;
  204. ;; listpol     by ymg    (Simplified a Routine by Gile Chanteau               ;
  205. ;;                                                                            ;
  206. ;; Parameter:  en,  Entity Name or Object Name of Any Type of Polyline        ;
  207. ;;                                                                            ;
  208. ;; Returns:    List of Points in Current UCS                                  ;
  209. ;;                                                                            ;
  210. ;; Notes:      On Closed Polyline the Last Vertex is Same as First)           ;
  211. ;;                                                                            ;

  212. (defun listpol (en / i l)
  213.    (repeat (setq i (fix (1+ (vlax-curve-getEndParam en))))
  214.       (setq l (cons (trans (vlax-curve-getPointAtParam en (setq i (1- i))) 0 1) l))
  215.    )
  216. )


  217. ;; plineorg   by (gile) (Modified into a function by ymg)                     ;
  218. ;;  https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/          ;
  219. ;;            change-polyline-start-point/td-p/2154331                        ;
  220. ;;                                                                            ;
  221. ;; Function to modify origin of a closed polyline                             ;
  222. ;;                                                                            ;
  223. ;; Arguments:                                                                 ;
  224. ;;   en : Ename or VLA-Object of a Closed Polyline.                           ;
  225. ;;   pt : Point                                                               ;
  226. ;;                                                                            ;
  227. ;; Returns: Point of Origin if successful, else nil.                          ;
  228. ;;                                                                            ;

  229. (defun plineorg (en pt / blst d1 d2 d3 n norm obj pa plst)
  230.    (if (= (type en) 'ENAME)
  231.       (setq obj (vlax-ename->vla-object  en))
  232.       (setq obj en   en (vlax-vla-object->ename obj))
  233.    )
  234.    
  235.     ;; bulgratio   by (gile)                                 ;
  236.     ;; Returns a bulge which is proportional to a reference  ;
  237.     ;; Arguments :                                           ;
  238.     ;; b : the reference bulge                               ;
  239.     ;; k : the ratio (between angles or arcs length)         ;

  240.    (defun bulgratio (b k / a)
  241.       (setq a (atan b))
  242.       (/ (sin (* k a)) (cos (* k a)))
  243.    )

  244.     ;; Sublist  by (gile)                                    ;
  245.     ;; Returns a sublist similar to substr function.         ;
  246.     ;; lst : List from which sublist is to be extracted      ;
  247.     ;; idx : Index of Item at Start of sublist               ;
  248.     ;; len : Length of sublist or nil to return all items.   ;

  249.    (defun sublist (lst n len / rtn)
  250.       (if (or (not len) (< (- (length lst) n) len))
  251.          (setq len (- (length lst) n))
  252.       )
  253.       (setq n (+ n len))
  254.       (repeat len
  255.          (setq rtn (cons (nth (setq n (1- n)) lst) rtn))
  256.       )
  257.    )

  258.    (if (and (= (vla-get-closed obj) :vlax-true)
  259.             (= (vla-get-objectname obj) "AcDbPolyline")
  260.        )     
  261.       (progn
  262.          (setq plst (vlax-get obj 'coordinates)
  263.                norm (vlax-get obj 'normal)
  264.                pt   (vlax-curve-getClosestPointTo en (trans pt 1 0))
  265.                pa   (vlax-curve-getparamatpoint obj pt)
  266.                n    (/ (length plst) 2)         
  267.          )
  268.          (repeat n
  269.             (setq blst (cons (vla-getbulge obj (setq n (1- n))) blst))
  270.          )
  271.          (if (= pa (fix pa))
  272.             (setq n    (fix pa)
  273.                   plst (append (sublist plst (* 2 n) nil)
  274.                                (sublist plst 0 (* 2 n))
  275.                        )
  276.                   blst (append (sublist blst n nil) (sublist blst 0 n))
  277.             )
  278.             (setq n    (1+ (fix pa))
  279.                   d3   (vlax-curve-getdistatparam en n)
  280.                   d2   (- d3 (vlax-curve-getdistatpoint en pt))
  281.                   d3   (- d3 (vlax-curve-getdistatparam en (1- n)))
  282.                   d1   (- d3 d2)
  283.                   pt   (trans pt 0 (vlax-get obj 'normal))
  284.                   plst (append (list (car pt) (cadr pt))
  285.                                (sublist plst (* 2 n) nil)
  286.                                (sublist plst 0 (* 2 n))
  287.                        )
  288.                   blst (append (list (bulgratio (nth (1- n) blst) (/ d2 d3)))
  289.                                (sublist blst n nil)
  290.                                (sublist blst 0 (1- n))
  291.                                (list (bulgratio (nth (1- n) blst) (/ d1 d3)))
  292.                        )
  293.             )
  294.          )
  295.          (vlax-put obj 'coordinates plst)
  296.          (repeat (setq n (length blst))
  297.             (vla-setbulge obj (setq n (1- n)) (nth n blst))
  298.          )
  299.          (trans pt 0 1)
  300.       )
  301.       nil
  302.    )
  303. )






 楼主| 发表于 2018-11-13 17:58:14 | 显示全部楼层
;;[功能]两点表计算交点
;;[用法](LC:TWO-ptlst-inters-lst ptlst1 ptlst2 "0")
;;[作者]BY 老仓测绘上班记
;;说明:得到两个二维点表的交点
;;用非vla-IntersectWith方法不生成对象写的点表交点函数,可选多种延长方向,两点表都可以选择是否双向延长还是各自单向延长
;;参数:lst1:点表1
;;参数:lst2:点表2
;;参数:typ:延长类型(不区别大小写):"0000"或其他—两个都不延长;"0001"—延长点表2右侧两个点; "0010"—延长点表2左侧两个点; "0011"—延长点表2两侧两个点; "1000"—延长点表1左侧两个点; "0100"—延长点表1右侧两个点;"1100"—延长点表1两侧两个点;"1111"—延长点表1和点表2两侧两个点;
;;返回:符合条件的包括所有交点的二维点表
;;示例
;;;(setq ptlst1 (LC:WH-vxs (car (entsel"\n 请选择原始地貌线:"))))
;;;(setq ptlst2 (LC:WH-vxs (car (entsel"\n 请选择设计j线:"))))
  ;(setq lst1 (list (list 1492.5310 356.4799) (list 1693.9629 457.0300) (list 2085.9058 466.7216) (list 2281.2705 367.3829)))
        ;(setq lst2 (list (list 1567.8204 362.9696) (list 1667.2671  324.9823) (list 1980.3360 258.3527) (list 2205.2348 357.8477)))
        ;(setq typ "0011")
  ;(LC:TWO-ptlst-inters-lst lst1 lst2 typ)
  ;((1532.53 376.449) (2255.92 380.272))
(defun LC:TWO-ptlst-inters-lst (lst1 lst2 typ / ii jj pt1 pt2 pt3 pt4 azi intpt interpt)
   (setq ii (length lst1))
   (setq jj (length lst2))
  ;延长lst1左侧
  (if (= (substr typ 1 1) "1")
    (progn
     (setq pt1 (nth 0 lst1))
     (setq pt2 (nth 1 lst1))
     (setq azi (angle pt1 pt2))
     (setq azi (+ pi azi))
     (setq lst1 (append (list (polar pt1 azi 10000) ) lst1 ))
    )
  )
  ;延长lst1右侧
  (if (= (substr typ 2 1) "1")
    (progn
     (setq pt1 (nth (1- ii) lst1))
     (setq pt2 (nth ii lst1))
     (setq azi (angle pt1 pt2))
     (setq lst1 (append lst1 (list (polar pt2 azi 10000) ) ))
    )
  )
  ;延长lst2左侧
  (if (= (substr typ 3 1) "1")
    (progn
     (setq pt3 (nth 0 lst2))
     (setq pt4 (nth 1 lst2))
     (setq azi (angle pt3 pt4))
     (setq azi (+ pi azi))
     (setq lst2 (append (list (polar pt3 azi 10000) ) lst2 ))
    )
  )
  ;延长lst2右侧
  (if (= (substr typ 4 1) "1")
    (progn
     (setq pt3 (nth (1- jj) lst2))
     (setq pt4 (nth jj lst2))
     (setq azi (angle pt3 pt4))
     (setq lst2 (append lst2 (list (polar pt4 azi 10000) ) ))
    )
  )
  ;计算交点坐标
   (setq ii (1- (length lst1)))
   (setq jj (1- (length lst2)))
   (setq intpt nil interpt nil i 0 )
   (while (< i ii)
     (setq pt1 (nth i lst1))
     (setq pt2 (nth (1+ i) lst1))
     (setq j 0)
     (while (< j jj)
       (setq pt3 (nth j lst2))
       (setq pt4 (nth (1+ j) lst2))
       (setq intpt (inters pt1 pt2 pt3 pt4 t) )
       (if (/= intpt nil)
           ;将交点坐标存入点表
           (setq interpt (append interpt (list intpt)))
       )
       (setq j (1+ j))
     )
     (setq i (1+ i))
   )
interpt
)


;;;name:BF-list-delsame
;;;desc:删除表中相同元素,保留第一次出现的位置
;;;arg:lst:列表
;;;arg:buzz:容差
;;;return:删除重复元素组成的表
;;;exampleBF-list-delsame '(0 1 2 3 2 4 4) 0.1)---->(0 1 2 3 4)
(defun BF-list-delsame (lst buzz)
  (if Lst
    (cons (car Lst)
          (BF-list-delsame
            (vl-remove-if
              '(lambda (x) (equal (car lst) x buzz))
              (cdr lst)
            )
            buzz
          )
    )
  )
)
发表于 2018-11-12 14:05:18 | 显示全部楼层
13648893846 发表于 2018-9-21 11:19
工作之余逐步写函数完善CASS任意断面法功能,太菜可能要很长一段时间

南方cass生成里程文件的时候,是按距离采样。不能按实际地形点采样。  目前我已经写了一个根据图面实际高程点采样的插件
发表于 2018-9-13 08:31:18 | 显示全部楼层
老仓老师最好是来个实例
好学习
发表于 2018-9-13 21:03:58 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-9-14 12:53:30 | 显示全部楼层
本帖最后由 cnks 于 2018-9-14 12:57 编辑

这个功能厉害,自动出工程量
发表于 2018-9-14 13:36:11 | 显示全部楼层
函数不全,无法应用
 楼主| 发表于 2018-9-15 19:16:27 来自手机 | 显示全部楼层
欠缺的函数论坛都有
发表于 2018-9-15 21:53:41 来自手机 | 显示全部楼层
13648893846 发表于 2018-9-15 19:16
欠缺的函数论坛都有

搜过了,没找到
发表于 2018-9-19 16:34:34 | 显示全部楼层
可以把老仓老师的这几个做成一个断面版块工具了
 楼主| 发表于 2018-9-21 11:19:16 来自手机 | 显示全部楼层
工作之余逐步写函数完善CASS任意断面法功能,太菜可能要很长一段时间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-15 11:03 , Processed in 0.213883 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表