明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: ashan

[源码] 阿甘计算器1.1(lsp源码版)加了2个小功能

  [复制链接]
发表于 2025-7-3 10:31:40 | 显示全部楼层
终于让我找到可以加载的计算器了,感谢修改
回复 支持 反对

使用道具 举报

发表于 2025-7-8 23:22:13 | 显示全部楼层
非常感谢,终于可以摆脱到处找计算器的日子了~!
回复 支持 反对

使用道具 举报

发表于 2025-7-31 19:20:00 | 显示全部楼层
cad自带了计算器,  你们不会都没用过吧?
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
有个BUG,选择5个150相乘时,出现表达式错误。
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
依托AI,修正大数据情况下错误情况

  1. ;阿甘CAD计算器 命令ad
  2. ;结果自动复制到剪贴板,支持天正文字、天正标高
  3. ;;;修正大数据情况下计算错误
  4. (setq GL-precision 2)  ;2为计算结果保留位数 自己根据需要修改
  5. (setq alttz_v "0")  ;"0"为不消去计算结果小数点后面的零,改为"1"则为消去
  6. (setq GL-text "D:/历史记录.txt") ;历史记录文件路径,注意路径为反斜杠“/”,可根据需要修改位置

  7. ;不出现对话框,直接计算 命令:y1=加法 y2=减法 y3=乘法 y4=除法
  8. (defun c:y1 () (GL:jiafa))
  9. (defun c:y2 () (GL:jianfa))
  10. (defun c:y3 () (GL:chengfa))
  11. (defun c:y4 () (GL:chufa))

  12. ;阿甘CAD计算器
  13. (vl-load-com)
  14. (command "cal")
  15. (command)     ;先调用cal,否则后面cal函数无法使用
  16. (setq GL-result "")          ;计算结果,全局变量
  17. (setq GL-lst (list ""))
  18. (defun c:ad (/ file)
  19.   (if (not (setq file (open GL-text "r")))
  20.     (progn
  21.       (setq file (open GL-text "w"))
  22.       (close file)
  23.     )
  24.     (close file)
  25.   )
  26.   (GL-xxjsq)
  27. )
  28. (defun GL-xxjsq (/ fname fn x dclid lin re file txt value reason)
  29.   (if (not GL-result)
  30.     (setq GL-result "")
  31.   )
  32.   (setq fname (vl-filename-mktemp nil nil ".dcl"))
  33.   (setq fn (open fname "w"))
  34.   (foreach x
  35.     '("  xxjsq : dialog{"
  36.       "  label="阿甘CAD计算器V1.1";"
  37.       "  :boxed_column{"
  38.       "  label="自动计算";"
  39.       "  :row {"
  40.       "      :button{key="1";label="+";width=4;}"
  41.       "      :button{key="2";label="-";width=4;}"
  42.       "      :button{key="3";label="*";width=4;}"
  43.       "      :button{key="4";label="/";width=4;}"
  44.       "  }"
  45.       "  spacer_1;"
  46.       "  }"
  47.       "  :boxed_column{"
  48.       "  label="手动计算";"
  49.       "  :row {"
  50.       "     :edit_box{width=35;key ="5";allow_accept = true;}"
  51.       "            :button {"
  52.       "                is_default = true ;"
  53.       "                key = "6" ;"
  54.       "                label = "计算" ;"
  55.       "                width = 4 ;"
  56.       "            }"
  57.       "  }"
  58.       "  spacer_1;"
  59.       "  :row {"
  60.       "      :button{key="11";label="C↑";width=4;}"
  61.       "      :button{key="12";label="C↓";width=4;}"
  62.       "      :button{key="8";label="拾取";width=4;}"
  63.       "      :button{key="10";label="插算式";width=4;}"
  64.       "      :button{key="7";label="插结果";width=4;}"
  65.       "  }"
  66.       "  spacer_1;"
  67.       "  }"
  68.       "  :list_box {key="9";label="历史记录";width=40;height=10;}"
  69.       "  spacer_1;"
  70.       "  :row {"
  71.       "      :toggle{key="alttz";label="消去小数点后后续零";width=10;}"
  72.       "      :edit_box{edit_width=5;key="GL_precision";label="保留小数位数:";allow_accept=true;width=10;}"
  73.       "  }"
  74.       "  spacer_1;"
  75.       "      cancel_button;"
  76.       "}"
  77.      )
  78.     (princ x fn)
  79.     (write-line "" fn)
  80.   )
  81.   (close fn)
  82.   (setq fn (open fname "r"))
  83.   (setq dclid (load_dialog fname))
  84.   (while
  85.     (or
  86.       (eq
  87.         (substr
  88.           (setq lin (vl-string-right-trim
  89.                       "" fn)"
  90.                       (vl-string-left-trim "(write-line "" (read-line fn))
  91.                     )
  92.           )
  93.           1
  94.           2
  95.         )
  96.         "//"
  97.       )
  98.       (eq (substr lin 1 (vl-string-search " " lin)) "")
  99.       (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9) " : dialog"))
  100.     )
  101.   )
  102.   (new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)

  103.   (start_list "9")
  104.   (if (equal GL-lst (list ""))
  105.     (progn
  106.       (setq file (open GL-text "r")
  107.             txt  (read-line file)
  108.       )
  109.       (while (/= txt nil)
  110.         (setq GL-lst (append GL-lst (list txt)))
  111.         (setq txt (read-line file))
  112.       )
  113.       (close file)
  114.       (setq GL-lst (cdr GL-lst))
  115.       (setq GL-lst (reverse GL-lst))
  116.     )
  117.   )
  118.   (mapcar 'add_list GL-lst)
  119.   (end_list)
  120.   (set_tile "GL_precision" (itoa GL-precision))
  121.   (set_tile "5" GL-result)
  122.   (set_tile "alttz" alttz_v)
  123.   (mode_tile "5" 2)
  124.   (Vlax-Invoke-Method
  125.     (Vlax-Get-Or-Create-Object "WScript.Shell")
  126.     'Sendkeys
  127.     "{End}"
  128.   )
  129.   (action_tile "5" "(setq GL-result $Value)")
  130.   (action_tile "GL_precision" "(setq GL-precision (atoi $Value))")
  131.   (action_tile "alttz" "(setq alttz_v $Value)")
  132.   (action_tile "1" "(done_dialog 1)")
  133.   (action_tile "2" "(done_dialog 2)")
  134.   (action_tile "3" "(done_dialog 3)")
  135.   (action_tile "4" "(done_dialog 4)")
  136.   (action_tile "6" "(GL:key6)")
  137.   (action_tile "7" "(done_dialog 7)")
  138.   (action_tile "8" "(done_dialog 8)")
  139.   (action_tile "9" "(GL:update-edit $value $reason)")
  140.   (action_tile "10" "(done_dialog 10)")
  141.   (action_tile "11" "(GL:key11)")
  142.   (action_tile "12" "(GL:key12)")
  143.   (action_tile "cancel" "(done_dialog 0)")

  144.   (setq re (start_dialog))
  145.   (cond
  146.     ((= re 1) (GL:jiafa) (GL:update) (GL-xxjsq))
  147.     ((= re 2) (GL:jianfa) (GL:update) (GL-xxjsq))
  148.     ((= re 3) (GL:chengfa) (GL:update) (GL-xxjsq))
  149.     ((= re 4) (GL:chufa) (GL:update) (GL-xxjsq))
  150.     ((= re 7) (GL:crjswz GL-result))
  151.     ((= re 8) (GL:key8))
  152.     ((= re 10) (GL:crjswz (strcat GL-Num "=" GL-result)))
  153.   )
  154.   (unload_dialog dclid)
  155.   (close fn)
  156.   (vl-file-delete fname)
  157.   (princ)
  158. )

  159. (defun GL:jiafa () (GL:Galculate (GL:GetNumber "+")))
  160. (defun GL:jianfa () (GL:Galculate (GL:GetNumber "-")))
  161. (defun GL:chengfa () (GL:Galculate (GL:GetNumber "*")))
  162. (defun GL:chufa () (GL:Galculate (GL:GetNumber "/")))

  163. ;手动计算
  164. (defun GL:key6 ()
  165.   (setq GL-result (get_tile "5"))
  166.   (if (/= GL-result "")
  167.     (progn
  168.       (if (GL:Galculate GL-result)
  169.         (progn
  170.           (set_tile "5" GL-result)
  171.           (mode_tile "5" 2)
  172.           (Vlax-Invoke-Method
  173.             (Vlax-Get-Or-Create-Object "WScript.Shell")
  174.             'Sendkeys
  175.             "{End}"
  176.           )
  177.           (GL:update)
  178.         )
  179.       )
  180.     )
  181.   )
  182. )

  183. ;拾取
  184. (defun GL:key8 (/ num)
  185.   (if (setq num (GL:GetNumber "+"))
  186.     (progn
  187.       (if (/= GL-result "")
  188.         (setq GL-result (strcat GL-result "+" num))
  189.         (setq GL-result (strcat GL-result num))
  190.       )
  191.     )
  192.   )
  193.   (GL-xxjsq)
  194. )

  195. ;清空计算框
  196. (defun GL:key11 ()
  197.   (set_tile "5" "")
  198.   (mode_tile "5" 2)
  199.   (Vlax-Invoke-Method
  200.     (Vlax-Get-Or-Create-Object "WScript.Shell")
  201.     'Sendkeys
  202.     "{End}"
  203.   )
  204. )

  205. ;清空历史记录
  206. (defun GL:key12 ()
  207.   (if (GL-qrdhk)
  208.     (progn
  209.       (setq GL-lst (list ""))
  210.       (start_list "9")
  211.       (mapcar 'add_list GL-lst)
  212.       (end_list)
  213.       (setq file (open GL-text "w"))
  214.       (write-line "" file)
  215.       (close file)
  216.     )
  217.   )
  218.   (mode_tile "5" 2)
  219.   (Vlax-Invoke-Method
  220.     (Vlax-Get-Or-Create-Object "WScript.Shell")
  221.     'Sendkeys
  222.     "{End}"
  223.   )
  224. )

  225. ;提取数字和运算符
  226. (defun GL:GetNumber (ope / en num i regex ss text tn)
  227.   (setq regex (vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
  228.   (vlax-put-property regex "IgnoreCase" 0) ;不忽略大小写
  229.   (vlax-put-property regex "Global" 1) ;全文匹配,而不是只匹配第一处
  230.   (setq ss (ssget '((0 . "*TEXT,TCH_ELEVATION,DIMENSION")))) ;只拾取文字、天正标高
  231.   (if ss
  232.     (progn
  233.       (setq i   0
  234.             Num ""
  235.       )
  236.       (repeat (sslength ss)
  237.         (setq en (ssname ss i))
  238.         (setq GL-ed (entget en))
  239.         (if (= "DIMENSION" (cdr (assoc 0 GL-ed)))
  240.           (setq text (atof (rtos (cdr (assoc 42 GL-ed)) 2 3)))
  241.           (setq text (cdr (assoc 1 GL-ed)))
  242.         ) ; 补充标注文字提取
  243.         (vlax-put-property regex "Pattern" "[^0-9\\+\\-\\*\\/\\.\\(\\)]") ;匹配数字和运算符
  244.         (setq text (vlax-invoke-method regex "Replace" text ""))
  245.         (if (/= text "")
  246.           (progn
  247.             (if (= Num "")  ;表达式加括号
  248.               (if (wcmatch text "*`+*,*`-*,*`**,*`/*")
  249.                 (setq Num (strcat "(" text ")")
  250.                       TN  nil
  251.                 )
  252.                 (setq Num text
  253.                       TN  nil
  254.                 )
  255.               )
  256.               (setq TN T)
  257.             )
  258.             (if TN  ;表达式加括号
  259.               (if (wcmatch text "*`+*,*`-*,*`**,*`/*")
  260.                 (setq Num (strcat Num ope "(" text ")"))
  261.                 (setq Num (strcat Num ope text))
  262.               )
  263.             )
  264.             ;(if (= Num "")(setq Num text TN nil)(setq TN T));表达式不加括号
  265.             ;(if TN (setq Num (strcat Num ope text)));表达式不加括号
  266.           )
  267.         )
  268.         (setq i (1+ i))
  269.       )
  270.     )
  271.   )
  272.   Num
  273. )


  274. ; 1. 定义运算符优先级(数字越大优先级越高)
  275. (defun op-priority (op)
  276.   (cond
  277.     ((member op '(+ -)) 1)
  278.     ((member op '(* /)) 2)
  279.     (T 0)  ; 括号优先级最低
  280.   )
  281. )

  282. ; 2. 分词函数:将表达式拆分为数字、运算符、括号
  283. (defun tokenize (expr / len i char token tokens)
  284.   (setq len (strlen expr)
  285.         i 1
  286.         tokens '()
  287.   )
  288.   (while (<= i len)
  289.     (setq char (substr expr i 1))
  290.     (cond
  291.       ; 跳过空格
  292.       ((= char " ") (setq i (1+ i)))
  293.       ; 处理运算符和括号
  294.       ((member char '( "+" "-" "*" "/" "(" ")" ))
  295.        (setq tokens (append tokens (list char))
  296.              i (1+ i)
  297.        )
  298.       )
  299.       ; 处理数字(包括小数和负数)
  300.       ((or (vl-string-search char "0123456789.")
  301.            (and (= char "-")
  302.                 (or (= i 1)
  303.                     (member (last tokens) '( "+" "-" "*" "/" "(" ))
  304.                 )
  305.            )
  306.       )
  307.        (setq token char
  308.              i (1+ i)
  309.        )
  310.        ; 继续读取多位数或小数
  311.        (while (and (<= i len)
  312.                    (vl-string-search (substr expr i 1) "0123456789.")
  313.               )
  314.          (setq token (strcat token (substr expr i 1))
  315.                i (1+ i)
  316.          )
  317.        )
  318.        (setq tokens (append tokens (list (atof token))))  ; 转换为数值
  319.       )
  320.       (T (error (strcat "无效字符: " char)))  ; 报错无效字符
  321.     )
  322.   )
  323.   tokens
  324. )

  325. ; 3. 中缀转后缀表达式(逆波兰式)
  326. (defun infix-to-postfix (tokens / stack postfix token op)
  327.   (setq stack '()
  328.         postfix '()
  329.   )
  330.   (foreach token tokens
  331.     (cond
  332.       ; 数字直接加入后缀列表
  333.       ((numberp token)
  334.        (setq postfix (append postfix (list token)))
  335.       )
  336.       ; 左括号入栈
  337.       ((= token "(")
  338.        (setq stack (cons token stack))
  339.       )
  340.       ; 右括号:弹出栈中元素直到左括号
  341.       ((= token ")")
  342.        (while (not (= (car stack) "("))
  343.          (setq postfix (append postfix (list (car stack)))
  344.                stack (cdr stack)
  345.          )
  346.        )
  347.        (setq stack (cdr stack))  ; 弹出左括号(不加入后缀列表)
  348.       )
  349.       ; 运算符:按优先级处理
  350.       (T
  351.        (while (and stack (/= (car stack) "(")
  352.                    (>= (op-priority (car stack)) (op-priority token))
  353.               )
  354.          (setq postfix (append postfix (list (car stack)))
  355.                stack (cdr stack)
  356.          )
  357.        )
  358.        (setq stack (cons token stack))
  359.       )
  360.     )
  361.   )
  362.   ; 弹出栈中剩余运算符
  363.   (while stack
  364.     (setq postfix (append postfix (list (car stack)))
  365.           stack (cdr stack)
  366.     )
  367.   )
  368.   postfix
  369. )

  370. ; 4. 后缀表达式转前缀表达式(LISP格式)
  371. (defun postfix-to-prefix (postfix / stack op a b)
  372.   (foreach token postfix
  373.     (if (numberp token)
  374.       (setq stack (cons token stack))  ; 数字入栈
  375.       (progn  ; 运算符:弹出两个操作数组合为前缀表达式
  376.         (setq b (car stack)
  377.               stack (cdr stack)
  378.               a (car stack)
  379.               stack (cdr stack)
  380.               stack (cons (list (read token) a b) stack)  ; 构建前缀表达式(如 (* 2 3))
  381.         )
  382.       )
  383.     )
  384.   )
  385.   (car stack)  ; 栈顶即为最终前缀表达式
  386. )

  387. ; 5. 主函数:计算包含+-*/的表达式
  388. (defun calc-expr (expr / tokens postfix prefix result)
  389.   (setq tokens (tokenize expr)          ; 分词
  390.         postfix (infix-to-postfix tokens)  ; 中缀转后缀
  391.         prefix (postfix-to-prefix postfix)  ; 后缀转前缀
  392.         result (eval prefix)  ; 计算结果
  393.   )
  394.   result
  395. )




  396. ;计算
  397. (defun GL:Galculate (Num / odimzin)
  398.   (if Num
  399.     (progn
  400.       (if (setq GL-result (calc-expr Num))  ;*1.0将整数转换为小数,整数只能介于-32768和32767之间
  401.         (progn
  402.           (setq odimzin (getvar "dimzin"))
  403.           (if (= alttz_v "0")
  404.             (setvar "dimzin" 0)
  405.             ;;else
  406.             (setvar "dimzin" 8)
  407.           )
  408.           (setq GL-result (rtos GL-result 2 GL-precision))
  409.           (setvar "dimzin" odimzin)
  410.           (set-clip-string GL-result) ;向系统剪贴板写入文字
  411.           (setq GL-Num Num)
  412.           (princ (strcat "\n表达式:" Num "=" GL-result "  >>>>计算结果:" GL-result))
  413.           (princ)
  414.         )
  415.         (alert (strcat Num "   表达式语法错误!"))
  416.       )
  417.     )
  418.   )
  419. )

  420. ;向系统剪贴板写入文字
  421. (defun set-clip-string (STR / HTML RESULT)
  422.   (and
  423.     (= (type STR) 'STR)
  424.     (setq HTML (vlax-create-object "htmlfile"))
  425.     (setq RESULT (vlax-invoke
  426.                    (vlax-get
  427.                      (vlax-get HTML 'PARENTWINDOW)
  428.                      'CLIPBOARDDATA
  429.                    )
  430.                    'SETDATA
  431.                    "Text"
  432.                    STR
  433.                  )
  434.     )
  435.     (vlax-release-object HTML)
  436.   )
  437. )

  438. ;插入计算文字
  439. (defun GL:crjswz (GL-result / h la pt sc st ty tzbl)
  440.   (if (/= GL-result "")
  441.     (if (setq pt (getpoint "\n请点取插入点:"))
  442.       (if GL-ed
  443.         (progn
  444.           (setq ty (cdr (assoc 0 GL-ed)) ;字体类型
  445.                 st (if (= "DIMENSION" (cdr (assoc 0 GL-ed)))
  446.                      (getvar "TEXTSTYLE")
  447.                      (cdr (assoc 7 GL-ed))
  448.                    ) ;字体样式
  449.                 la (cdr (assoc 8 GL-ed)) ;图层
  450.                 h  (if (= "DIMENSION" (cdr (assoc 0 GL-ed)))
  451.                      (*
  452.                        (cdr
  453.                          (assoc
  454.                            40
  455.                            (tblsearch
  456.                              "DIMSTYLE"
  457.                              (cdr (assoc 3 (entget (cdr (assoc -1 GL-ed)))))
  458.                            )
  459.                          )
  460.                        )
  461.                        (cdr
  462.                          (assoc
  463.                            140
  464.                            (tblsearch
  465.                              "DIMSTYLE"
  466.                              (cdr (assoc 3 (entget (cdr (assoc -1 GL-ed)))))
  467.                            )
  468.                          )
  469.                        )
  470.                      )
  471.                      (cdr (assoc 40 GL-ed))
  472.                    ) ;文字高度
  473.                 sc (cdr (assoc 47 GL-ed)) ;天正比例
  474.                  ;ar (cdr (assoc 41 GL-ed));文字宽高比
  475.                  ;co (cdr (assoc 62 GL-ed));颜色
  476.           )
  477.           (if (wcmatch ty "TCH_*")
  478.             (entmake
  479.               (list
  480.                 '(0 . "TEXT")
  481.                 (cons 1 GL-result)
  482.                 (cons 7 st)
  483.                 (cons 8 la)
  484.                 (cons 10 pt)
  485.                 (cons 40 (* h sc))
  486.                 (cons 41 0.8)
  487.               )
  488.             )
  489.             (entmake
  490.               (list
  491.                 '(0 . "TEXT")
  492.                 (cons 1 GL-result)
  493.                 (cons 7 st)
  494.                 (cons 8 la)
  495.                 (cons 10 pt)
  496.                 (cons 40 h)
  497.                 (cons 41 0.8)
  498.               )
  499.             )
  500.           )
  501.         )
  502.         (progn
  503.           ;(setq h (getvar 'textsize)) ;当前样式文字高度
  504.           (setq tzbl (getvar "HPSCALE") ;天正比例
  505.                 h    (* tzbl 3)
  506.           )
  507.           (entmake
  508.             (list
  509.               '(0 . "TEXT")
  510.               (cons 1 GL-result)
  511.               (cons 10 pt)
  512.               (cons 40 h)
  513.             )
  514.           )
  515.         )
  516.       )
  517.     )
  518.   )
  519. )

  520. ;更新历史记录数据,并保存
  521. (defun GL:update (/ file ex)
  522.   (if GL-result
  523.     (progn
  524.       (setq ex (strcat GL-Num "=" GL-result))
  525.       (setq GL-lst (append (list ex) GL-lst))
  526.       (start_list "9")
  527.       (mapcar 'add_list GL-lst)
  528.       (end_list)
  529.       (setq file (open GL-text "a"))
  530.       (write-line ex file)
  531.       (close file)
  532.     )
  533.   )
  534. )

  535. ;将历史记录上到计算框
  536. (defun GL:update-edit (value reason / a b ex i len)
  537.   (if (= reason 4)
  538.     (progn
  539.       (setq ex  (nth (atoi value) GL-lst)
  540.             len (strlen ex)
  541.             i   1
  542.             b   ""
  543.       )
  544.       (while (<= i len)
  545.         (setq a (substr ex i 1))
  546.         (if (= a "=")
  547.           (setq i (1+ len))
  548.           (setq b (strcat b a))
  549.         )
  550.         (setq i (1+ i))
  551.       )
  552.       (set_tile "5" b)
  553.       (mode_tile "5" 2)
  554.       (Vlax-Invoke-Method
  555.         (Vlax-Get-Or-Create-Object "WScript.Shell")
  556.         'Sendkeys
  557.         "{End}"
  558.       )
  559.     )
  560.   )
  561. )

  562. (defun GL-qrdhk (/ fname fn x dclid lin re YorN)
  563.   (setq fname (vl-filename-mktemp nil nil ".dcl"))
  564.   (setq fn (open fname "w"))
  565.   (foreach x
  566.     '("  qrdhk : dialog{" "  spacer_1;" "      :text{key="2";label="是否清除历史记录";}"
  567.       "  spacer_1;" "  :row {" "      :button{key="1";label="是";width=8;}"
  568.       "  spacer_1;" "      cancel_button;" "  }" "  spacer_1;" "}"
  569.      )
  570.     (princ x fn)
  571.     (write-line "" fn)
  572.   )
  573.   (close fn)
  574.   (setq fn (open fname "r"))
  575.   (setq dclid (load_dialog fname))
  576.   (while
  577.     (or
  578.       (eq
  579.         (substr
  580.           (setq lin (vl-string-right-trim
  581.                       "" fn)"
  582.                       (vl-string-left-trim "(write-line "" (read-line fn))
  583.                     )
  584.           )
  585.           1
  586.           2
  587.         )
  588.         "//"
  589.       )
  590.       (eq (substr lin 1 (vl-string-search " " lin)) "")
  591.       (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9) " : dialog"))
  592.     )
  593.   )
  594.   (new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
  595.   (action_tile "1" "(done_dialog 1)")
  596.   (action_tile "cancel" "(done_dialog 0)")
  597.   (setq re (start_dialog))
  598.   (cond
  599.     ((= re 1) (setq YorN T))
  600.   )
  601.   (unload_dialog dclid)
  602.   (close fn)
  603.   (vl-file-delete fname)
  604.   YorN
  605. )
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 04:31 , Processed in 0.161014 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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