明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1146|回复: 5

[已解答] 求教:程序合并

[复制链接]
发表于 2015-6-9 08:31 | 显示全部楼层 |阅读模式
本帖最后由 香田里浪人 于 2015-6-9 08:45 编辑

今有2个程序,分别是面积计算统计到Excel及图层改名颜色,我想实现一次选择既可计算面积并统计也可图层改名(不用二次选择),不知如何修改合并,请高手抽空帮忙,谢谢!
;;;面积计算统计到Excel。根据lisheng的程序,略作修改。
(defun c:mjztj(/ OBJLLPOINT OBJRUPOINT TEXTHEIGHT TEXTINDEX f ss e i obj l tarea)
  (vl-load-com)
(command "layer" "M" "面积" "C" "6" "" "LT" "CONTINUOUS" "" "");设置一个面积标注图层
(command "layer" "M" "面积统计" "C" "4" "" "LT" "CONTINUOUS" "" "");设置一个面积统计图层
  (setvar"dimzin"0);;保留小数位数时如果位数不足可以补零
  (setq TextHeight (getdist "\n输入标注文字高度:(默认1)")
        Textbh(getstring "\n输入编号前缀:")
        f(getfiled "指定输出文件路径" "" "xls" 1));;;指定输出文件路径,
(if (= TextHeight nil) (setq TextHeight 1))
    (if f(progn
         (setq f(open f "a")i 0 TextIndex 1 tarea 0
               ss (ssget '((0 . "CIRCLE,LWPOLYLINE,ELLIPSE"))))
         (write-line "编号\t面积(㎡)" f)
         (repeat(SSlength ss)
           (setq e(ssname ss i)i(1+ i)
                 Obj(vlax-ename->vla-object e))
           (vla-GetBoundingBox Obj 'ObjLlPoint 'ObjRuPoint)
           (setq l(cons(list(mapcar'(lambda(x y)(/ (+ x y)2))(vlax-safearray->list ObjLlPoint)(vlax-safearray->list ObjRuPoint))
                            (vla-get-Area(vlax-ename->vla-object e)))l)))
         (foreach x(vl-sort l'(lambda(x y)(<(last x)(last y))))
           (write-line(setq txt(strcat Textbh(itoa TextIndex)"\t"(setq area(rtos(last x)2 2))))f)
           (entmake(list'(0 . "TEXT")'(8 . "面积")'(62 . 6)'(41 . 0.7)(cons 10 (car x))(cons 1 (STRCAT(vl-string-subst"=""\t"txt)"㎡"))
                        (CONS 40 TextHeight)'(7 . "tukou")(cons 11 (car x))'(72 . 1)));设置一个面积标注文字颜色品红,宽高比0.7,可根据需要自行修改
           (setq tarea(+(atof area)tarea)
                 TextIndex(1+ TextIndex)))
         (close f)
         (entmake(list'(0 . "TEXT")'(8 . "面积统计")'(62 . 4)'(41 . 0.7)(cons 10 (setq e(getpoint"\n请输入文字插入点: ")));设置一个面积统计文字颜色青色,宽高比0.7,可根据需要自行修改
                      (cons 1(strcat Textbh"="Textbh"1+"Textbh"2+...+"Textbh (itoa i)"="(rtos tarea 2 2)"㎡"))
                        (CONS 40 TextHeight)'(7 . "tukou")(cons 11 e)'(72 . 1)))
         )
    (alert"没有选择文件"))
  (princ)
  )
;;将图中实体图层改名变色
(defun #chg_color (e cnum0 cnum / tf e blkna)
(xdrx_setenttodb e)
(setq tf (xdrx_getentdxf 0))
(cond
((or
(= tf "INSERT")
(= tf "DIMENSION")
)
(setq blkna (xdrx_getentdxf 2))
(setq blkna (tblsearch "block" blkna))
(setq e (cdr (assoc -2 blkna)))
(while e
(xdrx_setenttodb e)
(setq tf (xdrx_getentdxf 0))
(if (or
(= tf "INSERT")
(= tf "DIMENSION")
)
(progn
(#chg_color e cnum0 cnum)
)
(progn
(xdrx_setenttodb e)
(xdrx_modent cnum0 cnum)
)
)
(setq e (entnext e))
)
)
(t
(xdrx_modent cnum0 cnum)
)
)
)
(defun c:tcgm (/ ss key num num0 n e)
(xdrx_begin)
(prompt "\n请选取要变色的实体<全选>:")
(if (not (setq ss (ssget)))
(setq ss (ssget "x"))
)
(initget "1 2")
(setq key (getstring "\n[1 改顏色/2 改层名]<1>: "))
(if (or (= key "1")
(= key "")
)
(progn
(setq num (acad_colordlg 7))
(setq num0 62)
)
(progn
(setq num (getstring "\n图层名称: "))
(setq num0 8)
)
)
(setq n 0)
(xdrx_setsstodb ss 0)
(xdrx_pbarbegin "已经完成:" (sslength ss))
(while (setq e (xdrx_getentdata 0))
(xdrx_pbarsetpos n)
(setq n (1+ n))
(#chg_color e num0 num)
(entupd e)
)
(xdrx_pbarend)
(setvar "osmode" 4261)
(xdrx_end)
(princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-6-9 08:50 | 显示全部楼层
LISP好难读,如果是VBA或者C#还能帮帮你,不过论坛里LISP高手济济,马上有人会帮到你的
发表于 2015-6-9 12:04 | 显示全部楼层
未验证。。
  1. ;;;面积计算统计到Excel。根据lisheng的程序,略作修改。
  2. (defun c:mjztj(/ OBJLLPOINT OBJRUPOINT TEXTHEIGHT TEXTINDEX f ss e i obj l tarea)
  3.   (vl-load-com)
  4. (command "layer" "M" "面积" "C" "6" "" "LT" "CONTINUOUS" "" "");设置一个面积标注图层
  5. (command "layer" "M" "面积统计" "C" "4" "" "LT" "CONTINUOUS" "" "");设置一个面积统计图层
  6.   (setvar"dimzin"0);;保留小数位数时如果位数不足可以补零
  7.   (setq TextHeight (getdist "\n输入标注文字高度:(默认1)")
  8.         Textbh(getstring "\n输入编号前缀:")
  9.         f(getfiled "指定输出文件路径" "" "xls" 1));;;指定输出文件路径,
  10. (if (= TextHeight nil) (setq TextHeight 1))
  11.     (if f(progn
  12.          (setq f(open f "a")i 0 TextIndex 1 tarea 0
  13.                ss (ssget '((0 . "CIRCLE,LWPOLYLINE,ELLIPSE"))))
  14.          (write-line "编号\t面积(㎡)" f)
  15.          (repeat(SSlength ss)
  16.            (setq e(ssname ss i)i(1+ i)
  17.                  Obj(vlax-ename->vla-object e))
  18.            (vla-GetBoundingBox Obj 'ObjLlPoint 'ObjRuPoint)
  19.            (setq l(cons(list(mapcar'(lambda(x y)(/ (+ x y)2))(vlax-safearray->list ObjLlPoint)(vlax-safearray->list ObjRuPoint))
  20.                             (vla-get-Area(vlax-ename->vla-object e)))l)))
  21.          (foreach x(vl-sort l'(lambda(x y)(<(last x)(last y))))
  22.            (write-line(setq txt(strcat Textbh(itoa TextIndex)"\t"(setq area(rtos(last x)2 2))))f)
  23.            (entmake(list'(0 . "TEXT")'(8 . "面积")'(62 . 6)'(41 . 0.7)(cons 10 (car x))(cons 1 (STRCAT(vl-string-subst"=""\t"txt)"㎡"))
  24.                         (CONS 40 TextHeight)'(7 . "tukou")(cons 11 (car x))'(72 . 1)));设置一个面积标注文字颜色品红,宽高比0.7,可根据需要自行修改
  25.            (setq tarea(+(atof area)tarea)
  26.                  TextIndex(1+ TextIndex)))
  27.          (close f)
  28.          (entmake(list'(0 . "TEXT")'(8 . "面积统计")'(62 . 4)'(41 . 0.7)(cons 10 (setq e(getpoint"\n请输入文字插入点: ")));设置一个面积统计文字颜色青色,宽高比0.7,可根据需要自行修改
  29.                       (cons 1(strcat Textbh"="Textbh"1+"Textbh"2+...+"Textbh (itoa i)"="(rtos tarea 2 2)"㎡"))
  30.                         (CONS 40 TextHeight)'(7 . "tukou")(cons 11 e)'(72 . 1)))
  31.          (initget 1 "Yes No")
  32.          (setq keyword (getkword "是否确定[是(Y)/否(N)]: "))
  33.          (if (and keyword (= keyword "Yes"))
  34.            (if (and ss (> (sslength ss) 0))(xdrx_tcgm ss))     
  35.              )
  36.          )
  37.     (alert"没有选择文件"))
  38.   (princ)
  39.   )
  40. ;;将图中实体图层改名变色
  41. (defun #chg_color (e cnum0 cnum / tf e blkna)
  42. (xdrx_setenttodb e)
  43. (setq tf (xdrx_getentdxf 0))
  44. (cond
  45. ((or
  46. (= tf "INSERT")
  47. (= tf "DIMENSION")
  48. )
  49. (setq blkna (xdrx_getentdxf 2))
  50. (setq blkna (tblsearch "block" blkna))
  51. (setq e (cdr (assoc -2 blkna)))
  52. (while e
  53. (xdrx_setenttodb e)
  54. (setq tf (xdrx_getentdxf 0))
  55. (if (or
  56. (= tf "INSERT")
  57. (= tf "DIMENSION")
  58. )
  59. (progn
  60. (#chg_color e cnum0 cnum)
  61. )
  62. (progn
  63. (xdrx_setenttodb e)
  64. (xdrx_modent cnum0 cnum)
  65. )
  66. )
  67. (setq e (entnext e))
  68. )
  69. )
  70. (t
  71. (xdrx_modent cnum0 cnum)
  72. )
  73. )
  74. )
  75. (defun xdrx_tcgm (ss /  key num num0 n e)
  76. (xdrx_begin)
  77. ;(prompt "\n请选取要变色的实体<全选>:")
  78. (if (not ss)
  79. (setq ss (ssget "x"))
  80. )
  81. (initget "1 2")
  82. (setq key (getstring "\n[1 改顏色/2 改层名]<1>: "))
  83. (if (or (= key "1")
  84. (= key "")
  85. )
  86. (progn
  87. (setq num (acad_colordlg 7))
  88. (setq num0 62)
  89. )
  90. (progn
  91. (setq num (getstring "\n图层名称: "))
  92. (setq num0 8)
  93. )
  94. )
  95. (setq n 0)
  96. (xdrx_setsstodb ss 0)
  97. (xdrx_pbarbegin "已经完成:" (sslength ss))
  98. (while (setq e (xdrx_getentdata 0))
  99. (xdrx_pbarsetpos n)
  100. (setq n (1+ n))
  101. (#chg_color e num0 num)
  102. (entupd e)
  103. )
  104. (xdrx_pbarend)
  105. (setvar "osmode" 4261)
  106. (xdrx_end)
  107. (princ)
  108. )

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-6-9 15:40 | 显示全部楼层
edata 发表于 2015-6-9 12:04
未验证。。

谢谢!好像不行,面积及其统计无法在图中显示
发表于 2015-6-9 16:11 | 显示全部楼层
你原来能用这个程序,你就能用,你原来不能用这两个程序,就不能用。因为合并并没有改变这两个程序。
检查你的字体有没有,另外测试了下,这面积单位貌似不正确。
图层改名你能不能用,不能用,合并也不能用,因为这需要另外的函数支持,貌似是晓东的API。
 楼主| 发表于 2015-6-10 08:31 | 显示全部楼层
edata 发表于 2015-6-9 16:11
你原来能用这个程序,你就能用,你原来不能用这两个程序,就不能用。因为合并并没有改变这两个程序。
检查 ...

再次感谢,问题找出来了,原来是字体问题,修改字体就可以用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 03:09 , Processed in 0.583130 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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