选择文字比例
你好我一直在试着完成一个lisp,它告诉我选择我想要键入文本的比例。
所以,如果我选择以特定的比例键入文本(dtext),我会得到一定的高度。
当我运行命令时,我得到“nil”。
怎么了?
这能以其他方式完成吗?也许有一个更方便用户使用的弹出列表,在这个弹出列表中有不同的比例。
这是lisp:
如何添加用户正在选择的比例因子ie 1:12
新层应适用于用户选择的比例A-----T1-----X
是否完成了:
(setq TextScale(*3.2斯卡拉)) 嗯,我想首先要做的事。
(setq skala (getkword "\nChoose scale : "))
(cond
((= scale "1") (setq new_layer "A-------T1-------A" new_txtsize 3.2))
((= scale "2") (setq new_layer "A-------T1-------J" new_txtsize 6.4))
((= scale "5") (setq new_layer "A-------T1-------J" new_txtsize 16.0))
((= scale "10") (setq new_layer "A-------T1-------C" new_txtsize 32.0))
((= scale "20") (setq new_layer "A-------T1-------D" new_txtsize 64.0))
((= scale "50") (setq new_layer "A-------T1-------E" new_txtsize 175.0))
((= scale "100") (setq new_layerr "A-------T1-------F" new_txtsize 350.0))
((= scale "200") (setq new_layerr "A-------T1-------G" new_txtsize 700.0))
((= scale "400") (setq new_layer "A-------T1-------K" new_txtsize 1400.0))
((= scale "500") (setq new_layer "A-------T1-------H" new_txtsize 1750.0))
((= scale "+500") (setq new_layer "A-------T1-------X" new_txtsize 3500.0))
)
您正在设置“skala”并检查“scale” 而且
[列表]
[*]您没有在任何地方设置层
[*]您正在使用(命令“_.dtext”,这可能非常不可预测,我会使用entmake或vla addtext。
[*]所有的initdia和filedia是什么?
[/列表] 好
那只是我想做点什么
但我很欣赏小费 看看你是否可以从这里得到一些提示:
(defun c:test (/ Make_Text pt new_layer new_txtsize)
(defun Make_Text (pt str hgt lay)
(entmakex (list (cons 0 "TEXT") (cons 8lay) (cons 40 hgt)
(cons 10 pt) (cons 1str))))
(setq *scl* (cond (*scl*) ("10")))
(initget "1 2 10 20 50 100 200 400 500 +500")
(setq *scl* (cond ((getkword (strcat "\nChoose Scale <" *scl* "> : ")))
(*scl*)))
(if (setq pt (getpoint "\nSelect Point: "))
(progn
(cond ((= *scl* "1") (setq new_layer "A-------T1-------A" new_txtsize 3.2))
((= *scl* "2") (setq new_layer "A-------T1-------J" new_txtsize 6.4))
((= *scl* "5") (setq new_layer "A-------T1-------J" new_txtsize 16.0))
((= *scl* "10") (setq new_layer "A-------T1-------C" new_txtsize 32.0))
((= *scl* "20") (setq new_layer "A-------T1-------D" new_txtsize 64.0))
((= *scl* "50") (setq new_layer "A-------T1-------E" new_txtsize 175.0))
((= *scl* "100")(setq new_layer "A-------T1-------F" new_txtsize 350.0))
((= *scl* "200")(setq new_layer "A-------T1-------G" new_txtsize 700.0))
((= *scl* "400")(setq new_layer "A-------T1-------K" new_txtsize 1400.0))
((= *scl* "500")(setq new_layer "A-------T1-------H" new_txtsize 1750.0))
((= *scl* "+500") (setq new_layer "A-------T1-------X" new_txtsize 3500.0)))
(Make_Text pt "This is a String" new_txtsize new_layer)))
(princ))
嘿
Thanx。。。我想出了一个加载弹出菜单的想法。
这是修改后的lisp,请参见下文。尽管如此,当我从弹出菜单中选择比例时,我无法使其工作。如果我选择比例1:5,它实际上可以工作,但它选择了错误的文本高度。
为此,您需要安装DOSLib。
任何人
;if layout, stop the lisp and execute textheight 3.2mm
(defun dtexttilemode1 ()
(if (null (tblsearch "LAYER" "A-------T1-------A"))
(command "_LAYER" "_N" "A-------T1-------A" "_C" 1 "A-------T1-------A" "")
)
(setvar "clayer" "A-------T1-------A")
(command "_dtext" pt 3.2 "" "")
(setvar "clayer" oldlay)
)
;popupscale, choose which scale
(defun popupskaladtext (/ scl x)
(setq x ( list "1:1" "1:2" "1:5" "1:10" "1:20" "1:50" "1:100" "1:200" "1:400" "1:500" "1:1000" "1:2000" )
scl nil
)
(while (or (not scl) (= scl 0))
(setq scl (dos_popupmenu x))
)
)
;main function
(defun c:TEXT (/ Make_Text pt new_layer new_txtsize oldlay scl x)
(setq oldlay (getvar "clayer"))
(setq pt (getpoint "\nChoose point: "))
(if (= (getvar "tilemode") 0)
(dtexttilemode1)
(progn
(popupskaladtext)
(cond ((= scl 1) (setq new_layer "A-------T1-------A" new_txtsize 3.2))
((= scl 2) (setq new_layer "A-------T1-------J" new_txtsize 6.4))
((= scl 5) (setq new_layer "A-------T1-------B" new_txtsize 16.0))
((= scl 10) (setq new_layer "A-------T1-------C" new_txtsize 32.0))
((= scl 20) (setq new_layer "A-------T1-------D" new_txtsize 64.0))
((= scl 50) (setq new_layer "A-------T1-------E" new_txtsize 160.0))
((= scl 100)(setq new_layer "A-------T1-------F" new_txtsize 320.0))
((= scl 200)(setq new_layer "A-------T1-------G" new_txtsize 640.0))
((= scl 400)(setq new_layer "A-------T1-------K" new_txtsize 1280.0))
((= scl 500)(setq new_layer "A-------T1-------H" new_txtsize 1600.0))
((= scl 1000) (setq new_layer "A-------T1-------X" new_txtsize 3200.0))
((= scl 2000) (setq new_layer "A-------T1------X2" new_txtsize 6400.0)))
(if (null (tblsearch "LAYER" new_layer))
(command "_LAYER" "_N" new_layer "_C" 1 new_layer "")
)
(setvar "clayer" new_layer)
(command "_dtext" pt new_txtsize "" "")
(setvar "clayer" oldlay)))
(princ)
)
隐马尔可夫模型。。。
可能我需要将“1:1”等转换为字符串?
看看我是如何创建示例中的文本的。 我认为这不是问题所在。
我现在正在试验lisp如何从列表x中读取比例。
所以我补充说
setq scldtext (substr scl 3))
我希望这意味着,从列表中,比例写为1,2,50,100等,没有“1:”。
但我还是有点搞错了:
(defun popupskaladtext ()
(setq x ( list "" "1:1" "1:2" "1:5" "1:10" "1:20" "1:50" "1:100" "1:200" "1:400" "1:500" "1:1000" "1:2000" "" )
scl nil
)
(while
(or (not scl)
(= 0 scl)
) ;_ or
(setq scl (dos_popupmenu x))
) ;_ while
(setq scldtext (substr scl 3))
); end defun
这就是条件:
(cond ((= scldtext "1") (setq new_layer "A-------T1-------A" new_txtsize 3.2))
((= scldtext "2") (setq new_layer "A-------T1-------J" new_txtsize 6.4))
((= scldtext "5") (setq new_layer "A-------T1-------B" new_txtsize 16.0))
((= scldtext "10") (setq new_layer "A-------T1-------C" new_txtsize 32.0))
((= scldtext "20") (setq new_layer "A-------T1-------D" new_txtsize 64.0))
((= scldtext "50") (setq new_layer "A-------T1-------E" new_txtsize 160.0))
((= scldtext "100")(setq new_layer "A-------T1-------F" new_txtsize 320.0))
((= scldtext "200")(setq new_layer "A-------T1-------G" new_txtsize 640.0))
((= scldtext "400")(setq new_layer "A-------T1-------K" new_txtsize 1280.0))
((= scldtext "500")(setq new_layer "A-------T1-------H" new_txtsize 1600.0))
((= scldtext "1000") (setq new_layer "A-------T1-------X" new_txtsize 3200.0))
((= scldtext "2000") (setq new_layer "A-------T1------X2" new_txtsize 6400.0)))
尽管这是我在选择比例1:10时遇到的错误
错误:错误的参数类型:stringp 3
选择比例1:2将导致以下错误消息:
错误:错误的参数类型:stringp 1
等等等等。。。
我不知道substr是否正常。。。 我用这个简单的东西做到了
;;;DESCRITION
;if layout, make the lisp write with the layer for 1:1
(defun dtexttilemode1 ()
(if (null (tblsearch "LAYER" "A-------T1-------A"))
(command "_LAYER" "_N" "A-------T1-------A" "_C" 1 "A-------T1-------A" "")
)
(setvar "clayer" "A-------T1-------A")
(command "_dtext" pt 3.2 "" "")
(setvar "clayer" oldlay)
)
;popupscale, choose which scale
(defun Popupskala1 ()
(setq popupskaladtext (dos_popupmenu '( "" "1:1" "1:2" "1:5" "1:10" "1:20" "1:50" "1:100" "1:200" "1:400" "1:500" "1:1000" "1:2000" "" )))
)
;main function
(defun c:test (/ pt new_layer new_txtsize oldlay scldtext scl_Text skala)
(setq oldlay (getvar "clayer"))
(setq pt (getpoint "\nVälj startpunkt: "))
(if (= (getvar "tilemode") 0)
(dtexttilemode1)
(progn
(Popupskala1)
;(setq scl_Text (atoi skala))
(cond ((= popupskaladtext 0) (setq new_layer "A-------T1-------A" new_txtsize 3.2))
((= popupskaladtext 1) (setq new_layer "A-------T1-------J" new_txtsize 6.4))
((= popupskaladtext 2) (setq new_layer "A-------T1-------B" new_txtsize 16.0))
((= popupskaladtext 3) (setq new_layer "A-------T1-------C" new_txtsize 32.0))
((= popupskaladtext 4) (setq new_layer "A-------T1-------D" new_txtsize 64.0))
((= popupskaladtext 5) (setq new_layer "A-------T1-------E" new_txtsize 160.0))
((= popupskaladtext 6)(setq new_layer "A-------T1-------F" new_txtsize 320.0))
((= popupskaladtext 7)(setq new_layer "A-------T1-------G" new_txtsize 640.0))
((= popupskaladtext (setq new_layer "A-------T1-------K" new_txtsize 1280.0))
((= popupskaladtext 9)(setq new_layer "A-------T1-------H" new_txtsize 1600.0))
((= popupskaladtext 10) (setq new_layer "A-------T1-------X" new_txtsize 3200.0))
((= popupskaladtext 11) (setq new_layer "A-------T1------X2" new_txtsize 6400.0)))
(if (null (tblsearch "LAYER" new_layer))
(command "_LAYER" "_N" new_layer "_C" 1 new_layer "")
)
(setvar "clayer" new_layer)
(command "_dtext" pt new_txtsize "" "")
(setvar "clayer" oldlay)))
(princ)
)
可能不是,但这是一种比使用_x更好的方法。dtext创建文本。众所周知,在不同的图形上使用dtext时不可靠。
页:
[1]
2