明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1451|回复: 6

[求助]!!!!!! 敬请 版主 帮忙改数字 !!!!!!

[复制链接]
发表于 2009-8-23 19:06:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-8-24 22:09:02 编辑

请版主帮忙改数字。
       下面这个程序是由网上收集,在此感谢原作者!
       该程序是用来生成剖面线的。用它生成的剖面线的编号为阿拉伯数字“1、2、3、4、5、6、7、8、9、10、11...”,需要改成罗马数字“Ⅰ  Ⅱ  Ⅲ  Ⅳ  Ⅴ  Ⅵ  Ⅶ  Ⅷ  Ⅸ  Ⅹ...”,其它内容不变。

                   自己不会弄,特在此敬请版主相助,谢谢!!

以下为原程序:

;;;
;;;  命令名:BGPMX
;;;
;;;  在平面图中布置剖面线
;;;
;;;  作者:凉开水
;;;
;;;  2005.05.21
;;;
;;;---------------------------------------------------------------------
;;;------画剖面端线及剖面编号子程序------------------
(defun dxbh ()
  (progn
    (setq a1  (angle pt2 pt1);;;起点方向
          pt6 (polar pt1 (+ a1 (/ PI 2)) (* x 3));;;端线第一点
          pt7 (polar pt1 (- a1 (/ PI 2)) (* x 3));;;端线第二点
          pt8 (polar pt1 a1 (* x 6));;;剖面编号位置
    )
    (command "pline" pt6 pt7 "");;;画剖面端线
    (command "text" "m" pt8 h1 0 n2);;;写剖面编号
    (setq a1  (angle pt3 pt4);;;终点方向
          pt6 (polar pt4 (+ a1 (/ PI 2)) (* x 3));;;端线第一点
          pt7 (polar pt4 (- a1 (/ PI 2)) (* x 3));;;端线第二点
          pt8 (polar pt4 a1 (* x 8));;;剖面编号位置
          n3  "'"
          n3  (strcat n2 n3);;;剖面编号
    )
    (command "pline" pt6 pt7 "");;;画剖面端线
    (command "text" "m" pt8 h1 0 n3);;;写剖面编号
    (setq n8 888);;;剖面循环控制
  )
)
;;;------画剖面端线及剖面编号子程序----------------
;;;
;;;---------------------------------------------------------------------
(defun c:BGPMX (/ oce1 oce2 oce3 oce4 oce5 x n1 h1 n8 n2 pt1 pt2 pt3 pt4
                pt5 pt6 pt7 pt8 a1 n3)

;;;系统变量
  (command "undo" "be")
  (setq oce1 (getvar "cmdecho");;;保存命令响应原变量值
 oce2 (getvar "OSNAPCOORD");;;保存坐标数据优先级原变量值
 oce3 (getvar "OSMODE");;;捕捉变量
        oce4 (getvar "ANGDIR");;;角度正方向
    oce5 (getvar "ANGBASE");;;基准角度
  )
  (setvar "cmdecho" 0);;;关闭命令响应
  (setvar "OSNAPCOORD" 1);;;坐标数据优先级设为:键盘输入替代对象捕捉设置
  (setvar "OSMODE" 7095);;;改变捕捉模式
  (setvar "ANGDIR" 0);;;角度正方向为逆时针
  (setvar "ANGBASE" 0);;;基准角度东方为0
;;;系统变量

  (if (= (Tblsearch "style" "BG_ST") nil)
    (command "-style" "BG_ST" "宋体" 0 0.8 0 "n" "n");;;文字样式
  )
  (command "textstyle" "BG_ST")
  (If (= (Tblsearch "layer" "剖面") nil)
    (command "-layer" "n" "剖面" "c" 1 "剖面" "s" "剖面" "");;;定义图层
  )
  (command "-layer" "c" 1 "剖面" "s" "剖面" "")
  (if (not (setq x (getreal "\n请输入比例<1>: ")))
    (setq x 1)
  )
  (if (not (setq n1 (getint "\n剖面起始号 <1>: ")))
    (setq n1 1)
  )
  (setq h1 (* x 4.5));;;剖面字高
  (command "pline" (list 0 0 0) "w" (* x 0.35) (* x 0.35) "");;;定义线宽

;;;画剖面线------
 (setq n8 888)
  (while (= n8 888)
    (setq n2 (itoa n1))
    (if (setq pt1 (getpoint "\n指定起点<退出> : "))
      (progn
 (command "pline")
 (command pt1)
 (if (setq pt2 (getpoint pt1 "\n指定下一点<退出> : "))
   (progn
     (command pt2)
     (if (setq pt3 (getpoint pt2 "\n指定下一点 : "))
       (progn
  (command pt3)
  (if (setq pt4 (getpoint pt3 "\n指定下一点 : "))
    (progn
      (command pt4)
      (while (setq pt5 (getpoint pt4 "\n指定下一点 : "))
        (command pt5)
        (setq pt3 pt4
       pt4 pt5
        )
      )
    )
  )
       )
     )
   )
 )
      (command "")
    )
  )
;;;画剖面线------

;;;画剖面端线及剖面编号-----
    (cond
      ((= pt1 nil) (setq n8 886));;;无控制点时,结束命令
      ((= pt2 nil) (setq n8 886));;;一个控制点时,结束命令
      ((= pt3 nil);;;两个控制点
       (progn
         (setq pt3 pt1 pt4 pt2)
         (dxbh)
       )
      )
      ((= pt4 nil);;;三个控制点
       (progn
         (setq pt4 pt3 pt3 pt2)
         (dxbh)
       )
      )
      ((= pt5 nil);;;四个及以上控制点
       (dxbh)
      )
    )
    (setq n1 (1+ n1));;;下一剖面编号
  )
;;;画剖面端线及剖面编号-----

;;;还原系统变量值
  (setvar "cmdecho" oce1);;;恢复命令响应
  (setvar "OSNAPCOORD" oce2);;;恢复坐标数据优先级设置
  (setvar "OSMODE" oce3);;;恢复捕捉模式
  (setvar "ANGDIR" oce4);;;恢复角度正方向
  (setvar "ANGBASE" oce5);;;恢复基准角度
;;;还原系统变量值

  (command "pline" (list 0 0 0) "w" 0 0 "");;;恢复0线宽
  (command "undo" "e")
  (princ)
)
;;;
;;;-----------------------------------------------------
;;;


 

本帖子中包含更多资源

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

x
 楼主| 发表于 2009-8-24 22:08:00 | 显示全部楼层
这个程序生成的剖面编号为阿拉伯数字,每次都要改成罗马数字,很不方便,特在此敬请版主给改改,先谢谢了!!!
发表于 2009-8-24 22:48:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-8-25 12:41:00 | 显示全部楼层
  1. ;功能:数字转换成罗马数字字符串
  2. ;条件:字串必须为数字,允许带1位且只带1位后缀
  3. ;贱人20090825
  4. (defun c:aa(/ ss  txt EndTxt tmp tmp2 tmp3 i Nerr
  5.               nArabicValue nOnes nThousands nFiveHundreds
  6.               nHundreds nFifties nTens nFives
  7.             )
  8.   (setvar "CMDECHO" 0)
  9.   (setq ss (ssget '((0 . "text"))))
  10.   (command "undo" "be")
  11.   (if ss  (progn
  12.     (setq i 0)
  13.     (setq Nerr 0)
  14.     (repeat (sslength ss)
  15.       (setq txt (cdr (assoc 1 (entget (ssname ss i)))))
  16.       
  17.       (if (and (= 'INT (type (read txt))) (/= (substr txt (strlen txt)) "'"))
  18.         (progn
  19.           (setq nArabicValue (atoi txt))
  20.           (setq EndTXT "")
  21.         )
  22.         (if (= 'INT (type (read (substr txt 1 (- (strlen txt) 1))))  )
  23.           (progn
  24.             (setq nArabicValue (atoi  (substr txt 1 (- (strlen txt) 1))))
  25.             (setq EndTXT  (substr txt (strlen txt)) )
  26.           )
  27.           (progn
  28.             (setq nArabicValue nil)
  29.             (setq Nerr (+ 1 Nerr))
  30.           )
  31.         )
  32.       )
  33.       (if nArabicValue
  34.       (progn
  35.       (setq
  36.             ;按单位(1000-M,500-D,100-C,50-L,10-X,5-V,1-I)分离
  37.             nOnes nArabicValue
  38.             nThousands (/ nOnes  1000)
  39.             nOnes (- nOnes  (* nThousands 1000))
  40.             nFiveHundreds (/ nOnes  500)
  41.             nOnes (- nOnes  (* nFiveHundreds 500))
  42.             nHundreds (/ nOnes  100)
  43.             nOnes (- nOnes  (* nHundreds 100))
  44.             nFifties (/ nOnes  50)
  45.             nOnes (- nOnes  (* nFifties 50))
  46.             nTens (/ nOnes  10)
  47.             nOnes (- nOnes  (* nTens 10))
  48.             nFives (/ nOnes  5)
  49.             nOnes (- nOnes  (* nFives 5))
  50.       )
  51.       ;先按1千数量生成多个M
  52.       (setq tmp "" tmp2 "" tmp3 "")
  53.       (repeat nThousands
  54.         (setq tmp (strcat tmp "M"))
  55.       )
  56.       ;处理其他单位
  57.       (If (= nHundreds 4)
  58.         ;是4
  59.         (If (= nFiveHundreds 1)
  60.           (setq tmp (strcat tmp "CM"))
  61.           (setq tmp (strcat tmp "CD"))
  62.         )
  63.         ;不是4
  64.         (progn
  65.           (repeat nFiveHundreds
  66.             (setq tmp2 (strcat tmp2 "D"))
  67.           )
  68.           (repeat nHundreds
  69.             (setq tmp3 (strcat tmp3 "C"))
  70.           )
  71.           (setq tmp (strcat tmp tmp2 tmp3))
  72.           (setq tmp2 "" tmp3 "")
  73.         )
  74.       )
  75.       (If (= nTens 4)
  76.         ;是4
  77.         (If (= nFifties 1)
  78.           (setq tmp (strcat tmp "XC"))
  79.           (setq tmp (strcat tmp "XL"))
  80.         )
  81.         ;不是4
  82.         (progn
  83.           (repeat nFifties
  84.             (setq tmp2 (strcat tmp2 "L"))
  85.           )
  86.           (repeat nTens
  87.             (setq tmp3 (strcat tmp3 "X"))
  88.           )
  89.           (setq tmp (strcat tmp tmp2 tmp3))
  90.           (setq tmp2 "" tmp3 "")
  91.         )
  92.       )
  93.       (If (= nOnes 4)
  94.         ;是4
  95.         (If (= nFives 1)
  96.           (setq tmp (strcat tmp "IX"))
  97.           (setq tmp (strcat tmp "IV"))
  98.         )
  99.         ;不是4
  100.         (progn
  101.           (repeat nFives
  102.             (setq tmp2 (strcat tmp2 "V"))
  103.           )
  104.           (repeat nOnes
  105.             (setq tmp3 (strcat tmp3 "I"))
  106.           )
  107.           (setq tmp (strcat tmp tmp2 tmp3 EndTxt))
  108.           (setq tmp2 "" tmp3 "")
  109.         )
  110.       )
  111.       (entmod (subst (cons 1 tmp) (cons 1 (cdr (assoc 1 (entget (ssname ss i))))) (entget (ssname ss i))))
  112.       )
  113.       )
  114.       (setq i (+ 1 i))
  115.     )
  116.   ))
  117.   (command "undo" "e")
  118.   (if (/= Nerr 0)
  119.     (alert (strcat "共选择了 " (itoa (sslength ss)) " 个字串,其中 " (itoa Nerr) " 个字串不符条件,无法修改"))
  120.   )
  121.   (setvar "CMDECHO" 1)
  122. (princ)
  123. )
发表于 2009-8-25 12:48:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-8-25 12:49:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-8-25 20:08:00 | 显示全部楼层

感谢楼上大侠!上面的程序虽然不能生成我那样的剖面线和剖面编号,但能够将阿拉伯数字改成罗马数字,有异曲同工之妙,收下了,衷心感谢!!

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-1 12:12 , Processed in 0.164174 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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