明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 760|回复: 14

[讨论] 净间距阵列修复

[复制链接]
发表于 2025-11-16 09:35:31 | 显示全部楼层 |阅读模式
30明经币
本帖最后由 hbxymx 于 2025-11-16 10:43 编辑

我用AI写了一个净间距阵列的程序,主要应用于雕刻加工排版。发现X方向阵列间距会出错,同时2个方向阵列没有问题。帮忙修复一下,


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

最佳答案

查看完整内容

经修改测试,单行或单列均正常,多行多列也正常
回复

使用道具 举报

发表于 2025-11-16 09:35:32 | 显示全部楼层
经修改测试,单行或单列均正常,多行多列也正常









本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2025-11-16 10:14:58 | 显示全部楼层
测试了,没毛病啊
回复

使用道具 举报

 楼主| 发表于 2025-11-16 10:46:04 | 显示全部楼层
rouka23 发表于 2025-11-16 10:14
测试了,没毛病啊

一般方形没有问题,带拐角的L形,T形的就会出现问题,我上传了测试图形,你测试一下就会发现问题。
回复

使用道具 举报

发表于 2025-11-16 10:55:59 | 显示全部楼层
本帖最后由 rouka23 于 2025-11-16 11:05 编辑
hbxymx 发表于 2025-11-16 10:46
一般方形没有问题,带拐角的L形,T形的就会出现问题,我上传了测试图形,你测试一下就会发现问题。


本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2025-11-16 11:37:46 | 显示全部楼层

双向阵列是没有问题的,单方向x方向会出错,
回复

使用道具 举报

发表于 2025-11-16 13:11:26 | 显示全部楼层
  1. ;;; 带记忆功能的矩形净间距阵列LISP - 使用ActiveX方法
  2. (defun c:AW (/ dcl_content dcl_file dcl_id rows cols row_net col_net ss result bbox
  3.               obj_width obj_height row_dist col_dist pt1 pt2 f rows_val cols_val
  4.               row_net_val col_net_val base_pt)
  5.     (vl-load-com)
  6.    
  7.     ;; 从注册表读取记忆值
  8.     (setq rows (get_reg "RectArrayNet" "Rows" "4"))
  9.     (setq cols (get_reg "RectArrayNet" "Cols" "4"))
  10.     (setq row_net (get_reg "RectArrayNet" "RowNet" "50"))
  11.     (setq col_net (get_reg "RectArrayNet" "ColNet" "50"))
  12.    
  13.     ;;; 定义DCL文件内容
  14.     (setq dcl_content (strcat
  15.         "rect_array_net : dialog {\n"
  16.         "    label = "矩形净间距阵列";\n"
  17.         "    spacer;\n"
  18.         "    : text { label = "阵列参数:"; }\n"
  19.         "    : row {\n"
  20.         "        : column {\n"
  21.         "            : edit_box {\n"
  22.         "                key = "rows";\n"
  23.         "                label = "Y行数:";\n"
  24.         "                value = "" rows "";\n"
  25.         "                edit_width = 8;\n"
  26.         "            }\n"
  27.         "            : edit_box {\n"
  28.         "                key = "cols";\n"
  29.         "                label = "X列数:";\n"
  30.         "                value = "" cols "";\n"
  31.         "                edit_width = 8;\n"
  32.         "            }\n"
  33.         "        }\n"
  34.         "        : column {\n"
  35.         "            : edit_box {\n"
  36.         "                key = "row_net";\n"
  37.         "                label = "Y行间距:";\n"
  38.         "                value = "" row_net "";\n"
  39.         "                edit_width = 8;\n"
  40.         "            }\n"
  41.         "            : edit_box {\n"
  42.         "                key = "col_net";\n"
  43.         "                label = "X列间距:";\n"
  44.         "                value = "" col_net "";\n"
  45.         "                edit_width = 8;\n"
  46.         "            }\n"
  47.         "        }\n"
  48.         "    }\n"
  49.         "    spacer;\n"
  50.         "    : text { label = "说明: 净间距 = 对象之间的净空距离"; }\n"
  51.         "    : text { label = "阵列间距 = 对象尺寸 + 净间距"; }\n"
  52.         "    spacer;\n"
  53.         "    : row {\n"
  54.         "        : button {\n"
  55.         "            key = "accept";\n"
  56.         "            label = "确定";\n"
  57.         "            is_default = true;\n"
  58.         "        }\n"
  59.         "        : button {\n"
  60.         "            key = "cancel";\n"
  61.         "            label = "取消";\n"
  62.         "            is_cancel = true;\n"
  63.         "        }\n"
  64.         "    }\n"
  65.         "}\n"
  66.     ))
  67.    
  68.     ;; 创建临时DCL文件
  69.     (setq dcl_file (vl-filename-mktemp "rect_array_net.dcl"))
  70.     (setq f (open dcl_file "w"))
  71.     (write-line dcl_content f)
  72.     (close f)
  73.    
  74.     ;; 加载DCL文件
  75.     (setq dcl_id (load_dialog dcl_file))
  76.    
  77.     (if (not (new_dialog "rect_array_net" dcl_id))
  78.         (progn
  79.             (alert "无法加载对话框!")
  80.             (unload_dialog dcl_id)
  81.             (vl-file-delete dcl_file)
  82.             (exit)
  83.         )
  84.     )
  85.    
  86.     ;; 动作处理
  87.     (action_tile "accept"
  88.         "(progn
  89.             (setq rows (get_tile "rows"))
  90.             (setq cols (get_tile "cols"))
  91.             (setq row_net (get_tile "row_net"))
  92.             (setq col_net (get_tile "col_net"))
  93.             (done_dialog 1)
  94.         )"
  95.     )
  96.    
  97.     (action_tile "cancel" "(done_dialog 0)")
  98.    
  99.     ;; 显示对话框并处理结果
  100.     (setq result (start_dialog))
  101.     (unload_dialog dcl_id)
  102.     (vl-file-delete dcl_file)
  103.    
  104.     (if (= result 1)
  105.         (progn
  106.             ;; 保存到注册表
  107.             (put_reg "RectArrayNet" "Rows" rows)
  108.             (put_reg "RectArrayNet" "Cols" cols)
  109.             (put_reg "RectArrayNet" "RowNet" row_net)
  110.             (put_reg "RectArrayNet" "ColNet" col_net)
  111.             
  112.             ;; 转换为数值
  113.             (setq rows_val (atoi rows))
  114.             (setq cols_val (atoi cols))
  115.             (setq row_net_val (atof row_net))
  116.             (setq col_net_val (atof col_net))
  117.             
  118.             ;; 选择对象
  119.             (if (setq ss (ssget))
  120.                 (progn
  121.                     ;; 获取选择集边界框
  122.                     (setq bbox (get_ss_bbox_safe ss))
  123.                     (if bbox
  124.                         (progn
  125.                             ;; 计算对象尺寸
  126.                             (setq pt1 (car bbox))
  127.                             (setq pt2 (cadr bbox))
  128.                             (setq obj_width (- (car pt2) (car pt1)))
  129.                             (setq obj_height (- (cadr pt2) (cadr pt1)))
  130.                            
  131.                             ;; 计算阵列间距(对象尺寸 + 净间距)
  132.                             (setq col_dist (+ obj_width col_net_val))
  133.                             (setq row_dist (+ obj_height row_net_val))
  134.                            
  135.                             ;; 获取基点(左下角)
  136.                             (setq base_pt pt1)
  137.                            
  138.                             ;; 验证参数
  139.                             (if (and (> rows_val 0) (> cols_val 0)
  140.                                      (> row_dist 0) (> col_dist 0))
  141.                                 (progn
  142.                                     ;; 使用ActiveX方法创建阵列
  143.                                     (if (create_array_activex ss rows_val cols_val row_dist col_dist base_pt)
  144.                                         (progn
  145.                                             (princ (strcat "\n成功创建了 " rows " 行 " cols " 列的矩形净间距阵列"))
  146.                                             (princ (strcat "\n对象尺寸: " (rtos obj_width 2 2) " x " (rtos obj_height 2 2)))
  147.                                             (princ (strcat "\n净间距: " row_net " x " col_net))
  148.                                             (princ (strcat "\n阵列间距: " (rtos col_dist 2 2) " x " (rtos row_dist 2 2)))
  149.                                         )
  150.                                         (princ "\n阵列创建失败")
  151.                                     )
  152.                                 )
  153.                                 (princ "\n错误: 行数、列数和间距必须大于0")
  154.                             )
  155.                         )
  156.                         (princ "\n无法计算对象尺寸")
  157.                     )
  158.                 )
  159.                 (princ "\n未选择对象")
  160.             )
  161.         )
  162.     )
  163.     (princ)
  164. )

  165. ;;; 使用ActiveX方法创建阵列
  166. (defun create_array_activex (ss rows cols row_dist col_dist base_pt /
  167.                              acad_app acad_doc model_space i ent vla_obj
  168.                              obj_list)
  169.     (vl-load-com)
  170.    
  171.     (setq acad_app (vlax-get-acad-object))
  172.     (setq acad_doc (vla-get-activedocument acad_app))
  173.     (setq model_space (vla-get-modelspace acad_doc))
  174.    
  175.     ;; 将选择集中的对象转换为VLA对象列表
  176.     (setq obj_list '())
  177.     (setq i 0)
  178.     (repeat (sslength ss)
  179.         (setq ent (ssname ss i))
  180.         (setq vla_obj (vlax-ename->vla-object ent))
  181.         (setq obj_list (cons vla_obj obj_list))
  182.         (setq i (1+ i))
  183.     )
  184.    
  185.     ;; 为每个对象创建阵列
  186.     (foreach obj obj_list
  187.         (if (not (vl-catch-all-error-p
  188.                  (vl-catch-all-apply 'vla-ArrayRectangular
  189.                     (list obj rows cols 1 row_dist col_dist 0))))
  190.             (princ (strcat "\n成功阵列对象: " (vlax-get obj 'ObjectName)))
  191.             (princ "\n阵列对象时出错")
  192.         )
  193.     )
  194.    
  195.     T
  196. )

  197. ;;; 使用复制方法手动创建阵列
  198. (defun create_array_manual (ss rows cols row_dist col_dist base_pt /
  199.                            i j copy_pt)
  200.     ;; 创建副本
  201.     (setq i 0)
  202.     (while (< i rows)
  203.         (setq j 0)
  204.         (while (< j cols)
  205.             (if (not (and (= i 0) (= j 0))) ; 跳过第一个(原始对象)
  206.                 (progn
  207.                     (setq copy_pt (list
  208.                         (+ (car base_pt) (* j col_dist))
  209.                         (+ (cadr base_pt) (* i row_dist))
  210.                         (caddr base_pt)
  211.                     ))
  212.                     ;; 使用entmake复制对象
  213.                     (copy_entities ss base_pt copy_pt)
  214.                 )
  215.             )
  216.             (setq j (1+ j))
  217.         )
  218.         (setq i (1+ i))
  219.     )
  220.     T
  221. )

  222. ;;; 使用entmake复制实体
  223. (defun copy_entities (ss base_pt target_pt / i ent ent_data dx dy new_ent)
  224.     (setq dx (- (car target_pt) (car base_pt)))
  225.     (setq dy (- (cadr target_pt) (cadr base_pt)))
  226.    
  227.     (setq i 0)
  228.     (repeat (sslength ss)
  229.         (setq ent (ssname ss i))
  230.         (setq ent_data (entget ent))
  231.         
  232.         ;; 复制实体并平移
  233.         (setq new_ent (copy_entity ent_data dx dy))
  234.         
  235.         (setq i (1+ i))
  236.     )
  237. )

  238. ;;; 复制单个实体并平移
  239. (defun copy_entity (ent_data dx dy / new_data item)
  240.     (setq new_data '())
  241.    
  242.     (foreach item ent_data
  243.         (cond
  244.             ;; 处理插入点
  245.             ((= (car item) 10)
  246.              (setq new_data (cons
  247.                  (list 10
  248.                        (+ (cadr item) dx)
  249.                        (+ (caddr item) dy)
  250.                        (cadddr item))
  251.                  new_data))
  252.             )
  253.             ;; 处理其他点(如直线的端点)
  254.             ((= (car item) 11)
  255.              (setq new_data (cons
  256.                  (list 11
  257.                        (+ (cadr item) dx)
  258.                        (+ (caddr item) dy)
  259.                        (cadddr item))
  260.                  new_data))
  261.             )
  262.             ;; 保持其他数据不变
  263.             (T
  264.              (setq new_data (cons item new_data))
  265.             )
  266.         )
  267.     )
  268.    
  269.     ;; 反转列表以恢复原始顺序并创建新实体
  270.     (setq new_data (reverse new_data))
  271.     (entmake new_data)
  272. )

  273. ;;; 安全获取选择集边界框
  274. (defun get_ss_bbox_safe (ss / i ent minx miny maxx maxy coords pt)
  275.     (if (and ss (> (sslength ss) 0))
  276.         (progn
  277.             (setq i 0)
  278.             (setq minx 1e308 miny 1e308 maxx -1e308 maxy -1e308)
  279.             
  280.             (repeat (sslength ss)
  281.                 (setq ent (ssname ss i))
  282.                 (setq coords (get_entity_points ent))
  283.                
  284.                 ;; 处理所有坐标点
  285.                 (foreach pt coords
  286.                     (if (and (numberp (car pt)) (numberp (cadr pt)))
  287.                         (progn
  288.                             (setq minx (min minx (car pt))
  289.                                   miny (min miny (cadr pt))
  290.                                   maxx (max maxx (car pt))
  291.                                   maxy (max maxy (cadr pt)))
  292.                         )
  293.                     )
  294.                 )
  295.                 (setq i (1+ i))
  296.             )
  297.             
  298.             ;; 检查是否找到有效边界
  299.             (if (and (< minx maxx) (< miny maxy))
  300.                 (list (list minx miny) (list maxx maxy))
  301.                 nil
  302.             )
  303.         )
  304.     )
  305. )

  306. ;;; 获取实体的所有点坐标
  307. (defun get_entity_points (ent / ent_data obj_type points center radius ins_pt)
  308.     (setq ent_data (entget ent))
  309.     (setq obj_type (cdr (assoc 0 ent_data)))
  310.     (setq points '())
  311.    
  312.     (cond
  313.         ;; 直线
  314.         ((= obj_type "LINE")
  315.          (setq points (list
  316.              (cdr (assoc 10 ent_data))
  317.              (cdr (assoc 11 ent_data))
  318.          ))
  319.         )
  320.         
  321.         ;; 圆
  322.         ((= obj_type "CIRCLE")
  323.          (setq center (cdr (assoc 10 ent_data)))
  324.          (setq radius (cdr (assoc 40 ent_data)))
  325.          (setq points (list
  326.              (list (- (car center) radius) (- (cadr center) radius))
  327.              (list (+ (car center) radius) (+ (cadr center) radius))
  328.          ))
  329.         )
  330.         
  331.         ;; 多段线、轻量多段线
  332.         ((or (= obj_type "LWPOLYLINE") (= obj_type "POLYLINE"))
  333.          (foreach item ent_data
  334.              (if (= (car item) 10)
  335.                  (setq points (cons (cdr item) points))
  336.              )
  337.          )
  338.         )
  339.         
  340.         ;; 块参照
  341.         ((= obj_type "INSERT")
  342.          (setq ins_pt (cdr (assoc 10 ent_data)))
  343.          ;; 对于块参照,我们只使用插入点作为参考
  344.          (setq points (list ins_pt))
  345.         )
  346.         
  347.         ;; 文字、多行文字
  348.         ((or (= obj_type "TEXT") (= obj_type "MTEXT"))
  349.          (setq ins_pt (cdr (assoc 10 ent_data)))
  350.          (setq points (list ins_pt))
  351.         )
  352.         
  353.         ;; 默认情况:尝试获取所有10组码的点
  354.         (T
  355.          (foreach item ent_data
  356.              (if (= (car item) 10)
  357.                  (setq points (cons (cdr item) points))
  358.              )
  359.          )
  360.          ;; 如果没有找到点,使用原点
  361.          (if (null points)
  362.              (setq points '((0 0)))
  363.          )
  364.         )
  365.     )
  366.    
  367.     points
  368. )

  369. ;;; 注册表读写函数
  370. (defun get_reg (app key default / value)
  371.     (setq value (vl-registry-read (strcat "HKEY_CURRENT_USER\\Software\\AutoCAD\" app) key))
  372.     (if value value default)
  373. )

  374. (defun put_reg (app key value)
  375.     (vl-registry-write (strcat "HKEY_CURRENT_USER\\Software\\AutoCAD\" app) key value)
  376. )

  377. ;;; 加载提示
  378. (princ "\n矩形净间距阵列命令: AW")
  379. (princ)


本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
hbxymx + 1 谢谢你,费心了。

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2025-11-16 14:03:45 | 显示全部楼层

错误: 输入的字符串有缺陷,命令: AW ; 错误: no function definition: GET_REG,
回复

使用道具 举报

发表于 2025-11-16 14:10:09 | 显示全部楼层
hbxymx 发表于 2025-11-16 14:03
错误: 输入的字符串有缺陷,命令: AW ; 错误: no function definition: GET_REG,

我这边没问题,你要不AI优化一下,我不为币,帮忙而已
回复

使用道具 举报

发表于 2025-11-16 17:16:15 | 显示全部楼层
  1. :试试我这个,只支持块
  2. (defun c:BH29 (/ blk blkObj blkWidth blkHeight pt1
  3.                cols rows hSpacing vSpacing i j dcl_id result
  4.                *SPB-settings* oldOsnap)
  5.   (vl-load-com)
  6.   (jiany0001)  
  7.   ;; 错误处理函数
  8.   (defun *error* (msg)
  9.     (if dcl_id (unload_dialog dcl_id))
  10.     (if oldOsnap (setvar "OSMODE" oldOsnap)) ; 恢复捕捉设置
  11.     (command "_.undo" "_end")
  12.     (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  13.       (princ (strcat "\n错误: " msg))
  14.     )
  15.     (princ)
  16.   )
  17.   
  18.   ;; 保存当前捕捉设置并关闭捕捉
  19.   (setq oldOsnap (getvar "OSMODE"))
  20.   (setvar "OSMODE" 0) ; 关闭所有对象捕捉
  21.   
  22.   ;; 读取上次的设置
  23.   (setq *SPB-settings* (getenv "SPB_SETTINGS"))
  24.   (if *SPB-settings*
  25.     (setq *SPB-settings* (read *SPB-settings*))
  26.     (setq *SPB-settings* '(3 3 0 0)) ; 默认值:列数 行数 水平间距 垂直间距
  27.   )
  28.   
  29.   ;; 创建对话框
  30.   (setq dcl_id (load_dialog (strcat (getvar "TEMPPREFIX") "array_dialog.dcl")))
  31.   (if (not (new_dialog "array_dialog" dcl_id))
  32.     (progn
  33.       (alert "无法加载对话框!")
  34.       (exit)
  35.     )
  36.   )
  37.   
  38.   ;; 初始化对话框值(使用上次的设置或默认值)
  39.   (set_tile "cols" (itoa (nth 0 *SPB-settings*)))
  40.   (set_tile "rows" (itoa (nth 1 *SPB-settings*)))
  41.   (set_tile "h_spacing" (rtos (nth 2 *SPB-settings*) 2 2))
  42.   (set_tile "v_spacing" (rtos (nth 3 *SPB-settings*) 2 2))
  43.   
  44.   ;; 对话框动作
  45.   (action_tile "accept"
  46.     "(setq cols (atoi (get_tile "cols"))
  47.            rows (atoi (get_tile "rows"))
  48.            hSpacing (atof (get_tile "h_spacing"))
  49.            vSpacing (atof (get_tile "v_spacing")))
  50.      (setenv "SPB_SETTINGS" (strcat "(" (itoa cols) " " (itoa rows) " "
  51.                                       (rtos hSpacing 2 2) " " (rtos vSpacing 2 2) ")"))
  52.      (done_dialog 1)")
  53.   (action_tile "cancel" "(done_dialog 0)")
  54.   
  55.   ;; 显示对话框并获取用户输入
  56.   (setq result (start_dialog))
  57.   (unload_dialog dcl_id)
  58.   
  59.   (if (= result 0)
  60.     (progn
  61.       (setvar "OSMODE" oldOsnap) ; 恢复捕捉设置
  62.       (exit)
  63.     )
  64.   )
  65.   
  66.   ;; 选择块并获取尺寸和基点
  67.   (while (not blk)
  68.     (setq blk (car (entsel "\n选择要阵列的块: ")))
  69.     (if (not blk) (alert "请选择有效的块参照!"))
  70.   )
  71.   (setq blkObj (vlax-ename->vla-object blk))
  72.   (vla-getBoundingBox blkObj 'minPt 'maxPt)
  73.   (setq blkWidth (- (car (vlax-safearray->list maxPt)) (car (vlax-safearray->list minPt)))
  74.         blkHeight (- (cadr (vlax-safearray->list maxPt)) (cadr (vlax-safearray->list minPt)))
  75.         pt1 (cdr (assoc 10 (entget blk)))) ; 获取块的插入点作为基点
  76.   
  77.   ;; 计算实际间距(块尺寸+用户指定的间距)
  78.   (setq hSpacing (+ blkWidth hSpacing)
  79.         vSpacing (+ blkHeight vSpacing))
  80.   
  81.   ;; 创建阵列
  82.   (command "_.undo" "_begin")
  83.   (setq i 0)
  84.   (repeat cols
  85.     (setq j 0)
  86.     (repeat rows
  87.       (if (or (> i 0) (> j 0))
  88.         (command "_.copy" blk "" pt1
  89.                  (list (+ (car pt1) (* i hSpacing))
  90.                        (+ (cadr pt1) (* j vSpacing))
  91.                        (caddr pt1)))
  92.       )
  93.       (setq j (1+ j))
  94.     )
  95.     (setq i (1+ i))
  96.   )
  97.   (command "_.undo" "_end")
  98. ;; 恢复捕捉设置
  99.   (setvar "OSMODE" oldOsnap)
  100.   
  101.   (princ)
  102. )

  103. ;; 创建临时DCL文件(间距放在右侧)
  104. (defun create_array_dialog_dcl (/ dcl_file)
  105.   (setq dcl_file (open (strcat (getvar "TEMPPREFIX") "array_dialog.dcl") "w"))
  106.   (write-line "array_dialog : dialog {" dcl_file)
  107.   (write-line "  label = "阵列参数设置";" dcl_file)
  108.   (write-line "  : row {" dcl_file)
  109.   (write-line "    : column {" dcl_file)
  110.   (write-line "      : row {" dcl_file)
  111.   (write-line "        : text { label = "列数:"; width = 10; }" dcl_file)
  112.   (write-line "        : edit_box { key = "cols"; width = 10; }" dcl_file)
  113.   (write-line "      }" dcl_file)
  114.   (write-line "      : row {" dcl_file)
  115.   (write-line "        : text { label = "行数:"; width = 10; }" dcl_file)
  116.   (write-line "        : edit_box { key = "rows"; width = 10; }" dcl_file)
  117.   (write-line "      }" dcl_file)
  118.   (write-line "    }" dcl_file)
  119.   (write-line "    : column {" dcl_file)
  120.   (write-line "      : row {" dcl_file)
  121.   (write-line "        : text { label = "列间距:"; width = 10; }" dcl_file)
  122.   (write-line "        : edit_box { key = "h_spacing"; width = 10; }" dcl_file)
  123.   (write-line "      }" dcl_file)
  124.   (write-line "      : row {" dcl_file)
  125.   (write-line "        : text { label = "行间距:"; width = 10; }" dcl_file)
  126.   (write-line "        : edit_box { key = "v_spacing"; width = 10; }" dcl_file)
  127.   (write-line "      }" dcl_file)
  128.   (write-line "    }" dcl_file)
  129.   (write-line "  }" dcl_file)
  130.   (write-line "  ok_cancel;" dcl_file)
  131.   (write-line "}" dcl_file)
  132.   (close dcl_file)
  133. )

  134. ;; 在程序开始时创建DCL文件
  135. (create_array_dialog_dcl)

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 06:34 , Processed in 0.201826 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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