乐筑天下

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

[编程交流] 选择文字比例

[复制链接]

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:43:07 | 显示全部楼层 |阅读模式
你好
 
我一直在试着完成一个lisp,它告诉我选择我想要键入文本的比例。
所以,如果我选择以特定的比例键入文本(dtext),我会得到一定的高度。
 
当我运行命令时,我得到“nil”。
 
怎么了?
 
这能以其他方式完成吗?也许有一个更方便用户使用的弹出列表,在这个弹出列表中有不同的比例。
 
 
这是lisp:
如何添加用户正在选择的比例因子ie 1:12
新层应适用于用户选择的比例A-----T1-----X
是否完成了:
(setq TextScale(*3.2斯卡拉))
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 11:51:25 | 显示全部楼层
嗯,我想首先要做的事。
 
  1. (setq skala (getkword "\nChoose scale [1/2/10/20/50/100/200/400/500/+500]: "))
  2. (cond
  3.   ((= scale "1") (setq new_layer "A-------T1-------A" new_txtsize 3.2))
  4.   ((= scale "2") (setq new_layer "A-------T1-------J" new_txtsize 6.4))
  5.   ((= scale "5") (setq new_layer "A-------T1-------J" new_txtsize 16.0))
  6.   ((= scale "10") (setq new_layer "A-------T1-------C" new_txtsize 32.0))
  7.   ((= scale "20") (setq new_layer "A-------T1-------D" new_txtsize 64.0))
  8.   ((= scale "50") (setq new_layer "A-------T1-------E" new_txtsize 175.0))
  9.   ((= scale "100") (setq new_layerr "A-------T1-------F" new_txtsize 350.0))
  10.   ((= scale "200") (setq new_layerr "A-------T1-------G" new_txtsize 700.0))
  11.   ((= scale "400") (setq new_layer "A-------T1-------K" new_txtsize 1400.0))
  12.   ((= scale "500") (setq new_layer "A-------T1-------H" new_txtsize 1750.0))
  13.   ((= scale "+500") (setq new_layer "A-------T1-------X" new_txtsize 3500.0))
  14.   )

 
您正在设置“skala”并检查“scale”
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:55:18 | 显示全部楼层
而且
 
[列表]
  • 您没有在任何地方设置层
  • 您正在使用(命令“_.dtext”,这可能非常不可预测,我会使用entmake或vla addtext。
  • 所有的initdia和filedia是什么?
    [/列表]
  • 回复

    使用道具 举报

    31

    主题

    107

    帖子

    76

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    155
    发表于 2022-7-6 11:57:32 | 显示全部楼层

    那只是我想做点什么
    但我很欣赏小费
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:05:13 | 显示全部楼层
    看看你是否可以从这里得到一些提示:
     
    1. (defun c:test (/ Make_Text pt new_layer new_txtsize)
    2. (defun Make_Text (pt str hgt lay)
    3.    (entmakex (list (cons 0 "TEXT") (cons 8  lay) (cons 40 hgt)
    4.                    (cons 10 pt)    (cons 1  str))))
    5. (setq *scl* (cond (*scl*) ("10")))
    6. (initget "1 2 10 20 50 100 200 400 500 +500")
    7. (setq *scl* (cond ((getkword (strcat "\nChoose Scale [1/2/10/20/50/100/200/400/500/+500] <" *scl* "> : ")))
    8.                    (*scl*)))
    9. (if (setq pt (getpoint "\nSelect Point: "))
    10.    (progn
    11.      
    12.      (cond ((= *scl* "1")    (setq new_layer "A-------T1-------A" new_txtsize 3.2))
    13.            ((= *scl* "2")    (setq new_layer "A-------T1-------J" new_txtsize 6.4))
    14.            ((= *scl* "5")    (setq new_layer "A-------T1-------J" new_txtsize 16.0))
    15.            ((= *scl* "10")   (setq new_layer "A-------T1-------C" new_txtsize 32.0))
    16.            ((= *scl* "20")   (setq new_layer "A-------T1-------D" new_txtsize 64.0))
    17.            ((= *scl* "50")   (setq new_layer "A-------T1-------E" new_txtsize 175.0))
    18.            ((= *scl* "100")  (setq new_layer "A-------T1-------F" new_txtsize 350.0))
    19.            ((= *scl* "200")  (setq new_layer "A-------T1-------G" new_txtsize 700.0))
    20.            ((= *scl* "400")  (setq new_layer "A-------T1-------K" new_txtsize 1400.0))
    21.            ((= *scl* "500")  (setq new_layer "A-------T1-------H" new_txtsize 1750.0))
    22.            ((= *scl* "+500") (setq new_layer "A-------T1-------X" new_txtsize 3500.0)))
    23.      
    24.      (Make_Text pt "This is a String" new_txtsize new_layer)))
    25. (princ))
    回复

    使用道具 举报

    31

    主题

    107

    帖子

    76

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    155
    发表于 2022-7-6 12:08:10 | 显示全部楼层

     
    Thanx。。。我想出了一个加载弹出菜单的想法。
     
    这是修改后的lisp,请参见下文。尽管如此,当我从弹出菜单中选择比例时,我无法使其工作。如果我选择比例1:5,它实际上可以工作,但它选择了错误的文本高度。
    为此,您需要安装DOSLib。
    任何人
     
    1. ;if layout, stop the lisp and execute textheight 3.2mm
    2.     (defun dtexttilemode1 ()
    3.    (if (null (tblsearch "LAYER" "A-------T1-------A"))
    4.    (command "_LAYER" "_N" "A-------T1-------A" "_C" 1 "A-------T1-------A" "")
    5. )
    6.   (setvar "clayer" "A-------T1-------A")
    7.      (command "_dtext" pt 3.2 "" "")
    8. (setvar "clayer" oldlay)
    9.   )
    10. ;popupscale, choose which scale
    11. (defun popupskaladtext (/ scl x)
    12. (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" )
    13.          
    14.    scl nil
    15.    )
    16.    (while (or (not scl) (= scl 0))
    17.    (setq scl (dos_popupmenu x))
    18. )
    19. )
    20. ;main function
    21. (defun c:TEXT (/ Make_Text pt new_layer new_txtsize oldlay scl x)
    22. (setq oldlay (getvar "clayer"))
    23. (setq pt (getpoint "\nChoose point: "))
    24.    
    25. (if (= (getvar "tilemode") 0)
    26. (dtexttilemode1)
    27.      
    28.    (progn
    29.      (popupskaladtext)
    30.      
    31.      (cond ((= scl 1)    (setq new_layer "A-------T1-------A" new_txtsize 3.2))
    32.            ((= scl 2)    (setq new_layer "A-------T1-------J" new_txtsize 6.4))
    33.            ((= scl 5)    (setq new_layer "A-------T1-------B" new_txtsize 16.0))
    34.            ((= scl 10)   (setq new_layer "A-------T1-------C" new_txtsize 32.0))
    35.            ((= scl 20)   (setq new_layer "A-------T1-------D" new_txtsize 64.0))
    36.            ((= scl 50)   (setq new_layer "A-------T1-------E" new_txtsize 160.0))
    37.            ((= scl 100)  (setq new_layer "A-------T1-------F" new_txtsize 320.0))
    38.            ((= scl 200)  (setq new_layer "A-------T1-------G" new_txtsize 640.0))
    39.            ((= scl 400)  (setq new_layer "A-------T1-------K" new_txtsize 1280.0))
    40.            ((= scl 500)  (setq new_layer "A-------T1-------H" new_txtsize 1600.0))
    41.        ((= scl 1000) (setq new_layer "A-------T1-------X" new_txtsize 3200.0))
    42.        ((= scl 2000) (setq new_layer "A-------T1------X2" new_txtsize 6400.0)))
    43.      
    44. (if (null (tblsearch "LAYER" new_layer))
    45.    (command "_LAYER" "_N" new_layer "_C" 1 new_layer "")
    46. )
    47.   (setvar "clayer" new_layer)
    48.      (command "_dtext" pt new_txtsize "" "")
    49. (setvar "clayer" oldlay)))
    50. (princ)
    51. )

     
    隐马尔可夫模型。。。
    可能我需要将“1:1”等转换为字符串?
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:14:20 | 显示全部楼层
     
    看看我是如何创建示例中的文本的。
    回复

    使用道具 举报

    31

    主题

    107

    帖子

    76

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    155
    发表于 2022-7-6 12:16:40 | 显示全部楼层
    我认为这不是问题所在。
     
    我现在正在试验lisp如何从列表x中读取比例。
     
    所以我补充说
     
    1. setq scldtext (substr scl 3))

     
    我希望这意味着,从列表中,比例写为1,2,50,100等,没有“1:”。
     
    但我还是有点搞错了:
     
    1. (defun popupskaladtext ()
    2. (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" "" )
    3.          
    4.    scl nil
    5.    )
    6.      (while
    7.    (or (not scl)
    8.        (= 0 scl)
    9.    ) ;_ or
    10.     (setq scl (dos_popupmenu x))
    11. ) ;_ while
    12. (setq scldtext (substr scl 3))
    13. ); end defun

     
    这就是条件:
    1. (cond ((= scldtext "1")       (setq new_layer "A-------T1-------A" new_txtsize 3.2))
    2.            ((= scldtext "2")    (setq new_layer "A-------T1-------J" new_txtsize 6.4))
    3.            ((= scldtext "5")    (setq new_layer "A-------T1-------B" new_txtsize 16.0))
    4.            ((= scldtext "10")   (setq new_layer "A-------T1-------C" new_txtsize 32.0))
    5.            ((= scldtext "20")   (setq new_layer "A-------T1-------D" new_txtsize 64.0))
    6.            ((= scldtext "50")   (setq new_layer "A-------T1-------E" new_txtsize 160.0))
    7.            ((= scldtext "100")  (setq new_layer "A-------T1-------F" new_txtsize 320.0))
    8.            ((= scldtext "200")  (setq new_layer "A-------T1-------G" new_txtsize 640.0))
    9.            ((= scldtext "400")  (setq new_layer "A-------T1-------K" new_txtsize 1280.0))
    10.            ((= scldtext "500")  (setq new_layer "A-------T1-------H" new_txtsize 1600.0))
    11.        ((= scldtext "1000") (setq new_layer "A-------T1-------X" new_txtsize 3200.0))
    12.        ((= scldtext "2000") (setq new_layer "A-------T1------X2" new_txtsize 6400.0)))

     
    尽管这是我在选择比例1:10时遇到的错误
    错误:错误的参数类型:stringp 3
    选择比例1:2将导致以下错误消息:
    错误:错误的参数类型:stringp 1
     
    等等等等。。。
     
    我不知道substr是否正常。。。
    回复

    使用道具 举报

    31

    主题

    107

    帖子

    76

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    155
    发表于 2022-7-6 12:22:29 | 显示全部楼层
    我用这个简单的东西做到了
     
    1. ;;;DESCRITION
    2. ;if layout, make the lisp write with the layer for 1:1
    3.     (defun dtexttilemode1 ()
    4.    (if (null (tblsearch "LAYER" "A-------T1-------A"))
    5.    (command "_LAYER" "_N" "A-------T1-------A" "_C" 1 "A-------T1-------A" "")
    6. )
    7.   (setvar "clayer" "A-------T1-------A")
    8.      (command "_dtext" pt 3.2 "" "")
    9. (setvar "clayer" oldlay)
    10.   )
    11. ;popupscale, choose which scale
    12. (defun Popupskala1 ()
    13. (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" "" )))
    14. )
    15. ;main function
    16. (defun c:test (/ pt new_layer new_txtsize oldlay scldtext scl_Text skala)
    17. (setq oldlay (getvar "clayer"))
    18. (setq pt (getpoint "\nVälj startpunkt: "))
    19.    
    20. (if (= (getvar "tilemode") 0)
    21. (dtexttilemode1)
    22.      
    23.    (progn
    24.      (Popupskala1)
    25.      ;(setq scl_Text (atoi skala))
    26.      
    27.      (cond ((= popupskaladtext 0)    (setq new_layer "A-------T1-------A" new_txtsize 3.2))
    28.            ((= popupskaladtext 1)    (setq new_layer "A-------T1-------J" new_txtsize 6.4))
    29.            ((= popupskaladtext 2)    (setq new_layer "A-------T1-------B" new_txtsize 16.0))
    30.            ((= popupskaladtext 3)   (setq new_layer "A-------T1-------C" new_txtsize 32.0))
    31.            ((= popupskaladtext 4)   (setq new_layer "A-------T1-------D" new_txtsize 64.0))
    32.            ((= popupskaladtext 5)   (setq new_layer "A-------T1-------E" new_txtsize 160.0))
    33.            ((= popupskaladtext 6)  (setq new_layer "A-------T1-------F" new_txtsize 320.0))
    34.            ((= popupskaladtext 7)  (setq new_layer "A-------T1-------G" new_txtsize 640.0))
    35.            ((= popupskaladtext   (setq new_layer "A-------T1-------K" new_txtsize 1280.0))
    36.            ((= popupskaladtext 9)  (setq new_layer "A-------T1-------H" new_txtsize 1600.0))
    37.        ((= popupskaladtext 10) (setq new_layer "A-------T1-------X" new_txtsize 3200.0))
    38.        ((= popupskaladtext 11) (setq new_layer "A-------T1------X2" new_txtsize 6400.0)))
    39.      
    40. (if (null (tblsearch "LAYER" new_layer))
    41.    (command "_LAYER" "_N" new_layer "_C" 1 new_layer "")
    42. )
    43.   (setvar "clayer" new_layer)
    44.      (command "_dtext" pt new_txtsize "" "")
    45. (setvar "clayer" oldlay)))
    46. (princ)
    47. )
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:27:59 | 显示全部楼层
     
    可能不是,但这是一种比使用_x更好的方法。dtext创建文本。众所周知,在不同的图形上使用dtext时不可靠。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-5 10:45 , Processed in 0.401661 second(s), 72 queries .

    © 2020-2025 乐筑天下

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