明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5769|回复: 18

[源码] 对齐参照块,以参照块名字排序

  [复制链接]
发表于 2014-3-15 16:51:58 | 显示全部楼层 |阅读模式
本帖最后由 菜卷鱼 于 2024-10-16 09:11 编辑

合并很多图纸到一个CAD文件,我常用的方法是插入DWG参照的方式
此命令用来排列对齐DWG参照图的,DWG参照的命名就是图号名开头就能对齐
隐藏命令,输入DW之后再输入A
隐藏命令A是针对图框是块的对齐
;;;(2 . "DRAWINGS_A*")是图框块的名字


  1. (defun c:dw ()
  2. (princ "(参照)块对齐")
  3. (onxline )
  4. (prin1)
  5. )

  6. (defun onxline ()
  7. (setq *error* pt_err)
  8. (setq sxkkey 0)
  9. (initget 1 "Aboom")
  10. (setq p0(getpoint "\n集合点:"))
  11. (while (= p0 "Aboom")
  12. (setq sxkkey 1)
  13. (princ "\n更改过滤条件,图纸对齐...\n请选择空白区域!")
  14. (setq p0(getpoint "\n集合点:"))
  15. )
  16. (setq dist(getreal "\n间距:<0>"))
  17. (if (= dist nil)(setq dist 0))

  18. (if (= sxkkey 1)
  19. (progn
  20. (setq ss (ssget  '((0 . "INSERT")(2 . "DRAWINGS_A*"))  ))  ;;;;;;;;;这里是块名(2 . "DRAWINGS_A*")
  21. (setq ss (sort-se (sort-se ss 10 0 50 nil) 10 1 50 t )))
  22. (progn
  23. (setq ss(ssget '( (0 . "insert") )) )
  24. (setq ss (sort-se ss 2 0 50 nil))
  25. )
  26. )

  27. (setq os(getvar 'osmode))
  28. (setvar 'cmdecho 0)
  29. (setvar 'osmode 0)
  30. (setq i 0)
  31. (repeat   (sslength ss)
  32. (setq entname(ssname ss i))
  33. (setq qq (cornerp entname))
  34. (setq p1(car qq) p2(cadr qq))
  35. (if (=  sxkkey 1)
  36. (PROGN
  37. (setq ssall(ssget "w" p1 p2   ))
  38. (command "_.move" ssall "" p1 p0))
  39. (command "_.move" entname "" p1 p0)
  40. )
  41. (setq qq(cornerp entname))
  42. (setq p1(car qq) p2(cadr qq))
  43. (setq p0(cons (car p2) (cdr p1)))
  44. (setq p0(polar p0 0 dist))

  45. (setq i(1+ i))
  46. )
  47. (setvar 'osmode os)
  48. (setvar 'cmdecho 1)
  49. (prin1)
  50. )



  51. (defun pt_err()
  52. (setvar 'osmode os)
  53. (setvar 'cmdecho 1)
  54. (prin1))

  55. (DEFUN cornerp(entname)                  ;;;对角点
  56. (vla-getboundingbox (vlax-ename->vla-object entname) 'entpl 'entpr)
  57. (setq ptlist (mapcar 'vlax-safearray->list (list entpl entpr)))
  58. (mapcar '(lambda (x) (trans x 0 1)) ptlist)
  59. )

  60. (vl-load-com)
  61. (defun SORT-SE (SE DXF INT FUZZ K / ENT INDEX LST NEWLST NEWSE TMP)
  62.   ;;建立排序列表
  63.   (setq LST '() INDEX 0)
  64.   (repeat (sslength SE)
  65.     (setq ENT (entget (ssname SE INDEX))
  66. TMP (cdr (assoc DXF ENT)) )

  67.     (if (and INT (= (type INT) 'INT) (= (type TMP) 'list)(< INT (length TMP)) )
  68.         (setq TMP (nth INT TMP)))

  69.     (setq LST (cons (list TMP (cdr (assoc 5 ENT))) LST))
  70.     (setq INDEX (1+ INDEX)));;排序操作

  71.   (if (and FUZZ
  72.   (or (= (type FUZZ) 'INT)
  73.       (= (type FUZZ) 'REAL))
  74.   (or (= (type TMP) 'INT) (= (type TMP) 'REAL)))
  75.     (setq NEWLST
  76. (vl-sort LST (function (lambda (E1 E2) (< (+ (car E1) FUZZ) (car E2)))
  77. )))
  78.     (setq NEWLST
  79. (vl-sort LST (function (lambda (E1 E2) (< (car E1) (car E2))))
  80. )))         ;;如果K为T,则倒置
  81.   (if K (setq NEWLST (reverse NEWLST)))
  82.   (setq NEWSE (ssadd))
  83.   (foreach TMP NEWLST
  84.     (setq NEWSE (ssadd (handent (cadr TMP)) NEWSE))
  85. )   ;;返回值  NEWSE ;_结束defun;;;
  86. )
  87. (prin1)




评分

参与人数 2明经币 +2 收起 理由
sy78wpl + 1 赞一个!
lucas_3333 + 1 不错,谢谢分享!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-6-5 14:23:04 | 显示全部楼层
合并很多图纸到一个CAD文件,我常用的方法是插入DWG参照的方式 我也经常需要用到将多个CAD文件合并为一个文件, 我每次插入DWG 都不成功,请问有什么诀窍吗。谢谢了
发表于 2016-10-19 09:58:22 | 显示全部楼层
一点建议如果能把包含块里面的图形和增加选择横或竖排就完美了
发表于 2024-6-4 18:55:30 | 显示全部楼层
请问 显示这个需要怎样处理?

错误: 输入的列表有缺陷
 楼主| 发表于 2014-3-15 17:28:17 | 显示全部楼层
公司电脑,发不了附件,见谅

点评

要是能批量插入块参照那就好了, 另外能按图号顺序排列,就更完美了  发表于 2014-7-21 14:49

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 谢谢!

查看全部评分

发表于 2014-3-16 07:45:55 | 显示全部楼层
*error* 函数中出错AutoCAD 变量设置被拒绝: OSMODE nil

评分

参与人数 1明经币 +1 收起 理由
菜卷鱼 + 1 我检查一下,我这样用着没问题

查看全部评分

发表于 2014-7-22 19:56:58 | 显示全部楼层
本帖最后由 lucas_3333 于 2014-7-22 19:59 编辑

菜卷鱼大侠请帮帮我
目前排序是根据文件名排序吗?是能否读取属性块中的图号,按图号从左至右,从上至下排序?
目前排序无论多少都是排成一行,能否设定多少张图一行?增加一个行间距.

谢谢!
发表于 2014-7-23 10:34:04 | 显示全部楼层
大侠弄个gif看看呀,,什么效果,,
 楼主| 发表于 2014-7-24 11:57:51 | 显示全部楼层
lucas_3333 发表于 2014-7-22 19:56
菜卷鱼大侠请帮帮我
目前排序是根据文件名排序吗?是能否读取属性块中的图号,按图号从左至右,从上至下排 ...

得要看看你图框是什么样的了
发表于 2014-7-24 12:29:44 | 显示全部楼层
本帖最后由 lucas_3333 于 2014-7-28 23:01 编辑
菜卷鱼 发表于 2014-7-24 11:57
得要看看你图框是什么样的了

菜卷鱼大侠,你好,图框样本我上传上来,收到了吧?

发表于 2014-10-25 18:33:44 | 显示全部楼层
做成行列对齐等距的,
发表于 2014-11-26 19:49:21 | 显示全部楼层
非常棒!多图纸,一键调整!
发表于 2015-6-24 11:00:17 | 显示全部楼层
谢了            
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-22 02:49 , Processed in 0.226202 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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