1. ;**************同行文字合并工具******************
    2. ;***本工具出品于: Dcl-To-Lsp群(663130417); ***
    3. ;***作者:青春散场,不诉离殇!(QQ:702099480);***
    4. ;***时间: 2018413日; ***
    5. ;************************************************
    6. ;;2019.12.10优化有时不能合并的bug,增加文字行排序!
    7. (defun C:FV(/ delss endlst ent entlst entmlst entnow higy i n rowendlst rowlst ss startent_data)
    8. (setvar "CMDECHO" 0)
    9. (princ "\n选择合并文字:")
    10. (if (setq ss (ssget '((0 . "*TEXT"))))
    11. (progn
    12. (setq entlst nil entmlst nil n 0)
    13. (repeat (sslength ss)
    14. (setq ent (ssname ss n))
    15. (cond
    16. ((= (cdr (assoc 0 (entget ent))) "TEXT")
    17. (setq entlst (cons (cons (cdr (assoc 10 (entget ent))) ent) entlst))
    18. )
    19. ((= (cdr (assoc 0 (entget ent))) "MTEXT")
    20. (setq entmlst (cons (cons (cdr (assoc 10 (entget ent))) ent) entmlst))
    21. )
    22. )
    23. (setq n (+ n 1))
    24. )
    25. (if entlst
    26. (progn
    27. (setq entlst (vl-sort entlst '(lambda (x y) (< (cadar x) (cadar y)))) higy (cadaar entlst) n 0 entnow nil rowlst nil rowendlst nil)
    28. (repeat (length entlst)
    29. (setq entnow (nth n entlst))
    30. (if (equal (cadar entnow) higy (/ (cdr (assoc 40 (entget (cdr entnow)))) 4.0))
    31. (progn (setq rowlst (append rowlst (list entnow))))
    32. (progn (setq rowendlst (append rowendlst (list rowlst)))
    33. (setq rowlst (list entnow))
    34. (setq higy (cadar entnow))
    35. )
    36. )
    37. (setq n (+ n 1))
    38. (if (= n (length entlst)) (setq rowendlst (append rowendlst (list rowlst))))
    39. )
    40. (command "_.UNDO" "be")
    41. (setq n 0 endlst nil)
    42. (repeat (length rowendlst)
    43. (setq endlst (vl-sort (nth n rowendlst) '(lambda (x y) (< (caar x) (caar y)))))
    44. (if (> (length endlst) 1)
    45. (progn
    46. (setq startent_data (entget (cdr (car endlst))) i 1)
    47. (repeat (- (length endlst) 1)
    48. (setq startent_data (subst (cons 1 (strcat (cdr (assoc 1 startent_data)) (cdr (assoc 1 (entget (cdr (nth i endlst))))))) (assoc 1 startent_data) startent_data))
    49. (entmod startent_data)
    50. (command "ERASE" (cdr (nth i endlst)) "")
    51. (setq i (+ i 1))
    52. )
    53. )
    54. )
    55. (setq n (1+ n))
    56. )
    57. (command "_.UNDO" "e")
    58. )
    59. )
    60. (if entmlst
    61. (progn
    62. (setq entmlst (vl-sort entmlst '(lambda (x y) (< (cadar x) (cadar y)))) higy (cadaar entmlst) n 0 entnow nil rowlst nil rowendlst nil)
    63. (repeat (length entmlst)
    64. (setq entnow (nth n entmlst))
    65. (if (equal (cadar entnow) higy (/ (cdr (assoc 40 (entget (cdr entnow)))) 4.0))
    66. (progn (setq rowlst (append rowlst (list entnow))))
    67. (progn (setq rowendlst (append rowendlst (list rowlst)))
    68. (setq rowlst (list entnow))
    69. (setq higy (cadar entnow))
    70. )
    71. )
    72. (setq n (+ n 1))
    73. (if (= n (length entmlst)) (setq rowendlst (append rowendlst (list rowlst))))
    74. )
    75. (command "_.UNDO" "be")
    76. (setq n 0 endlst nil)
    77. (repeat (length rowendlst)
    78. (setq endlst (vl-sort (nth n rowendlst) '(lambda (x y) (< (caar x) (caar y)))))
    79. (if (> (length endlst) 1)
    80. (progn
    81. (setq startent_data (entget (cdr (car endlst))) i 1)
    82. (repeat (- (length endlst) 1)
    83. (setq startent_data (subst (cons 1 (strcat (cdr (assoc 1 startent_data)) (cdr (assoc 1 (entget (cdr (nth i endlst))))))) (assoc 1 startent_data) startent_data))
    84. (entmod startent_data)
    85. (command "ERASE" (cdr (nth i endlst)) "")
    86. (setq i (+ i 1))
    87. )
    88. )
    89. )
    90. (setq n (1+ n))
    91. )
    92. (command "_.UNDO" "e")
    93. )
    94. )
    95. )
    96. )
    97. (prin1)
    98. )
    99. (princ "\n 同行文字合并 快捷键:FV ")
    100. (prin1)