AutoLISP文字大小写转换

本文介绍了一个用于AutoCAD的AutoLISP程序,该程序可以将选定的单行文字对象的首字母转换为大写,其余字母转换为小写。此功能适用于AutoCAD中的文字编辑任务。

AutoLISP文字大小写转换,将首个字母转换成大写其余转换成小写,代码如下。

(defun c:test()
  (prompt "\n选取文字:")
  (setq ss (ssget))
  (setq i 0)
  (repeat (sslength ss)
    (setq ssn (ssname ss i))
    (setq ssdata (entget ssn))
    (setq sstyp (cdr (assoc 0 ssdata)))
    (if (= sstyp "TEXT")
      (progn
    (setq old_txt (assoc 1 ssdata))
    (setq txt (cdr old_txt))
    (chktxt)
    (setq new_txt (cons 1 pp))
    (setq ssdata (subst new_txt old_txt ssdata))
    (entmod ssdata)
    )
      )
    (setq i (1+ i))
    )
  )
(defun chktxt()
  (setq p "" pp "" n 1 key nil)
  (repeat (strlen txt)
    (setq p (substr txt n 1))
    (if (= n 1)
      (setq  key t)
      (if (= pk " ") (setq key t) (setq key nil))
      )
    (if (= key nil)
      (setq pp (strcat pp (strcase p t)))
      (setq pp (strcat pp (strcase p)))
      )
    (setq n (1+ n))
    )
  )
(princ "\n------>>TEST<<------")
(prin1)

代码完。

只能对单行文字进行转换。

数字转成人民币大写代码 Public Function GetChinaNum(otherNum As Double, Optional isRMB As Boolean, Optional numOption As Boolean, Optional dotNum As Integer) As String On Error Resume Next num = Trim(Str(Int(otherNum))) If isRMB Then numwei = "拾佰仟万拾佰仟亿拾佰仟" numshu = "零壹贰叁肆伍陆柒捌玖拾" Else numwei = "十百千万十百千亿十百千" numshu = "零一二三四五六七八九十" End If If otherNum < 20 And otherNum >= 10 Then num = Right(num, 1) GetChinaNum = Left(numwei, 1) End If For i = 1 To Len(num) bstr = Mid(num, i, 1) If numOption Then GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) Else GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) If bstr = "0" Then If Mid(numwei, Len(num) - i, 1) = "万" Or Mid(numwei, Len(num) - i, 1) = "亿" Then Do While Right(GetChinaNum, 1) = "零" GetChinaNum = Left(GetChinaNum, Len(GetChinaNum) - 1) Loop GetChinaNum = GetChinaNum + Mid(numwei, Len(num) - i, 1) End If Else GetChinaNum = GetChinaNum + Mid(numwei, Len(num) - i, 1) End If GetChinaNum = Replace(GetChinaNum, "零零", "零") End If Next i If numOption = False Then Do While Right(GetChinaNum, 1) = "零" GetChinaNum = Left(GetChinaNum, Len(GetChinaNum) - 1) Loop End If If isRMB Then numrmb = "元角分" GetChinaNum = GetChinaNum + Mid(numrmb, 1, 1) If Val(num) <> otherNum Then num = Trim(Str(Round(otherNum - Val(num), 2))) For i = 2 To Len(num) bstr = Mid(num, i, 1) GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) + Mid(numrmb, i, 1) Next i Else GetChinaNum = GetChinaNum + "整" End If Else If Val(num) <> otherNum Then If dotNum = 0 Then dotNum = 4 num = Trim(CStr(Round(otherNum - Val(num), dotNum))) If GetChinaNum = "" Then GetChinaNum = "零" GetChinaNum = GetChinaNum + "点" For i = 2 To Len(num) bstr = Mid(num, i, 1) GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) Next i End If End If End Function
### 使用 Lisp 中的 MTEXT 指令实现文字输入 在 AutoLISP 环境下,`MTEXT` 是一种强大的工具,可以创建多行文字对象。为了通过编程的方式控制 `MTEXT` 的行为,可以通过 `(command)` 函数发送命令及其参数到 AutoCAD 的命令行接口。 以下是具体的实现方法: #### 创建基本的 MTEXT 对象 下面是一段简单的代码示例,展示如何使用 `MTEXT` 命令插入一个多行文字对象: ```lisp (defun c:create-mtext () ;; 定义插入点和文字内容 (setq insert-point '(10.0 10.0)) ; 插入点坐标 (setq text-height 2.5) ; 文字高度 (setq content "这是一个测试\n多行文字。\n你可以在这里写更多行。") ;; 开始 MTEXT 命令 (command "-MTEXT") ; 调用增强版 MTEXT 命令 (command "P" ; 选择 P(Point)作为起点模式 (rtos (car insert-point) 2 4) "," (rtos (cadr insert-point) 2 4) "" ) ; 设置插入点 (command "") ; 默认宽度(无限制) (command content "") ; 输入文字内容并结束编辑 ) ``` 在这段代码中: - `-MTEXT` 表示调用了增强版本的 `MTEXT` 命令。 - `"P"` 参数指定了以单一点的形式定义矩形区域的一角。 - `(rtos ...)` 函数用于将浮点数转换成适合命令行接收的小数字符串形式[^1]。 - 最后的空字符串 `""` 标志着命令的终止。 #### 修改字体样式 当需要改变新创建的多行文字对象的字体时,可以直接在其属性层面操作。然而需要注意的是,对于普通的单行文字而言,这种方式有效;但对于真正的多行文字(即由 `MTEXT` 命令生成的对象),仅能间接影响其外观而不能直接更改底层字体文件名[^2]。 如果确实希望调整这些高级特性,则建议采用 ObjectARX 或 .NET API 等更深层次的技术手段来获取完全掌控权。不过,在纯 LISP 层面上也可以尝试如下技巧: ```lisp (defun c:set-font-style-for-selected-texts (font-name / ss i ent) (if (and font-name (/= "" font-name)) (progn (setq ss (ssget '((0 . "MTEXT")))) ; 获取当前文档内的所有 MTEXT 实体 (repeat (setq i (sslength ss)) (setq ent (entget (ssname ss (setq i (1- i))))) (cond ((assoc 7 ename) ; 如果存在 FONT 文件路径字段... (subst (cons 7 font-name) (assoc 7 ent) ent))) ; 替换为目标字体名称 ) (entmod ent) ; 更新实体数据结构 ) ) ) ) ``` 该函数遍历选定集中的每一个成员,并试图将其内部存储的标准字体描述符替换成新的值[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值