一点相对于另一点
在这个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)
)
)
)
) 从VL中可以得到的一个信息是“Vla get Insertionpoint txt”,然后只需使用极坐标来计算下一个文本点。 哇,伙计!谢谢那太棒了!
;INSERT STREET NAME & R.O.W.
(DEFUN C:STR ()
(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 RWO (* DS 0.175))
(setq pt1 (getpoint "\nPick Insertion Point: "))
(SETQ PT2 (polar PT1 (DTR 270.0) RWO))
(setq sn (getstring t "\nType the Street Name: "))
(setq sr (getstring t "\nType the Right Of Way Enter V 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" "_NON" PT2 "J" "BC" "S" "STANDARD" "H" RHS "W" RWTW sRW "")
(SETVAR "CECOLOR" "BYLAYER")
(COMMAND "CLAYER" CL)
(command ".osnap" "NOD,end,INT,CEN,mid")
(setq OldTxt "V' 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)
)
)
)
) 只是一个建议,你的方法适用于OSNAP真的没关系
.
(setvar "osmode" 0) ; no snaps
(setvar "osmode" 47) ; (command ".osnap" "NOD,end,INT,CEN,mid")
;just set osnaps then OSMODE will give number
;also
(setq oldsnap (getvar "osmode"))
(setvar "osmode" oldsnap)
页:
[1]