明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 17533|回复: 47

[源码] 继续无聊,源码 dbx不打开目录文件替换字符(支持多重块)

    [复制链接]
发表于 2011-5-10 23:26 | 显示全部楼层 |阅读模式
注:本程序包含多个有用函数,及相关知识说明
部分参考了 lzh741206 的程序,在此感谢

  1. ;| mcht = dbx不打开目录文件替换字符(支持多重块).-----by lxx.2007.4 测试ok!
  2. v1.0 支持选目录和手选多图;支持块中块内文字;
  3. v1.1 支持多项文字替换.
  4. v1.4 支持本图替换操作.自动regen.
  5. v1.3 优化本图替换速度
  6. v1.4 支持块属性.
  7. v1.5 支持旧字符含通配特殊字符,进行转义(加`). 支持修改锁定图层内实体.
  8. |;
  9. ;;(defun c:mcht (/ FNAME I VCOL func FNAME FNS FPATH NSTR OSTR PATHFILE PATHKEY FNAME FPATH NSTRS OSTRS)
  10. ;;(defun xo-infdo (fname vcol func / doc CNAME RET VERKEY DOC E ENT I REGKEY SS SSBLK ATTS BLKS CDOC CNAMES DOCS)

  11. ;;(setq path (vl-filename-directory  (getfiled "选择目录:" "按保存确认所选目录" " " 5)))
  12. ;;(setq x (car files))
  13. (defun c:mcht (/  CNAME FIL FNAME FPATH VCOL FF
  14.       I FNS NSTR OSTR PATHFILE PATHKEY
  15.       NSTRS OSTRS) ;*dir = 多选文件初始目录.
  16.   (princ "\n mcht = dbx不打开目录文件替换字符(支持多重块)v1.5-----by lxx.2007.4")
  17.   (initget "1 2 3  ")
  18.   (setq pathkey (getkword "\n 1-选目录/2-多选文件/3-本图操作<3>:"))
  19.   (if (not pathkey)(setq pathkey "3"))
  20.   (setq vcol '(modelspace paperspace blocks)
  21. cname (strcat(getvar "DWGPREFIX")(getvar "DWGNAME"))
  22.     )
  23.   (cond
  24.     ((= pathkey "3")
  25.      (setq fns (list cname)))
  26.     ((= pathkey "2")
  27.      (if *dir (setq fns (xo-getfiles *dir))
  28.        (setq fns (xo-getfiles "c:\")))
  29.      (if fns (setq *dir(vl-filename-directory(car fns))))
  30.      )
  31.     (T
  32.      (setq fpath (qf_getFolder "选择要处理的文件所在目录") ;qf_getFolder 秋风的取目录函数.
  33.      )
  34.      (if fpath
  35.        (setq fpath    (strcat fpath "\")
  36.       pathfile (vl-directory-files fpath "*.dwg")
  37.       fns      (mapcar '(lambda (x) (strcat fpath x)) pathfile)
  38.        )
  39.      )
  40.     )
  41.   )
  42.   ;(c:xgetfiles)
  43.   ;|(defun xx (ob)(if (vlax-property-available-p ob 'textstring)
  44.     (vla-put-textstring ob (x$sub  "梁雄啸" "lxx" (vla-get-textstring ob)))
  45.     ))|;
  46.   ;;两种方式均支持. 函数 or lambda
  47.   (while (/= "" (setq ostr (getstring "\n 旧字符/<下一步>:")))
  48.     (setq nstr (getstring "\n 新字符<"">:") ;>> 待增强,可点取图上文字,sendkey到输入栏,可二次编辑.!!!!!
  49.    ostrs (cons ostr ostrs)
  50.    nstrs (cons nstr nstrs))
  51.   ) ; ostrs,nstrs = 字符列表.一一对应.
  52.   (if (and fns ostrs nstrs)
  53.     (progn
  54.       (setq
  55. ff  '("#" "," "[" "]" "@" "*" "?" "~" ) ;避免字符和 字符过滤符混淆造成错误.
  56. fil (apply 'strcat
  57.      (mapcar '(lambda (x / strs `)
  58.          (setq strs (vl-string->list x)
  59.         ` (ascii "`"))
  60.          (setq x (vl-list->string(apply 'append
  61.           (mapcar '(lambda(y)(if (member (chr y) ff)(list ` y)
  62.           (list y)))strs))
  63.           ))
  64.          (strcat "*" x "*,")) ostrs)
  65.      )
  66.       )
  67.       (princ "\n 正在处理文件:")
  68.       (mapcar
  69. '(lambda (fname)
  70.     (xo-infdo
  71.       fname
  72.       vcol
  73.       '(lambda (x)
  74.   (if
  75.     (and (vlax-property-available-p x 'textstring)
  76.          (wcmatch (setq str (vla-get-textstring x)) fil)
  77.     )
  78.      (vla-put-textstring
  79.        x
  80.        (x$subs nstrs ostrs str)
  81.      )
  82.   )
  83.        )
  84.     )
  85.   )
  86. fns
  87.       )
  88.     )
  89.   )
  90.   ;(mapcar 'print fns)
  91.   (princ)
  92. )
  93. ;| (xo-infdo fname vcol func) = dbx技术对文件内集合进行操作
  94. 参数: fname = cad文件(*.dwg格式)
  95.       vcol = 集合列表.如'(modelspace paperspace)
  96.       func = 操作函数名, 如: 'xx 或 '(lambda(x)....)
  97.              操作函数必须含一个变量(集合内实体). 如: (defun xx (x) ...)
  98. 返回: 分别操作的表(表内容根据函数来定义).
  99. 说明: vcol可以是如下集合:
  100. All Collection Objects(所有的集合实体:)
  101. Blocks   Dictionaries  DimStyles  funccuments  FileDependencies  Groups
  102. Hyperlinks  Layers  Linetypes  MenuBar  MenuGroups  ModelSpace  
  103. PaperSpace  PlotConfigurations  PopupMenu  PopupMenus  
  104. RegisteredApplications  SelectionSets  TextStyles  Toolbar
  105. Toolbars  UCSs  Viewports  Views
  106. |;
  107. (defun xo-infdo (fname vcol func / doc CNAME RET VERKEY DOC E ENT I REGKEY SS SSBLK
  108.    ATTS BLKS CDOC CNAMES DOCS llays)
  109.   (setq fname (strcase fname))
  110.   (print fname)
  111.   (setq cdoc(vla-get-activedocument(vlax-get-acad-object)))
  112.   (setq cname (strcat(getvar "DWGPREFIX")(getvar "DWGNAME"))) ;; 当前文件名.
  113.   (vlax-for x (vlax-get(vlax-get-acad-object) 'documents) (setq docs (cons x docs)))
  114.   (setq cnames (mapcar '(lambda(x)(strcase (strcat (vla-get-path x) "\" (vla-get-name x)))) docs))
  115.   ;(setq fname cname)
  116.   (if (member fname cnames)
  117.     (progn
  118.       ;; v1.5加入,锁定图层解锁.>>可放入为xo-infdo的参数.后补>>
  119.       (evaldo cdoc (vla-get-layers cdoc)
  120.        '(lambda(x)(if(= :vlax-true (vla-get-lock x))
  121.       (progn(setq llays(cons x llays))
  122.             (vla-put-lock x :vlax-false)
  123.         )
  124.       )
  125.    )
  126.       )
  127.       (evalcur (setq doc (nth (-(length docs)(length(member fname cnames))) docs)));处理当前文件,evalcur函数
  128.       (mapcar '(lambda(x)(vla-put-lock x :vlax-true)) llays)
  129.     )
  130.     ;; 处理非当前文件.
  131.     (progn
  132.       (setq verkey  (if (> (atoi (getvar "AcadVer")) 15)
  133.         ".16"
  134.         ""
  135.       )
  136.      *DBXDOC (vla-getinterfaceobject
  137.         (vlax-get-acad-object)
  138.         (strcat "ObjectDBX.AxDbDocument" verkey)
  139.       )
  140.       )
  141.       (vla-open *dbxdoc fname :vlax-false)      ;open
  142.       ;; v1.5加入,锁定图层解锁.>>可放入为xo-infdo的参数.后补>>
  143.       (evaldo *dbxdoc (vla-get-layers *dbxdoc)
  144.        '(lambda(x)(if(= :vlax-true (vla-get-lock x))
  145.       (progn(setq llays(cons x llays))
  146.             (vla-put-lock x :vlax-false)
  147.         )
  148.       )
  149.    )
  150.       )
  151.       ;;
  152.       (setq
  153. ret (mapcar '(lambda (x)
  154.          (evaldo *dbxdoc (vlax-get *dbxdoc x) func) ;evaldo 函数
  155.        )
  156.       vcol
  157.      )
  158.       );(vlax-dump-object *dbxdoc T)
  159.       ;; v1.5加入,锁定图层解锁恢复>>
  160.       (mapcar '(lambda(x)(vla-put-lock x :vlax-true)) llays)
  161.       ;;
  162.       (vlax-invoke *dbxdoc 'saveas fname)
  163.       (vlax-release-object *dbxdoc)
  164.     )
  165.   )
  166.   ret
  167. )
  168. ;;; 处理非打开文件.
  169.   (defun evaldo (doc obj func)
  170.     (vlax-map-collection
  171.       obj
  172.       '(lambda (x)
  173.   (if (vlax-property-available-p x 'count)
  174.     (evaldo doc x func)
  175.     (if (vlax-method-applicable-p x 'GetAttributes)
  176.       (mapcar '(lambda (y) ((eval func) y))
  177.        (vlax-invoke x 'GetAttributes)
  178.       )
  179.       ((eval func) x)
  180.     )
  181.   )
  182.        )
  183.     )
  184.   )
  185. ;;;*当前文件* ;(setq doc cdoc) ;(setq cnames nil)
  186.   (defun evalcur (doc / ATTS BLKS E ENT I REGKEY SS SSBLK X Y)
  187.     (if (equal doc cdoc)
  188.       (princ "(*当前文件*)")
  189.       (princ "(*已打开文件*)")
  190.     )
  191.     ;;激活已打开文件..->>>>>bug, vlisp先天缺陷? 不能跨文档
  192.     (vla-Activate doc)
  193.     ;;处理*text
  194.     (if (setq i  -1
  195.        ss (ssget "x" (list (cons 0 "*TEXT") (cons 1 fil)))
  196. )
  197.       (while (setq i (1+ i)
  198.      e (ssname ss i)
  199.       )
  200. (setq ent (entget e))
  201. (entmod
  202.    (subst (cons 1 (x$subs nstrs ostrs (cdr (assoc 1 ent))))
  203.    (assoc 1 ent)
  204.    ent
  205.    )
  206. )
  207.       )
  208.     )
  209.     (princ "\n .......文字处理完毕.")
  210.     ;;处理 块内文字.
  211.     (if (setq blks (vla-get-blocks doc))
  212.       (vlax-for x blks         ;(vla-item (vla-get-blocks doc) 1)
  213. (setq regkey nil)
  214. (vlax-for y x
  215.    (if (and (wcmatch (vla-get-objectname y) "AcDb*Text")
  216.      (wcmatch (vla-get-textstring y) fil)
  217.        )
  218.      (progn (vla-put-textstring
  219.        y
  220.        (x$subs nstrs ostrs (vla-get-textstring y))
  221.      )
  222.      (setq regkey T)
  223.      )
  224.    )
  225. )
  226. (if (and regkey (< 0 (vla-get-count x)))
  227.            ;(print (assoc 2 (entget(vlax-vla-object->ename x))))
  228.    (if (setq i -1
  229.       ssblk
  230.        (ssget
  231.          "x"
  232.          (list (cons 0 "INSERT") (cons 2 (vla-get-name x)))
  233.        )
  234.        )
  235.      (while (setq i (1+ i)
  236.     e (ssname ssblk i)
  237.      )
  238.        (entupd e)
  239.      )
  240.    )
  241. )
  242.       )
  243.     )
  244.     (princ "\n .......块内文字处理完毕.")
  245.     ;;处理块属性.
  246.     (if
  247.       (setq i  -1
  248.      ss (ssget "x" (list (cons 0 "INSERT") (cons 66 1)))
  249.       )
  250.        (while (setq i (1+ i)
  251.       e (ssname ss i)
  252.        )
  253.   (setq atts (vlax-invoke (vlax-ename->vla-object e) 'getattributes))
  254.   (mapcar '(lambda (x / y)       ;(setq x (cadr atts))
  255.       (if (wcmatch (setq y (vla-get-textstring x)) fil)
  256.         (vla-put-textstring x (x$subs nstrs ostrs y))
  257.       )
  258.     )
  259.    atts
  260.   )
  261.        )
  262.     )
  263.     (princ "\n .......块属性处理完毕.")
  264.     ;;恢复激活原当前文件.
  265.     (vla-Activate cdoc)
  266.     doc
  267.   )
  268. ;; (qf_getFolder "");; 取目录 by 秋枫.
  269. (defun qf_getFolder (msg / WinShell shFolder path catchit)
  270.   (vl-load-com)
  271.   (setq winshell (vlax-create-object "Shell.Application")); (vlax-dump-object winshell T)
  272.   (setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
  273.   (setq
  274.     catchit (vl-catch-all-apply
  275.        '(lambda ()
  276.    (setq shFolder (vlax-get-property shFolder 'self))
  277.    (setq path (vlax-get-property shFolder 'path))
  278.         )
  279.      )
  280.   )
  281.   (if (vl-catch-all-error-p catchit)
  282.     nil
  283.     path
  284.   )
  285. )
  286. ;| (xo-getfiles dir) = 调用win系统对话框选取多个文件(2007),返回文件列表.----by lxx.2007.4 v2.0
  287. 参数: dir = 初始目录
  288. 返回: 含路径的文件名列表.
  289. 说明: for Windows XP / winnt2k
  290. 测试:
  291. (xo-getfiles "c:\\temp\")
  292. -> ("C:\\temp\\测试新块1.dwg" "C:\\temp\\测试新块2.dwg")  ;; 多选.
  293. -> ("C:\\temp\\测试新块1.dwg") ;; 单选.
  294. |;
  295. (defun xo-getfiles (Dir / x r y lst fn$ DLGPATH I PATH)
  296.   (vl-load-com)
  297.   (if (and (not (setq x (vlax-create-object "MSComDlg.CommonDialog")))
  298.     (setq dlgpath (findfile "Comdlg32.inf"))
  299.       )
  300.     (startapp (strcat dlgpath))
  301.   )
  302.   (if (or (setq x (vlax-create-object "UserAccounts.CommonDialog"))
  303.    (setq y (vlax-create-object "MSComDlg.CommonDialog")
  304.   x y
  305.    )
  306.       )
  307.     (progn
  308.       (vlax-put-property
  309. x
  310. 'Filter
  311. "cad文件|*.dwg;*.dxf|cad程序|*.lsp;*.arx;*.fas;*.vlx|位图|*.jpg;*.bmp;*.png;*.gif|所有类型|*.*"
  312.       )
  313.            ;(vlax-put-property x 'FilterIndex 1)
  314.       (if y
  315. (vlax-put-property x "MaxFileSize" 10000)
  316.       )
  317.       (vlax-put-property x 'Flags 512)       ; 设置多选文件选项, 如不需要则删除此行
  318.       (vlax-put-property x 'InitialDir Dir)
  319.       (setq r (vlax-invoke-method x 'ShowOpen))
  320.       (if (= 0 r)
  321. nil
  322. (setq fn$ (vlax-get-property x 'FileName))
  323.       )
  324.     )
  325.   )
  326.   (setq lst nil)
  327.   (if (/= "" fn$)
  328.     (cond
  329.       ((vl-string-search " " fn$)
  330.        (while (setq i (vl-string-position (ascii " ") fn$))
  331.   (setq lst (cons (substr fn$ 1 i) lst)
  332.         fn$ (substr fn$ (+ 2 i))
  333.   )
  334.        )
  335.        (if (/= "" fn$)
  336.   (setq lst (cons fn$ lst))
  337.        )
  338.        (setq lst  (reverse lst)
  339.       path (car lst)
  340.        )
  341.        (mapcar '(lambda (x) (strcat path x)) (cdr lst))
  342.       )
  343.       (T (list fn$))
  344.     )
  345.     nil
  346.   )
  347. )
  348. ;|(x$sub 新$ 旧$ 字符串) = 字符串替换-------------------------------lxx.2004.2
  349. (x$sub " " "-" "32-33-0.01-哈哈") -> "32 33 0.01 哈哈"
  350. |;
  351. (defun x$sub (n$ o$ str / n)
  352.   (setq n 0)
  353.   (while (setq n (vl-string-search o$ str n))
  354.    (setq str (vl-string-subst n$ o$ str n))
  355.    (setq n (+ n (strlen n$)))
  356.   )str
  357. )
  358. ;|(x$subs 新$表 旧$表 字符串) = 字符串多项替换--lxx.2007.4
  359. 功能:替换字符串中符合替换表的多项字符.
  360. 测试: (x$subs '("aa" "1") '("bb" "2") "bbc-bb2132") ->"aac-aa1131"
  361. |;
  362. (defun x$subs (nstrs ostrs str)
  363.   (mapcar '(lambda(x y)(setq str (x$sub x y str))) nstrs ostrs)
  364.   str
  365. )
  366. ;;====================================================================;;
  367. (princ "\n mcht = dbx不打开目录文件替换字符(支持多重块)v1.5-----by lxx.2007.4")
  368. (princ)
  369. ;; dbx技术=不打开dwg,修改指定路径下多个文件内的文字 by lzh741206
  370. ;; [url=http://xdcad.net/forum/showthread.php?s=&postid=1211267#post1211267]http://xdcad.net/forum/showthread.php?s=&postid=1211267#post1211267[/url]
  371. ;|
  372. Sub MyReplace(PathName As String, str1 As String, str2 As String)
  373.     Dim pFile As String
  374.     Dim ObjDbx As Object
  375.     pFile = Dir(PathName & "*.dwg")
  376.     Set ObjDbx = GetInterfaceObject("ObjectDBX.AxDbDocument.16")
  377.     '2002版本下改为Set ObjDbx = GetInterfaceObject("ObjectDBX.AxDbDocument.1")
  378.     Do While pFile <> ""
  379.         ObjDbx.Open PathName & pFile
  380.         For Each i In ObjDbx.ModelSpace
  381.             If i.ObjectName = "AcDbText" Or i.ObjectName = "AcDbMText" Then
  382.                 i.textString = Replace(i.textString, str1, str2)
  383.             End If
  384.         Next i
  385.         ObjDbx.SaveAs PathName & pFile
  386.         pFile = Dir()
  387.     Loop
  388. End Sub
  389. |;
  390. ;|
  391. vl-directory-files 函数
  392. 语法
  393.    (vl-directory-files  [directory pattern directories])

  394. 功能
  395.    列出给定目录中的所有文件。

  396. 说明
  397.     1)参数 directory 为字符串,指定要收集文件的目录。若未指定该参数或参数为 nil,那么vl-directory-files 使用当前目录。
  398.     2)参数 pattern 为字符串,包含文件名的 DOS 方式。如果未指定该参数或参数为 nil,vl-directory-files 假定为 "*.*"。
  399.     3)directories 为整数型,指定返回的表中是否包含路径名。可以指定下列值之一:
  400. -1  仅列出目录。
  401. 0   列出文件和目录(缺省值)。
  402. 1   仅列出文件。

  403. 返回值:
  404. 文件和路径列表。若没有符合指定方式的文件,则返回 nil。

  405. 样例:
  406. 1)_$ (vl-directory-files "c:/acadwin" "acad*.exe")
  407. ("ACAD.EXE" "ACADAPP.EXE" "ACADL.EXE" "ACADPS.EXE")
  408. 2)_$ (vl-directory-files "d:/acadwin" nil -1)
  409. ("." ".." "SUPPORT" "SAMPLE" "ADS" "FONTS" "IGESFONT" "SOURCE" "ASE")
  410. 3)_$ (vl-directory-files "d:/acad13c4" nil -1)
  411. ("." ".." "WIN" "COM" "DOS")
  412. GetInterfaceObject 方法
  413. Application 对象  
  414. 一个 AutoCAD 应用程序实例。
  415. VBA 类别名:
  416. AcadApplication
  417. 创建方法:
  418. 对于VB:
  419. GetObject("AutoCAD.Application.16")
  420. CreateObject("AutoCAD.Application.16")
  421. 对于AutoCAD VBA:
  422. 不适用。应用程序始终可用()。
  423. 访问途径:
  424. Application 属性
  425. 与Application对象相关联的属性主应用程序窗口的特性。这些方法控制当前加载的外部应用程序与接口对象的加载或列表。
  426. 活动的文档 (AutoCAD 图形) 可使用 ActiveDocument 属性来访问。
  427. 要从VBA访问Application 对象,可使用 Thisdrawing.Application。要从VB中访问 Application 对象,可使用 Visual Basic
  428. 函数 GetObject 或 CreateObject。
  429. 如果 AutoCAD 正在运行,GetObject 函数将会得到当前的 AutoCAD Application 对象。当同时运行了多个 AutoCAD 进程,
  430. GetObject 函数返回Windows 运行对象表中第一个 AutoCAD 实例。请查阅 Microsoft Visual Basic 文档的
  431. Running Object Table (ROT) 和 GetObject 函数 (以获得确认GetObject返回操作的详细信息)。
  432. 使用版本相关的 ProgIDs。如果 CreateObject 或 GetObject 函数使用了版本相关的 ProgID,更改函数以适用版本相关 ProgID。例如,
  433. 用户可更改 CreateObject ("AutoCAD.Application") 为 CreateObject ("AutoCAD.Application.16")来调用AutoCAD 2004。
  434. Application 对象同时也是 ActiveX 接口的 Global 对象。也就是说 Application 对象的所有方法和属性,都可以用于全局名称空间。

点评

能否修改一下,变成查找文字,返回包含文件列表  发表于 2013-6-5 10:12
期待不打开文件查找并绑定外部参照;  发表于 2013-5-30 18:06
希望继续发扬,如何不打开图纸,批量将图中所有标注的42DXF码值导出到TXT?  发表于 2012-12-24 11:12
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-4-2 09:24 | 显示全部楼层
(defun c:test9()
(setvar "pdmode" 34)
(setq myssss (ssget "x" '((0 . "POINT"))))
(command "erase" myssss "")
)
请教如何不打开图纸实现此函数的功能?我要处理的约有100张图纸,想把这些图纸中的point删除
回复 支持 1 反对 0

使用道具 举报

发表于 2012-11-20 00:06 | 显示全部楼层
teykmcqh 发表于 2012-11-19 17:13
我最后还是用块插入方式暂时解决的,不知这位高手有什么思路,其实这个问题归根还是在不打开的情况下多文 ...

不同的图若含相同的块 插入到同一张图中会是后面文件中的块儿失效
可以用参照 绑定的方法 解决这个问题 只是块名称发生了变化
插入的图形获得其长度 和 高度后 然后进行排列

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2011-5-22 12:38 | 显示全部楼层
狂刀研究的比较广,比较透,比较深。厉害。学习的榜样!
回复 支持 1 反对 0

使用道具 举报

发表于 2011-5-11 12:46 | 显示全部楼层
回复 狂刀lxx 的帖子

老刀终于把压箱底都翻出了
发表于 2011-5-11 17:45 | 显示全部楼层
支持狂刀,我顶
发表于 2011-5-11 23:22 | 显示全部楼层
是啊,你的程序太好了,支持楼主!
发表于 2011-5-12 00:30 | 显示全部楼层
强人一个,
发表于 2011-5-13 09:01 | 显示全部楼层
支持狂刀,厉害!
发表于 2011-5-13 19:06 | 显示全部楼层
学习学习,好东西
发表于 2011-5-13 19:11 | 显示全部楼层
箱子东西太多了放不下了啊
发表于 2011-5-13 22:26 | 显示全部楼层
无聊多好啊,狂刀出手,见神杀神,明天再好无聊下啦,呵呵
发表于 2011-5-14 16:06 | 显示全部楼层
在高手面前,永远只有学习的份,谢谢支持源码!
上前我提过一个问题:如何合并多个CAD图纸为一个文件,就是通过选择目录,把许多个CAD图纸按文件名的排列顺序,呈矩阵分布合并在一张图纸中,谁能帮解决一下吗?
说明两点:一是不用块插入方式,因为块插入炸开后,同时把图纸中的图块也炸开了;二是这许多个CAD图纸都是程序生成的,具有完全相同的格式,只是内容有些不同,譬如钻孔柱状图。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 04:39 , Processed in 0.205239 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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