找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 627|回复: 2

[原创]:匹配字高 --- xdapi & Vlisp 方式对照

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-4-6 11:38:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;;                                                                         ;;
;; 今后将陆续提供一些程序的讲解,主要以本人所写的程序为主(晓东工具箱中的程;;
;; 序尽可能提供 api 与 Vlisp 对照方式。希望这种方式可以给大家学习lisp以更大;;
;; 的帮助,而不仅仅是把源码贴上来。同时希望有时间和愿意为论坛作些奉献的朋友;;
;; 参与到源码讲解中来,可以是自己的程序,也可以用搜集来的程序,讲讲思路,中;;
;; 间有什么技巧,即授人以鱼同时也授人以渔。程序不论难易,只要你有心就够了。;;
;;                                                                         ;;

[PHP]
;; 匹配字高 --- xdapi & Vlisp 方式对照
;;=========================================================================;;
;;                                                                         ;;
;;   本程序仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊用  ;;
;;   途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认。          ;;
;;                                                                         ;;
;;                      晓东家园 [www .xdcad.net] 作者: eachy 2004.04.06   ;;
;;                                                                         ;;
;;                                                      eachy @ xdcad.net    ;;
;;=========================================================================;;
;;                                                                         ;;
;; 以下程序为本人为晓东工具箱中所写的一个程序,程序中使用的是XDAPI,这里   ;;
;; 用Vlisp的方式写出来,大家可以对比着理解学习 xdapi 和 Vlisp/Lisp         ;;
;;                                                                         ;;
;; xdrx_entsel 功能Lisp类似方式参见论坛相关帖子                            ;;
;;                                                                         ;;
;; ea:string_tok 功能为字符串拆分,参见论坛以前帖子                        ;;
;;                                                                         ;;
;; xdrx_begin xdrx_end Lisp类似方式参加论坛  ea:begin ea:end 相关帖子      ;;
;;                                                                         ;;
;; ea:clearset 清除Acitve选择集 Item BUG,参见论坛相关帖子                 ;;
;;                                                                         ;;
;; 相关讨论建议请访问 晓东CAD家园   http :// www .xdcad .net[/url]                   ;;
;;                                                                         ;;
;;-------------------------------------------------------------------------;;
;; 功能:匹配字高,使某一高度范围内文字统一修改至指定高度                  ;;
;;-------------------------------------------------------------------------;;
;;                                                                         ;;
;;         *****转贴或修改请保持以上完整信息*****                          ;;
;;                                                                         ;;
;;=========================================================================;;
;|
本程序重点是构造字高的选择集,

技巧:

1 在 if 条件中 用 or 构造不同的选项条件

2 程序结构上对 activeselectionset 的应用
|;
(defun c:ematch_txth (/                tf          e            #txth
                      #filter_txth          #filter   #string   ss
                      obj        thisdrawing
                     )
  (princ "\n\t欢迎使用 晓东家园 [www .xdcad .net] CAD辅助工具!")
  (ea:clearset)
  (if (or (setq e (entsel "\n选择源文字确定高度<回车输入高度>: "));双重选项
          (setq #txth (getreal "\n输入文字高度: "))
      )
    (progn
      (setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
      (vla-startundomark thisdrawing)        ;xdrx_begin
      (if e
        (progn
          (setq obj (vlax-ename->vla-object (car e)))
          (setq #txth (vla-get-height obj)) ;xdrx_getentdxf
        )
      )
      (setq tf t)
      (while tf
        (if (or
              (wcmatch (setq #filter_txth
                              (getstring "\n输入字高或字高范围<用逗号隔开>: ")
                       )
                       "*`,*"
              )                                ;获取字高范围
              (numberp (read #filter_txth)) ;检验是否是数字
            )
          (progn
            (setq #string (ea:string_tok #filter_txth ","));xdrx_string_tok
            (setq #filter (if (numberp (read #filter_txth))
                            (progn
                              (list '(0 . "*text")
                                    (cons 40 (read #filter_txth))
                              )
                            )
                            (progn
                              (list '(-4 . "<and")
                                    '(0 . "*text")
                                    '(-4 . ">=")
                                    (cons 40 (read (car #string)))
                                    '(-4 . "<=")
                                    (cons 40 (read (last #string)))
                                    '(-4 . "and>")
                              )
                            )
                          )
            )                                ;构造过滤表
            (princ "\n选择目标文字<回车全选>....")
            (if        (not (setq ss (ssget #filter)))
              (setq ss (ssget "x" #filter))
            )
            ;;以上部分还可以这样
            ;;(princ "\n选择目标文字[All - 全选]....")
            ;; if (ssget #filter)
            ;; 这样可以省去 ss 变量,当然如果用到删除命令还是保留 ss 好
            ;; 在循环内采用 vla-delete 还不如 earse ss 高效
            (if        ss                        ;还是判断一下保险
              (vlax-for        i (vla-get-activeselectionset thisdrawing);xdrx_setsstodb
                (vla-put-height i #txth) ;xdrx_modent
              )
            )
            (setq tf nil)
          )
          (princ "\n\t输入间隔符错误或非数字,重新输入!!!")
        )
      )
      (vla-endundomark thisdrawing)        ;xdrx_end
    )
    (setq tf nil)
  )
  (princ)
)
(princ "\n\t*欢迎使用 晓东家园 [www .xdcad .net] CAD辅助工具*")
(princ "\n\t命令: Ematch_txth 功能: 匹配字高   作者:  eachy")
(princ)

[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-6 16:28:32 | 显示全部楼层
建议(getreal "\n输入文字高度: ")用 getdist
(numberp (read #filter_txth)) ;检验是否是数字 建议用 (distof (#filter_txth))
(if    (not (setq ss (ssget #filter)))
          (setq ss (ssget "x" #filter))
        )
还可以用(or (setq ss (ssget #filter)(setq ss (ssget "x" #filter))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-7 13:39:57 | 显示全部楼层
取数值用这个也行
(initget 6)(setq h(getreal"\n输入文字高度: "))拒绝负值或零
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 05:26 , Processed in 0.165355 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表