在这个lisp中,我试图替换4个块,它们几乎做相同的事情。我想让用户点击他们想要用作文本中心的点,让代码计算出一定的距离,比如说,下一行文本的Y轴上的3.5。
- ;INSERT STREET NAME & R.O.W.
- (DEFUN C:STRN ()
- (SETQ CL (GETVAR "CLAYER"))
- (command ".osnap" "NONE")
- (setq DS (getvar 'dimscale))
- (SETQ SNTW (* DS 3))
- (SETQ RWTW (* DS 1.5))
- (SETQ SHS (* DS 0.13))
- (setq pt1 (getpoint "\nPick insertion point for Street Name : "))
- (setq sn (getstring t "\nType the Street Name: "))
- (setq sr (getstring t "\nType the Right Of Way Enter VW for Variable Width or P for Public: "))
- (SETQ SRW (STRCAT SR "' R.O.W."))
- (COMMAND "LAYER" "S" "STREET_NAME" "")
- (COMMAND "MTEXT" "_non" pt1 "J" "BC" "S" "STANDARD" "H" SHS "W" SNTW sn "")
- (SETQ RHS (* DS 0.08))
- (SETVAR "CECOLOR" "140")
- (COMMAND "MTEXT" PAUSE "J" "BC" "S" "STANDARD" "H" RHS "W" RWTW sRW "")
- (SETVAR "CECOLOR" "BYLAYER")
- (COMMAND "CLAYER" CL)
- (command ".osnap" "NOD,end,INT,CEN,mid")
- (setq OldTxt "VW' R.O.W.")
- (SETQ vwrw (STRCAT "VARIABLE WIDTH R.O.W."))
- (setq ss (ssget "x" '((0 . "TEXT,MTEXT"))))
-
- (setq i (sslength ss))
- (while (not (minusp (setq i (1- i))))
- (setq oText (vlax-ename->vla-object (ssname ss i)))
- (setq Txt (vlax-get-property oText 'TextString))
-
- (if (vl-string-search OldTxt txt)
- (progn
- (setq newChg (vl-string-subst VWRW OldTxt txt))
- (vlax-put-property oText 'TextString newchg)
- (vlax-invoke-method oText 'Update)
- )
- )
- )
- (setq P "P' R.O.W.")
- (SETQ PRW (STRCAT "PUBLIC R.O.W."))
- (setq ss (ssget "x" '((0 . "TEXT,MTEXT"))))
-
- (setq i (sslength ss))
- (while (not (minusp (setq i (1- i))))
- (setq oText (vlax-ename->vla-object (ssname ss i)))
- (setq Txt (vlax-get-property oText 'TextString))
-
- (if (vl-string-search P txt)
- (progn
- (setq newChg (vl-string-subst PRW P txt))
- (vlax-put-property oText 'TextString newchg)
- (vlax-invoke-method oText 'Update)
- )
- )
- )
- )
|