乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 82|回复: 8

[编程交流] 对齐曲面高程标签

[复制链接]

95

主题

477

帖子

383

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
475
发表于 2022-7-5 17:41:42 | 显示全部楼层 |阅读模式
因此,真正清理平面的一件事是将曲面高程标签全部对齐成一行。我很好奇是否有办法通过LISP实现这一点。在AutoCAD中,我可以选择多个曲面高程标签,按住shift键的同时单击每个标签的正方形(亮显时显示的淡蓝色正方形),然后将它们一起移动。我很好奇是否有办法通过LISP完成shift+右键单击部分。
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 17:53:39 | 显示全部楼层
您可以使用acet sys shift down功能。
 
与控制键类似,功能acet sys control down。
 
在浏览网页时发现了这个,希望它能帮助你找到你要去的地方:
 
  1. (defun c:mx ()
  2. (setq obj (ssget ))
  3. (setq P1 ( getpoint "\nPick basepoint : "))
  4. (setq P2 ( getpoint "\nPick X-value point : "))
  5. (if (acet-sys-shift-down)
  6. ;If shift-down
  7. (command "_.Move" obj "" P1 ".x" P1 P2)
  8. ;If not shift-down
  9. (command "_.Move" obj "" P1 ".x" P2 P1)
  10. );;
  11. (princ)
  12. )
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 18:01:37 | 显示全部楼层
甚至更好。李先生的荣誉。
 
  1. ;;------------------------=={  Dynamic Text Align  }==---------------------------;;
  2. ;;                                                                               ;;
  3. ;;  Allows the user to dynamically align text to any angle. User is prompted to  ;;
  4. ;;  make a selection of Text or MText objects to align, and pick an alignment    ;;
  5. ;;  point, or select a text object to use for alignment. The selection of text   ;;
  6. ;;  is then aligned by either x or y coordinate, or dynamically stretched        ;;
  7. ;;  depending on the mode chosen.                                                ;;
  8. ;;                                                                               ;;
  9. ;;  The mode can be switched upon pressing TAB during alignment. Text and MText  ;;
  10. ;;  entities will be aligned in accordance with their respective justifications. ;;
  11. ;;                                                                               ;;
  12. ;;  The user can also specify a fixed text spacing, by pressing 'S' during text  ;;
  13. ;;  alignment. Holding Shift whilst aligning Text will alter Text Rotation, the  ;;
  14. ;;  user can also refine Rotation by pressing 'R' during text alignment. Text    ;;
  15. ;;  Justfication can be altered by pressing 'J' during text alignment.           ;;
  16. ;;                                                                               ;;
  17. ;;                                                                               ;;
  18. ;;  Object Alignment Mode:-                                                      ;;
  19. ;;  --------------------------                                                   ;;
  20. ;;  Text can be aligned to an object by pressing 'O' during text alignment. In   ;;
  21. ;;  this mode, the text spacing along the object can be adjusted by pressing     ;;
  22. ;;  'S' and the text offset from the object can also be altered by pressing 'O'. ;;
  23. ;;                                                                               ;;
  24. ;;  Text Rotation can be aligned to the tangent vector of the object at the      ;;
  25. ;;  point of alignment by holding Shift during text placement. The user can      ;;
  26. ;;  furthermore specify a text rotation by pressing 'R'.                         ;;
  27. ;;                                                                               ;;
  28. ;;  The order of the text entities along the object can be Reversed by pressing  ;;
  29. ;;  'V' during Text placement. The original order of these entities is           ;;
  30. ;;  determined by the drawing direction of the object.                           ;;
  31. ;;                                                                               ;;
  32. ;;-------------------------------------------------------------------------------;;
  33. ;;                                                                               ;;
  34. ;;  FUNCTION SYNTAX:  TXALIGN                                                    ;;
  35. ;;                                                                               ;;
  36. ;;  Notes:-                                                                      ;;
  37. ;;  ---------                                                                    ;;
  38. ;;  Shift Functionality requires the user to have Express Tools installed.       ;;
  39. ;;                                                                               ;;
  40. ;;-------------------------------------------------------------------------------;;
  41. ;;                                                                               ;;
  42. ;;  Author: Lee Mac, Copyright © October 2009 - www.lee-mac.com                  ;;
  43. ;;                                                                               ;;
  44. ;;-------------------------------------------------------------------------------;;
  45. ;;                                                                               ;;
  46. ;;  Version:                                                                     ;;
  47. ;;                                                                               ;;
  48. ;;  1.0:  12/10/2009  -  First Release                                           ;;
  49. ;;-------------------------------------------------------------------------------;;
  50. ;;  1.1:  14/10/2009  -  Added ability to Specify fixed text spacing             ;;
  51. ;;-------------------------------------------------------------------------------;;
  52. ;;  1.2:  15/10/2009  -  Added Stretch Mode                                      ;;
  53. ;;                    -  Upgraded User messaging                                 ;;
  54. ;;-------------------------------------------------------------------------------;;
  55. ;;  1.3:  18/10/2009  -  Added Rotation Functionality                            ;;
  56. ;;-------------------------------------------------------------------------------;;
  57. ;;  1.4:  20/10/2009  -  Added functionality to align text to object.            ;;
  58. ;;-------------------------------------------------------------------------------;;
  59. ;;  1.5:  23/10/2009  -  Added Justification Options.                            ;;
  60. ;;-------------------------------------------------------------------------------;;
  61. ;;  1.6:  28/10/2009  -  Added Option to Select Text object at Alignment Point   ;;
  62. ;;                       prompt                                                  ;;
  63. ;;-------------------------------------------------------------------------------;;
  64. (defun c:TxAlign (/ ;; --=={ Local Functions }==--
  65.                      *error* GetProp Text_Rotation Text_Offset Text_Stretch
  66.                    ;; --=={ Local Variables }==--
  67.                      ANG BAR BDIS BPT BSANG BSDIS BSPT CANG CLST CMODE CODE
  68.                      CODEC COL CPT DATA DATAC DER DIS DOC DSPC ENT ET FOO
  69.                      FOOC GR GRC I IPT J JLST K MLST MSG MSGC OBJLST PLST
  70.                      PROP PT PTO RANG RLST SS TMPLST
  71.                    ;; --=={ Global Variables }==--
  72.                    ; *txMode   ~  Mode Setting
  73.                    ; *txSpc    ~  Default Text Spacing
  74.                    ; *txRot    ~  Default Text Rotation
  75.                    ; *txOff    ~  Default Text Curve Offset
  76.                    ; *txJus    ~  Default Text Justification
  77.                  )
  78. (vl-load-com)
  79. (defun *error* (err)
  80.    (and doc (vla-EndUndoMark doc))
  81.    (and rLst (mapcar
  82.                (function
  83.                  (lambda (values)
  84.                    (vlax-put (car values) (cadr values) (cadddr values))
  85.                    (vlax-put (car values) 'Rotation     (caddr  values)))) rLst))
  86.    (or (wcmatch (strcase err) "*BREAK,*CANCEL*,*EXIT*")
  87.        (princ (strcat "\nError: " err)))
  88.    (redraw)
  89.    (princ))
  90. (defun GetProp (object_list)
  91.    (mapcar
  92.      (function
  93.        (lambda (object / prop)
  94.          (setq prop (if (eq "AcDbText" (vla-get-ObjectName object))
  95.                       (if (eq acAlignmentLeft (vla-get-Alignment object))
  96.                         'InsertionPoint 'TextAlignmentPoint)
  97.                       'InsertionPoint))
  98.          (list object prop (vlax-get object 'Rotation) (vlax-get object prop)))) object_list))
  99. (defun Text_Rotation (/ oStr msgR grR codeR dataR rPt rAng)
  100.    (setq oStr "")
  101.    (princ (setq msgR (strcat "\nSpecify Text Rotation [Reset] <" (vl-princ-to-string *txRot) "> : ")))
  102.    (while
  103.      (progn
  104.        (setq grR (grread 't 15 0) codeR (car grR) dataR (cadr grR))
  105.        (redraw)
  106.       
  107.        (cond (  (and (= codeR 5) (listp dataR))
  108.                 (setq rPt (last (car (GetProp (list (car ObjLst))))))
  109.               
  110.                 (if (not (zerop (getvar "ORTHOMODE")))
  111.                   (if (< (abs (- (car dataR) (car rPt))) (abs (- (cadr dataR) (cadr rPt))))
  112.                     (setq dataR (list (car rPt) (cadr dataR) (caddr dataR)))
  113.                     (setq dataR (list (car dataR) (cadr rPt) (caddr dataR)))))
  114.               
  115.                 (setq rAng (angle rPt dataR))
  116.                 (mapcar
  117.                   (function
  118.                     (lambda (object) (vla-put-rotation object rAng))) ObjLst)
  119.               
  120.                 (grdraw rPt dataR 40 1) t)
  121.             
  122.              (  (and (= codeR 2) (< 46 dataR 123))
  123.                 (princ (chr dataR))
  124.                 (setq oStr (strcat oStr (chr dataR))))
  125.             
  126.              (  (and (= codeR 2) (= dataR  (< 0 (strlen oStr)))
  127.                 (princ (vl-list->string '(8 32 ))
  128.                 (setq oStr (substr oStr 1 (1- (strlen oStr)))))
  129.             
  130.              (  (and (= codeR 2) (= 15 dataR))
  131.                 (setvar "ORTHOMODE" (- 1 (getvar "ORTHOMODE"))))
  132.             
  133.              (  (or (and (= codeR 2) (vl-position dataR '(32 13)))
  134.                     (= code 25))
  135.               
  136.                 (cond (  (< 0 (strlen oStr))
  137.                      
  138.                        (cond (  (vl-position oStr '("r" "R" "reset" "Reset" "RESET"))
  139.                                 (setq rAng nil))
  140.                            
  141.                              (  (setq rAng (angtof oStr 0))
  142.                                 (setq *txRot (* 180. (/ rAng pi))) nil)
  143.                            
  144.                              (  (princ "\nInvalid Angle Entered.")
  145.                                 (setq oStr "")
  146.                                 (princ msgR))))
  147.                     
  148.                       (t (setq rAng (* pi (/ *txRot 180.))) nil)))
  149.             
  150.              (  (and (= codeR 3) (listp dataR))
  151.                 (setq *txRot (* 180. (/ rAng pi))) nil)
  152.             
  153.              (t (princ "\nInvalid Input.") (princ msgR)))))
  154.    
  155.      (if rAng
  156.        (mapcar (function (lambda (object) (vla-put-rotation object rAng))) ObjLst)
  157.        (mapcar (function (lambda (values) (vla-put-rotation (car values) (caddr values)))) rLst)))
  158. (defun Text_Offset (/ oStr BaseDis inc grLst tmpPt msgR grR codeR dataR cPt ang ptO der tmpOff k)
  159.    (setq oStr "")
  160.    (princ (setq msgR (strcat "\nSpecify Text Offset [Exit] <" (vl-princ-to-string *txOff) "> : ")))
  161.    (setq BaseDis (vlax-curve-getDistatPoint ent
  162.                    (vlax-curve-getClosestPointto ent
  163.                      (vlax-get (caar pLst) (cadar pLst)))))
  164.    (setq inc (/ (- (vlax-curve-getDistatPoint ent
  165.                      (vlax-curve-getClosestPointto ent
  166.                        (vlax-get (car (last pLst)) (cadr (last pLst))))) BaseDis) 50.))
  167.    (while
  168.      (progn
  169.        (setq grR (grread 't 15 0) codeR (car grR) dataR (cadr grR))
  170.        (redraw)
  171.       
  172.        (cond (  (and (= codeR 5) (listp dataR))                 
  173.                 (setq cPt  (vlax-curve-getClosestPointto ent dataR) k -1 ang  (angle cPt dataR))
  174.                 (grdraw cPt dataR 40 1)
  175.                 (setq aFac (- (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  176.                                                 (vlax-curve-getParamatPoint ent cPt))) ang))
  177.                 (setq grLst nil i -1)
  178.                 (repeat 50
  179.                   (setq grLst (cons (polar (setq tmpPt (vlax-curve-getPointatDist ent (+ BaseDis (* (setq i (1+ i)) inc))))
  180.                                            (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  181.                                              (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  182.                                                                             (vlax-curve-getParamatPoint ent tmpPt)))) aFac))
  183.                                            (distance cPt dataR)) grLst)))
  184.                 (grvecs (append '(-91) grLst))  
  185.                 (foreach Obj pLst
  186.                   (setq ptO (vlax-curve-getClosestPointto ent (vlax-get (car Obj) (cadr Obj))))
  187.                   (vlax-put (car Obj) (cadr Obj)
  188.                             (polar ptO (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  189.                                          (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  190.                                                                           (vlax-curve-getParamatPoint ent ptO)))) aFac))
  191.                                    (setq tmpOff (distance cPt dataR)))))
  192.               t)
  193.                               
  194.              (  (and (= codeR 2) (< 46 dataR 123))
  195.                 (princ (chr dataR))
  196.                 (setq oStr (strcat oStr (chr dataR))))
  197.             
  198.              (  (and (= codeR 2) (= dataR  (< 0 (strlen oStr)))
  199.                 (princ (vl-list->string '(8 32 ))
  200.                 (setq oStr (substr oStr 1 (1- (strlen oStr)))))
  201.             
  202.              (  (and (= codeR 2) (= 15 dataR))
  203.                 (setvar "ORTHOMODE" (- 1 (getvar "ORTHOMODE"))))
  204.             
  205.              (  (or (and (= codeR 2) (vl-position dataR '(32 13)))
  206.                     (= code 25))
  207.               
  208.                 (cond (  (< 0 (strlen oStr))
  209.                      
  210.                          (cond (  (vl-position oStr '("e" "E" "EXIT" "Exit" "exit"))
  211.                                   (setq tmpOff nil))
  212.                            
  213.                                (  (setq tmpOff (txt2num oStr))
  214.                                   (setq *txOff tmpOff) nil)
  215.                            
  216.                                (  (princ "\nInvalid Distance Entered.")
  217.                                   (setq oStr "")
  218.                                   (princ msgR))))
  219.                     
  220.                       (t (setq tmpOff nil))))
  221.             
  222.              (  (and (= codeR 3) (listp dataR))
  223.                 (setq *txOff tmpOff) nil)
  224.             
  225.              (t (princ "\nInvalid Input.") (princ msgR))))))
  226. (defun Text_Stretch (/ BaseDis BasePt oStr msgR grR codeR dataR cPt ang ptO der tmpspc k grLst i inc tmpPt)
  227.    (setq oStr "")
  228.    (princ (setq msgR (strcat "\nSpecify Text Spacing [Exit] <" (vl-princ-to-string dSpc) "> : ")))
  229.    (setq BaseDis (vlax-curve-getDistatPoint ent
  230.                    (setq BasePt
  231.                      (vlax-curve-getClosestPointto ent
  232.                        (vlax-get (caar pLst) (cadar pLst))))))
  233.    (while
  234.      (progn
  235.        (setq grR (grread 't 15 0) codeR (car grR) dataR (cadr grR))
  236.        (redraw)
  237.       
  238.        (cond (  (and (= codeR 5) (listp dataR))                 
  239.                 (setq cPt    (vlax-curve-getClosestPointto ent dataR) k 0 ang (angle cPt dataR)
  240.                       tmpspc (/ (* ((eval fooC) 0.)
  241.                                    (- (vlax-curve-getDistatPoint ent cPt) BaseDis))
  242.                                 (float (1- (length pLst)))))
  243.               
  244.                 (grdraw cPt dataR 40 1)
  245.                 (setq aFac (- (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  246.                                                 (vlax-curve-getParamatPoint ent cPt))) ang))
  247.                 (grdraw BasePt (polar BasePt (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  248.                                                (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  249.                                                                               (vlax-curve-getParamatPoint ent BasePt)))) aFac))
  250.                                       (distance cPt dataR)) 40 1)
  251.                 (vlax-put (caar pLst) (cadar pLst)
  252.                           (polar BasePt (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  253.                                           (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  254.                                                                          (vlax-curve-getParamatPoint ent BasePt)))) aFac)) *txOff))
  255.                 (setq grLst nil i -1 inc (/ (- (vlax-curve-getDistatPoint ent cPt) BaseDis) 50.))
  256.                 (repeat 50
  257.                   (setq grLst (cons (polar (setq tmpPt (vlax-curve-getPointatDist ent (+ BaseDis (* (setq i (1+ i)) inc))))
  258.                                            (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  259.                                              (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  260.                                                                             (vlax-curve-getParamatPoint ent tmpPt)))) aFac))
  261.                                            (distance cPt dataR)) grLst)))
  262.                 (grvecs (append '(-91) grLst))                                            
  263.                 (foreach Obj (cdr pLst)
  264.                   (if (setq ptO (vlax-curve-getPointatDist ent (+ bDis (* (setq k ((eval fooC) k)) tmpspc))))
  265.                     (vlax-put (car Obj) (cadr Obj)
  266.                               (polar ptO (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  267.                                            (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  268.                                                                           (vlax-curve-getParamatPoint ent ptO)))) aFac)) *txOff))))
  269.               t)
  270.                               
  271.              (  (and (= codeR 2) (< 46 dataR 123))
  272.                 (princ (chr dataR))
  273.                 (setq oStr (strcat oStr (chr dataR))))
  274.             
  275.              (  (and (= codeR 2) (= dataR  (< 0 (strlen oStr)))
  276.                 (princ (vl-list->string '(8 32 ))
  277.                 (setq oStr (substr oStr 1 (1- (strlen oStr)))))
  278.             
  279.              (  (and (= codeR 2) (= 15 dataR))
  280.                 (setvar "ORTHOMODE" (- 1 (getvar "ORTHOMODE"))))
  281.             
  282.              (  (or (and (= codeR 2) (vl-position dataR '(32 13)))
  283.                     (= code 25))
  284.               
  285.                 (cond (  (< 0 (strlen oStr))
  286.                      
  287.                          (cond (  (vl-position oStr '("e" "E" "EXIT" "Exit" "exit"))
  288.                                   (setq tmpspc nil))
  289.                            
  290.                                (  (setq tmpspc (txt2num oStr))
  291.                                   (setq dSpc tmpspc) nil)
  292.                            
  293.                                (  (princ "\nInvalid Distance Entered.")
  294.                                   (setq oStr "")
  295.                                   (princ msgR))))
  296.                     
  297.                       (t (setq tmpspc nil))))
  298.             
  299.              (  (and (= codeR 3) (listp dataR))
  300.                 (setq dSpc tmpspc) nil)
  301.             
  302.              (t (princ "\nInvalid Input.") (princ msgR))))))
  303. (defun txt2num  (txt)
  304. (cond ((distof txt 5)) ((distof txt 2))
  305.        ((distof txt 1)) ((distof txt 4))
  306.        ((distof txt 3))))
  307. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  308. (and (not acet-sys-shift-down)
  309.       (findfile "acetutil.arx")
  310.       (arxload (findfile "acetutil.arx") "Failed to Load Express Tools"))
  311. (setq et  (not (vl-catch-all-error-p
  312.                   (vl-catch-all-apply 'acet-sys-shift-down '( )))))
  313. (setq mLst '("HORIZONTAL" "VERTICAL" "STRETCH")
  314.        cLst '("CURVE MOVE" "CURVE STRETCH" "CURVE OFFSET") cMode 0)
  315. (or *txMode (setq *txMode   0))
  316. (or *txRot  (setq *txRot  0.0))
  317. (or *txSpc  (setq *txSpc 10.0))
  318. (or *txOff  (setq *txOff  0.0))
  319. (or *txJus  (setq *txJus    1))
  320. (princ "\nSelect Text to Align...")
  321. (if (and (setq ss (ssget "_:L" '((0 . "[color=red]*[/color]")))) [color=red];; <<-- wildcard[/color]
  322.           (/= 1 (sslength ss)))
  323.    (progn
  324.      (while
  325.        (progn
  326.          (initget "Text")
  327.          (or (vl-consp pt)
  328.              (setq pt (getpoint "\nSpecify Alignment Point or [T]ext Object: ")))
  329.          
  330.          (cond (  (vl-consp pt) nil)
  331.                
  332.                (  (eq "Text" pt)
  333.                   (while
  334.                     (progn
  335.                       (initget "Point")
  336.                       (setq ent (entsel "\nSelect Text Object or [P]oint: "))
  337.                       (cond (  (vl-consp ent)
  338.                              
  339.                                (if (wcmatch (cdr (assoc 0 (entget (car ent)))) "*TEXT")
  340.                                  (not (setq pt (last (car (GetProp (list (vlax-ename->vla-object (car ent))))))))
  341.                                  (princ "\nObject is not Text.")))
  342.                             (  (eq "Point" ent) nil)
  343.                             (t (princ "\nNothing Selected."))))) t))))
  344.      (if (vl-consp pt)
  345.        (progn
  346.       
  347.          (vla-StartUndoMark doc)
  348.          (setq i -1 col 3)
  349.          (while (setq ent (ssname ss (setq i (1+ i))))
  350.            (setq ObjLst (cons (vlax-ename->vla-object ent) ObjLst)))
  351.          (setq rLst (GetProp ObjLst))
  352.          (or (and (= 1 *txMode) (setq foo 'car bar '<))
  353.              (setq foo 'cadr bar '>))
  354.          (setq ObjLst (mapcar 'car
  355.                         (vl-sort rLst
  356.                           (function
  357.                             (lambda (a b)
  358.                               ((eval bar) ((eval foo) (vlax-get (car a) (cadr a)))
  359.                                           ((eval foo) (vlax-get (car b) (cadr b)))))))))
  360.          (eval (setq msg '(princ (strcat "\n[TAB] to Change Mode, [s]pace Text, [sHIFT] Align Rotation"
  361.                                          "\n[R]otation, [O]bject, [J]ustification"
  362.                                          "\nCurrent Mode: " (nth *txMode MLst)))))
  363.          
  364.          (while
  365.            (progn
  366.              (setq gr (grread 't 15 0) code (car gr) data (cadr gr))
  367.              (redraw)
  368.             
  369.              (cond (  (and (= 5 code) (listp data))
  370.                       (setq bPt (cond ((= 2 *txMode) (last (car (GetProp (list (car ObjLst)))))) (pt)))
  371.                     
  372.                       (if (not (zerop (getvar "ORTHOMODE")))
  373.                         (if (< (abs (- (car data) (car bPt))) (abs (- (cadr data) (cadr bPt))))
  374.                           (setq data (list (car bPt) (cadr data) (caddr data)))
  375.                           (setq data (list (car data) (cadr bPt) (caddr data)))))
  376.                       (setq *tx (cond ((zerop *txMode) 0.) ((/ pi 2.))) j -1
  377.                             ang (angle bPt data) dis (/ (distance bPt data) (1- (float (length ObjLst)))))
  378.                       (if (and et (acet-sys-shift-down))
  379.                         (mapcar (function (lambda (object) (vla-put-rotation object (+ ang (/ pi 2.))))) ObjLst))
  380.                       (foreach obj ObjLst
  381.                         (setq prop (if (eq "AcDbText" (vla-get-ObjectName obj))
  382.                                      (if (eq acAlignmentLeft (vla-get-Alignment obj))
  383.                                        'InsertionPoint 'TextAlignmentPoint)
  384.                                      'InsertionPoint))
  385.                         (cond (  (= 2 *txMode)
  386.                                  (grdraw bPt data col 1)
  387.                                  (vlax-put Obj prop (polar bPt ang (* (setq j (1+ j)) dis))))
  388.                               (t (grdraw bPt data col 1)
  389.                                  (setq bsPt (vlax-get obj prop))
  390.                                  (if (setq iPt (inters bPt data (polar bsPt *tx 1) bsPt nil))
  391.                                    (vlax-put Obj prop iPt)))))
  392.                       t)
  393.                    (  (= 2 code)
  394.                     
  395.                       (cond  (  (= 13 data) nil)
  396.                              (  (= 32 data) nil)
  397.                              (  (= 9  data)
  398.                                 (cond ((= (1- (length mLst)) *txMode)
  399.                                        (setq *txMode 0))
  400.                                       ((setq *txMode (1+ *txMode))))
  401.                                 (eval msg))
  402.                              
  403.                              (  (= 15 data) (setvar "ORTHOMODE" (- 1 (getvar "ORTHOMODE"))))
  404.                              (  (vl-position data '(99 67)) (setq col (1+ (rem col 6))))
  405.                              (  (vl-position data '(115 83))
  406.                                 (if (= *txMode 2) (princ "\nText Cannot be Spaced in this Mode")
  407.                                   (progn
  408.                                     (initget 4)
  409.                                     (setq *txSpc
  410.                                       (cond ((getdist (strcat "\nSpecify Text Spacing <" (vl-princ-to-string *txSpc) "> : ")))
  411.                                             (*txSpc)))
  412.                                     (or (and (zerop *tx) (setq foo 'cadr bar '>))
  413.                                         (setq foo 'car bar '<))
  414.                                     (setq tmpLst (GetProp ObjLst))
  415.                                     (setq ObjLst (mapcar 'car
  416.                                                    (setq tmpLst (vl-sort tmpLst
  417.                                                                   (function
  418.                                                                     (lambda (a b)
  419.                                                                       ((eval bar) ((eval foo) (vlax-get (car a) (cadr a)))
  420.                                                                                   ((eval foo) (vlax-get (car b) (cadr b))))))))) j 0)
  421.                                     (setq bsPt  (vlax-get (caar tmpLst) (cadar tmpLst))
  422.                                           bsAng (angle (vlax-get (caar tmpLst) (cadar tmpLst))
  423.                                                        (vlax-get (car (last tmpLst)) (cadr (last tmpLst)))))
  424.                                     (foreach obj (cdr ObjLst)
  425.                                       (setq prop (if (eq "AcDbText" (vla-get-ObjectName obj))
  426.                                                    (if (eq acAlignmentLeft (vla-get-Alignment obj))
  427.                                                      'InsertionPoint 'TextAlignmentPoint)
  428.                                                    'InsertionPoint))
  429.                                       (vlax-put Obj prop (polar bsPt bsAng (* (setq j (1+ j)) *txSpc))))))
  430.                                  
  431.                                     (eval msg))
  432.                              (  (vl-position data '(114 82)) (Text_Rotation) (eval msg))
  433.                              (  (vl-position data '(74 106))
  434.                                 (setq jLst '("TL" "TC" "TR" "ML" "MC" "MR" "BL" "BC" "BR"))
  435.                                 (initget "TL TC TR ML MC MR BL BC BR")
  436.                                 (setq *txJus
  437.                                   (1+
  438.                                     (vl-position
  439.                                       (cond
  440.                                         ((getkword (strcat "\nSpecify Text Justifcation [TL/TC/TR/ML/MC/MR/BL/BC/BR] <"
  441.                                                            (nth (1- *txJus) jLst) "> : ")))
  442.                                         ((nth (1- *txJus) jLst))) jLst)))
  443.                                 (mapcar
  444.                                   (function
  445.                                     (lambda (object / tmp)
  446.                                       (if (eq "AcDbText" (vla-get-ObjectName object))
  447.                                         (if (eq AcAlignmentLeft (vla-get-Alignment object))
  448.                                           (progn
  449.                                             (setq tmp (vla-get-InsertionPoint object))
  450.                                             (vla-put-Alignment object (+ *txJus 5))
  451.                                             (vla-put-TextAlignmentPoint object tmp))
  452.                                           (vla-put-Alignment object (+ *txJus 5)))
  453.                                         (vla-put-AttachmentPoint object *txJus)))) ObjLst)
  454.                                 (eval msg))
  455.                              (  (vl-position data '(79 111))
  456.                                 (while
  457.                                   (progn
  458.                                     (setq ent (car (entsel "\nSelect Object to Align Text <Exit> : ")))
  459.                                     (cond (  (eq 'ENAME (type ent))
  460.                                           
  461.                                              (if (vl-catch-all-error-p
  462.                                                    (vl-catch-all-apply 'vlax-curve-getEndParam (list ent)))
  463.                                                (princ "\nInvalid Object Type Selected.")))
  464.                                           (t (eval msg) (setq ent nil)))))
  465.                                 (if ent
  466.                                   (progn
  467.                                     (setq pLst (GetProp ObjLst) k 0 fooC '1+
  468.                                           dSpc (/ (- (vlax-curve-getDistatParam ent (vlax-curve-getEndParam ent))
  469.                                                      (vlax-curve-getDistatParam ent (vlax-curve-getStartParam ent)))
  470.                                                   (* 2. (length ObjLst))))
  471.                                  
  472.                                     (vlax-put (caar pLst) (cadar pLst)
  473.                                               (setq bsPt (vlax-curve-getClosestPointto ent
  474.                                                            (vlax-get (caar pLst) (cadar pLst)))))
  475.                                     (setq bsDis (vlax-curve-getDistatPoint ent bsPt))
  476.                                     (foreach obj (cdr pLst)
  477.                                       (if (setq ptO (vlax-curve-getPointatDist ent (+ (* (setq k ((eval fooC) k)) dSpc) bsDis)))
  478.                                         (vlax-put (car obj) (cadr obj) ptO)))
  479.                                     (princ (setq msgC "\n[E]xit, Re[V]erse, Text [O]ffset, [s]pace Text, [sHIFT] Align Rotation, [R]otation"))
  480.                                     
  481.                                     (while
  482.                                       (progn
  483.                                         (setq grC (grread 't 15 0) codeC (car grC) dataC (cadr grC))
  484.                                         (redraw)
  485.                                         (cond (  (and (= codeC 5) (listp dataC))
  486.                                                  (setq cPt  (vlax-curve-getClosestPointto ent dataC) k 0
  487.                                                        ang  (angle cPt dataC)
  488.                                                        bDis (vlax-curve-getDistatPoint ent cPt))
  489.                                                  (grdraw cPt dataC col 1)
  490.                                                
  491.                                                  (vlax-put (caar pLst) (cadar pLst) (polar cPt ang *txOff))
  492.                                                  (if (and et (acet-sys-shift-down))
  493.                                                    (vla-put-rotation (caar pLst) (- ang (/ pi 2.))))
  494.                                                  (setq aFac (- (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  495.                                                                                  (vlax-curve-getParamatPoint ent cPt))) ang))
  496.                                                
  497.                                                  (foreach Obj (cdr pLst)
  498.                                                    (if (setq ptO (vlax-curve-getPointatDist ent (+ bDis (* (setq k ((eval fooC) k)) dSpc))))
  499.                                                      (vlax-put (car Obj) (cadr Obj)
  500.                                                                (polar ptO (setq cAng (if (vl-position (cdr (assoc 0 (entget ent))) '("XLINE" "LINE")) ang
  501.                                                                                        (- (setq der (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  502.                                                                                                                       (vlax-curve-getParamatPoint ent ptO))))
  503.                                                                                           aFac)))
  504.                                                                       *txOff)))                                                  
  505.                                                    
  506.                                                    (if (and et (acet-sys-shift-down))
  507.                                                      (vla-put-rotation (car Obj) (- cAng (/ pi 2.)))))
  508.                                                t)
  509.                                               (  (= codeC 2)
  510.                                                  (cond (  (vl-position dataC '(114 82)) (Text_Rotation) (princ msgC))
  511.                                                        (  (vl-position dataC '(99 67)) (setq col (1+ (rem col 6))))
  512.                                                        (  (vl-position dataC '(118 86))
  513.                                                           (setq fooC (cond ((eq fooC '1+) '1-) ('1+))))
  514.                                                        (  (vl-position dataC '(79 111)) (Text_Offset)  (princ msgC))
  515.                                                        (  (vl-position dataC '(83 115)) (Text_Stretch) (princ msgC))
  516.                                                        (  (vl-position dataC '(13 32)) nil)
  517.                                                        (  (vl-position dataC '(69 101)) (eval msg) nil)
  518.                                                        (t )))
  519.                                               (  (and (= codeC 3) (listp dataC)) nil)
  520.                                               (  (= codeC 25) nil)
  521.                                               (t ))))
  522.                                     
  523.                                     (cond ((vl-position dataC '(69 101))))) t))
  524.               
  525.                              (t )))
  526.                    (  (= 25 code) nil)
  527.                    (  (and (= 3 code) (listp data)) nil)
  528.                    (t ))))
  529.          (vla-EndUndoMark doc))
  530.        (princ "\nNo Alignment Point Specified."))))
  531. (redraw)
  532. (princ))
  533. (vl-load-com)
  534. (princ "\n:: TxAlign.lsp | Version 1.6 | © Lee Mac 2009 www.lee-mac.com ::")
  535. (princ "\n:: Type "TxAlign" to Invoke ::")
  536. (princ)
  537. ;;-------------------------------------------------------------------------------;;
  538. ;;                                 End of File                                   ;;
  539. ;;-------------------------------------------------------------------------------;;
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 18:06:25 | 显示全部楼层
哇,谢谢你展示了这么棒的代码!您认为可以对其进行编辑,以便它也可以与aecc曲面高程标签一起使用吗?
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
475
发表于 2022-7-5 18:18:19 | 显示全部楼层
我的朋友将不得不被编码专家(双关语)审视:震惊:
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 18:25:56 | 显示全部楼层
也许张贴一个。我可以看一看。
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 18:31:45 | 显示全部楼层
你有civil 3d吗?因为我知道物体不能正确进入。非常感谢你的帮助!
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
475
发表于 2022-7-5 18:37:55 | 显示全部楼层
不幸的是,我没有。我在2014年和2015年与ACAD合作。希望你最终能找到答案。
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 18:47:35 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 04:38 , Processed in 0.591405 second(s), 81 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表