明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1974|回复: 6

飞时达钻孔数据录入?

[复制链接]
发表于 2021-4-28 18:57:15 | 显示全部楼层 |阅读模式
本帖最后由 树櫴希德 于 2021-6-7 17:17 编辑

飞时达钻孔数据录入?
  1. ;;功能:带提示、关键字、过滤表、选择错误时的提示并且会亮显所选对像的entsel
  2. ;;用法:( clh-entsel  提示信息  关键字  过滤表  选择错误时提示)
  3. ;;举例:(clh-entsel  "\n请选择一个圆:"  "A B C"   '((0 . "circle"))  "\n所选对像不符合要求!请重新选择:")
  4. ;;说明:过滤表与ssget的过滤表相同;函数由CLH521,2009.6.7参考了一些网上资料整理编写
  5. (defun clh-entsel (msg key fil ermsg / el ss)
  6.   (while (and (setvar "errno" 0)
  7.             (not (and (setq el (apply '(lambda (msg key) (initget key) (entsel msg)) (list msg key)))
  8.                 (if (= (type el) 'str)
  9.                     el
  10.                  (if (setq ss (ssget (cadr el) fil))
  11.                     ss
  12.                   (progn (princ ermsg) (setq ss nil))
  13.                  );if
  14.               );if
  15.           );and
  16.         );not
  17.         (/= (getvar "errno") 52)
  18.      );and
  19.   );while
  20.   (if (= (type el) 'list) (redraw (car el) 3));亮显选中的对像
  21.   el
  22. )
  23. ;clh-entsel函数完毕========================================================



  24. (defun StrType(a / b c d e);;字符串分离全角、符号、字母、数字,存在问题:连续小数点与数字相连不能精确分离数字和小数点
  25.     (setq b(vl-string->list a))
  26.     (while b
  27.       (setq a(car b)b(cdr b)c(last d))
  28.       (if(or(not d)
  29.       (and(< 0 a 32)(< 0 c 32));;非打印字符
  30.       (or(= 46 a)(= 46 c)(and(< 47 a 58)(< 47 c 58)));数字和小数点
  31.       (vl-every'(lambda(x)(vl-some'(lambda(y)(<(car y)x(cadr y)))'((31 48)(57 65)(90 98)(122 129))))(list a c));其它字符包括小数点
  32.       (vl-every'(lambda(x)(vl-some'(lambda(y)(<(car y)x(cadr y)))'((64 91)(96 123))))(list a c));;字母
  33.       (and(> a 128)(> c 128)));;全角字符
  34.   (if(> a 128)(setq d(vl-list*(car b)a d)b(cdr b))(setq d(cons a d)))
  35.   (setq e(cons(reverse d)e)d(if(> a 128)(list(car b)a)(List a))b(if(> a 128)(cdr b)b))))
  36.     (mapcar'vl-list->string(reverse(cons(reverse d)e))))

  37. (defun 1zu ( e / )
  38.   (rtos(read (car(StrType (cdr(assoc 1(entget e)))  )))2 3)
  39.   )
  40. (defun 2zu ( e / )
  41.   (rtos(read (last(StrType (cdr(assoc 1(entget e)))  )))2 0)
  42.   )
  43. (defun 10zu ( e / )
  44.   (rtos(read  (cdr(assoc 1(entget e)))        )2 3)
  45.   )



  46. ;(rtos(read (car(StrType (cdr(assoc 1(entget (car(entsel)))))  )))2 3)
  47. (defun c:fsddc ( / p1 bh w1 w2 w3 w4 w5 w6 ff ffn i   )

  48. (setq ffn (getfiled "选取/建立数据导出文件" "" "ini" 1))
  49.   (setq ff (open ffn "w"))
  50. (write-line "[TFZKDATAINFO] \n" ff)
  51. ; (setq i 1)

  52. (while (setq p1 (getpoint "\n请在钻孔柱状图图里随便点击一下:"))
  53.   
  54.   (setq bh (car(entsel "\n请选择钻孔编号文字:")) )
  55.   (setq w2 (car(entsel "\n请选择钻孔北坐标文字:")) )
  56.   (setq w1 (car(entsel "\n请选择钻孔东坐标文字:")) )
  57.     (setq w3 (car(entsel "\n请选择钻孔高程文字:")) )
  58.   (setq w4 (car(entsel "\n请选择钻孔第1层土厚度文字:")) )
  59.   (setq w5 (car(entsel "\n请选择钻孔第2层土厚度文字:")) )
  60.   (setq w6 (car(entsel "\n请选择钻孔第3层土厚度文字:")) )
  61. (write-line (strcat (2zu bh) "=" (1zu w1)";"(1zu w2)";"(1zu w3)";0;"(10zu w4)";"(10zu w5)";"(10zu w6)";" "\n"  ) ff)
  62.   

  63. ;(setq i (1+ i))
  64.   )






  65. (close ff)


  66. )
  67. ;;;;;;;;;;;;;;;;
  68. (defun c:fsd111 ( / p1 bh w1 w2 w3 w4 w5 w6 ff ffn i   )
  69. (vl-load-com)
  70. (setq ffn (getfiled "选取/建立数据导出文件" "" "txt" 1))
  71.   (setq ff (open ffn "w"))
  72. (write-line (strcat "钻孔编号;" "东坐标;" "北坐标;" "高程;" "淤泥顶;" "淤泥底;" "粉质黏土底") ff)
  73. ; (setq i 1)

  74. (while (setq p1 (getpoint "\n请在钻孔柱状图图里随便点击一下:"))
  75.   
  76. ; (while (=  (cdr(assoc 0 (entget(setq bh (car(entsel "\n请选择钻孔编号文字:")) ) )))  "TEXT")(vla-put-Color (vlax-ename->vla-object bh) 1))
  77.    
  78.     ;(clh-entsel  "\n请选择钻孔 粉质黏土底 面标高文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")
  79.   
  80. (setq bh (car(clh-entsel  "\n请选择钻孔编号文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )  

  81.   (vla-put-Color (vlax-ename->vla-object bh) 1)
  82.   
  83.   (setq w2 (car(clh-entsel  "\n请选择钻孔北坐标文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )
  84.   (vla-put-Color (vlax-ename->vla-object w2) 2)
  85.   (setq w1 (car(clh-entsel  "\n请选择钻孔东坐标文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )
  86.   (vla-put-Color (vlax-ename->vla-object w1) 3)
  87.     (setq w3 (car(clh-entsel  "\n请选择钻孔高程文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )
  88.   (vla-put-Color (vlax-ename->vla-object w3) 4)
  89.   (setq w4 (car(clh-entsel  "\n请选择钻孔 淤泥顶 面标高文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )
  90.   (vla-put-Color (vlax-ename->vla-object w4) 5)
  91.   (setq w5 (car(clh-entsel  "\n请选择钻孔 淤泥底 面标高文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )
  92.   (vla-put-Color (vlax-ename->vla-object w5) 6)
  93.   (setq w6 (car(clh-entsel  "\n请选择钻孔 粉质黏土底 面标高文字:"  "A B C"   '((0 . "TEXT"))  "\n所选对像不符合要求!请重新选择:")) )
  94.   (vla-put-Color (vlax-ename->vla-object w6) 1)
  95. (write-line (strcat (2zu bh) ";" (1zu w1)";"(1zu w2)";"(1zu w3)";"(10zu w4)";"(10zu w5)";"(10zu w6)";"   ) ff)
  96.   

  97. ;(setq i (1+ i)) "\n"
  98.   )






  99. (close ff)


  100. )
  101. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  102. (defun c:fsdzk ( / p1 bh w1 w2 w3 w4 w5 w6 ff ffn i   )

  103. (setq ffn (getfiled "选取/建立数据导出文件" "" "txt" 1))
  104.   (setq ff (open ffn "w"))
  105. (write-line (strcat "钻孔编号;" "东坐标;" "北坐标;" "高程;" "淤泥顶;" "淤泥底;" "粉质黏土底") ff)
  106. ; (setq i 1)

  107. (while (setq p1 (getpoint "\n请在钻孔平面图图里点击钻孔位置:"))
  108.   
  109.   (setq bh (getstring "\n请输入钻孔编号:") )
  110.   (setq w1 (rtos(car p1)2 3) )
  111.   (setq w2 (rtos(cadr p1)2 3) )
  112.   (setq w3 (getreal "\n请输入钻孔高程:") )
  113.   (setq w4 (getreal "\n请输入素填土埋深:") )
  114.   (setq w5 (getreal "\n请输入淤泥埋深:") )
  115.   (setq w6 (getreal "\n请输入粉质黏土埋深:") )

  116.   
  117. (write-line (strcat bh ";" w1 ";" w2 ";" (rtos w3 2 3) ";"(rtos (- w3 w4) 2 3)";"(rtos (- w3 w5) 2 3)";"(rtos (- w3 w6) 2 3)";"   ) ff)
  118.   

  119. ;(setq i (1+ i)) "\n"
  120.   )






  121. (close ff)


  122. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2021-4-28 19:09:11 | 显示全部楼层
  1. ;;;by Gu_xl
  2. (defun gxl-cs:gcd (inspt height scale / pt blkdef obj);展高程点函数(inspt:插入点,heitht:高程值,scale:缩放比例,xsws:高程注记位数)
  3. (vl-load-com) ;将 Visual LISP 扩展功能加载到 AutoLISP
  4.   (regapp "SOUTH")
  5.   (setvar "CMDECHO" 0)
  6.   (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" ""  "")
  7.   (if height
  8.     (setq height (rtos height 2 3));3为高程注记位数
  9.     (setq height "")
  10.   )
  11.   (regapp "SOUTH")
  12.   
  13.   ;;;检查字体 "HZ" 是否存在
  14.   (if (not (tblobjname "style" "宋体"))
  15.     ;(command "style" "HZ" "rs.shx,hztxt.shx" 0 1 0 "" "" "")
  16.     (command "style" "宋体" "" 0 1 0 "" "" "")
  17.   )
  18.   ;;;检查是否存在高程点图块定义
  19.   (if (not (tblobjname "block" "GC200"))
  20.     (progn
  21.       (setq blkdef (vla-Add (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3D-point '(0 0 0)) "GC200"))
  22.       (setq obj
  23.         (vla-AddPolyline
  24.            blkdef
  25.            (vlax-make-variant
  26.               (vlax-safearray-fill
  27.                  (vlax-make-safearray vlax-vbdouble (cons 0 5))
  28.                  '(-0.2 0 0 0.2 0 0)
  29.               )
  30.            )
  31.         )
  32.       )
  33.       (vla-SetBulge obj 0 1) (vla-SetBulge obj 1 1)
  34.       (vla-put-Closed obj :vlax-true)
  35.       (vla-put-ConstantWidth obj 0.4)
  36.     )
  37.   )
  38.   ;;;插入块
  39.   (entmake (list
  40.              '(0 . "INSERT")
  41.              '(100 . "AcDbEntity")
  42.              '(100 . "AcDbBlockReference")
  43.              '(66 . 1);;;属性跟随标志,1跟随,0不跟随
  44.               (cons 2 "GC200")
  45.               (cons 10 inspt)
  46.               (cons 41 scale)
  47.               (cons 42 scale)
  48.               (cons 43 scale)
  49.               (list -3 '("SOUTH" (1000 . "202101")))
  50.            )
  51.   )
  52.   ;;;插入属性
  53.   (entmake (list
  54.              '(0 . "ATTRIB")
  55.              '(100 . "AcDbEntity")
  56.              '(100 . "AcDbText")
  57.               (cons 10 (setq pt (polar inspt 0 (* 1.2 scale))))
  58.               (cons 40 (* 2.0 scale))
  59.               (cons 50 0)
  60.               (cons 41 0.8)
  61.               (cons 51 0)
  62.               (cons 1 height)
  63.               (cons 7 "宋体")
  64.        (cons 62 3)
  65.               (cons 72 0)
  66.               (cons 11 pt)
  67.               '(100 . "AcDbAttribute")
  68.               (cons 2 "height")
  69.               (cons 70  0)
  70.               (cons 74 2)
  71.            )
  72.    )
  73.    ;;;结束标志
  74.    (entmake '((0 . "SEQEND")))
  75.    (princ)
  76. )
  77. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  78. (defun insertgc ( e / e)
  79.   (cdr(assoc 10(entget e)))
  80.   )
  81. (defun insertgc11 ( e / e)
  82.   (cdr(assoc 11(entget e)))
  83.   )

  84. (defun insert1 ( e / e)
  85.   (read (cdr(assoc 1(entget e)))  )
  86.   )
  87. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  88. ( defun c:bgc ( /  blc scale wz height zb xzb zdzb)


  89. (setq blc (getint "\n请输入比例尺1:<500>"))
  90.   (if (= blc nil)(setq blc 500))
  91.   (setvar 'userr1 blc);设置比例尺
  92. (setq scale (* 0.001 blc));缩放比例

  93.   (while (setq wz(car(entsel "\n请选择要转换成高程点的数字文字text:")))

  94.   (setq height (insert1 wz))
  95.     (setq zb (insertgc wz))

  96.     ;(setq xzb (list  (+ (car zb) 1.1661) (- (cadr zb) 0.8044) height    )    );;;;;;
  97.    (setq zdzb (getpoint "\n请指定要标注高程点的位置:"))
  98.     (setq xzb  (list (car zdzb) (cadr zdzb)  height  ))
  99. (gxl-cs:gcd xzb height scale)
  100.    
  101.    )


  102. )

 楼主| 发表于 2021-4-29 17:05:19 | 显示全部楼层
  1. (defun c:fsdzk ( / p1 bh w1 w2 w3 w4 w5 w6 ff ffn i   )

  2. (setq ffn (getfiled "选取/建立数据导出文件" "" "txt" 1))
  3.   (setq ff (open ffn "w"))
  4. (write-line (strcat "钻孔编号;" "东坐标;" "北坐标;" "高程;" "淤泥顶;" "淤泥底;" "粉质黏土底") ff)
  5. ; (setq i 1)

  6. (while (setq p1 (getpoint "\n请在钻孔平面图图里点击钻孔位置:"))
  7.   
  8.   (setq bh (getstring "\n请输入钻孔编号:") )
  9.   (setq w1 (rtos(car p1)2 3) )
  10.   (setq w2 (rtos(cadr p1)2 3) )
  11.   (setq w3 (getreal "\n请输入钻孔高程:") )
  12.   (setq w4 (getreal "\n请输入素填土埋深:") )
  13.   (setq w5 (getreal "\n请输入淤泥埋深:") )
  14.   (setq w6 (getreal "\n请输入粉质黏土埋深:") )

  15.   
  16. (write-line (strcat bh ";" w1 ";" w2 ";" (rtos w3 2 3) ";"(rtos (- w3 w4) 2 3)";"(rtos (- w3 w5) 2 3)";"(rtos (- w3 w6) 2 3)";"   ) ff)
  17.   

  18. ;(setq i (1+ i)) "\n"
  19.   )






  20. (close ff)


  21. )

发表于 2021-6-7 01:23:59 | 显示全部楼层
上图演示一下,大家一块就明白,这一堆代码不直观
 楼主| 发表于 2021-6-8 21:45:44 | 显示全部楼层
;《《《《《《《《《《《《《《《》》》》》》》》》》》》》》》

函数:;(cx-SsgetNum "测试选数字" nil "")   只选择数字的文本。
参数:msg提示字符串。
cps  :pik选项可以用::s或者:e等关键字。
kwd :关键字选项,可以输入1 2 3 4 (initget)

;《《《《《《《《《《《《《《《》》》》》》》》》》》》》》》
来源 鱼和熊掌大神
  1. ;;带关键字的ssget(cx-ssget "选择文字[(m)多选/(d)恢复/]<结束>" "m d"  '((0 . "*text")))




  2. ;;点化字串

  3. ;带过滤的超级单选。
  4. ;(cx-entsel "选择直线" "S 3" nil)
  5. (defun cx-entsel (msg kwd fli / s)
  6.   (setq s (cx-SsgetSup msg ":s" kwd fli))
  7.   (if s
  8.     (if  (= 'str (type s))
  9.       s
  10.       (ssname s 0)
  11.     )
  12.     nil
  13.   )
  14. )
  15. ;(cx-SsgetNum "测试选数字" nil "\n选择错误,请重新选择")
  16. (defun cx-SsgetNum (msg cps kwd)
  17.   (cx-SsgetSup msg cps kwd '((1 . "~*[~.0-9]*")))
  18. )

  19. ;;带关键字的ssget(cx-ssget "选择文字[(m)多选/(d)恢复/]<结束>" "m d"  '((0 . "*text")))
  20. ;(cx-SsgetSup "选择文字[(m)多选/(d)恢复/]<结束>" ":s"  "m d"  nil)
  21. (defun cx-SsgetSup
  22.        (Msg CPS Kwd Fil / cx-entsel Kwd0 pt var cx-split Pt2Str)
  23.   (setq
  24.     *ACAD* (vlax-get-acad-object)
  25.     *DOC*  (vla-get-ActiveDocument *ACAD*)
  26.   )
  27.   (defun Pt2Str  (pt)
  28.     (strcat (rtos (car pt) 2 20)
  29.       ","
  30.       (rtos (cadr pt) 2 20)
  31.       ","
  32.       (rtos (caddr pt) 2 20)
  33.       "\n"
  34.     )
  35.   )
  36. ;分割字符串_单.(cx-split1 "123 321" " ")
  37.   (defun cx-split (str del / pos lst)
  38.     (while (setq pos (vl-string-search del str))
  39.       (setq lst  (cons (substr str 1 pos) lst)
  40.       str  (substr str (+ pos 1 (strlen del)))
  41.       )
  42.     )
  43. ;(vl-remove "" (reverse (cons str lst)))

  44.     (if  (= " " Del)
  45.       (vl-remove "" (reverse (cons str lst)))
  46.       (reverse (cons str lst))
  47.     )
  48.   )

  49.   (defun cx-ents (msg filter)
  50.     (setq enp (entsel msg))
  51.     (if  (or (= (type enp) 'str)
  52.       (and enp (ssget (cadr enp) filter))
  53.   )
  54.       enp
  55.     )
  56.   )
  57.   (cond  ((cadr (ssgetfirst)))
  58.   (t
  59.    (setq Kwd0 "W L C BOX ALL F WP CP G A R M P U AU SI")
  60.    (initget (strcat Kwd0 " " kwd))
  61.    (cond ((and (listp (setq var (cx-ents Msg Fil)))
  62.          (/= 52 (getvar "errno"))
  63.     )
  64.     (vla-sendcommand *doc* (Pt2Str (cadr (grread t))))
  65.     (if cps
  66.       (ssget CPS Fil)
  67.       (ssget Fil)
  68.     )
  69.          )
  70.          ((member var (cx-split Kwd0 " "))
  71.     (vla-sendcommand *doc* (strcat var "\n"))
  72.     (if cps
  73.       (ssget CPS Fil)
  74.       (ssget Fil)
  75.     )
  76.          )
  77.          (t var)
  78.    )
  79.   )
  80.   )
  81. )
  82. (defun cx-ssget  (msg kwd fli)
  83.   (cx-SsgetSup msg nil kwd fli)
  84. )

函数:;;带关键字的ssget(cx-ssget "选择文字[(m)多选/(d)恢复/]<结束>" "m d"  '((0 . "*text")))
说明:来自飞总的原来的函数。

;《《《《《《《《《《《《《《《》》》》》》》》》》》》》》》

;带过滤的超级单选。
;(cx-entsel "选择直线" "S 3" nil)
参数1:msg提示信息
参数2:关键字 S 或者3(initget)
参数3:过滤选项 如:'((0 . "LINE"))

;《《《《《《《《《《《《《《《》》》》》》》》》》》》》》》

;函数;(cx-SsgetSup "选择文字[(m)多选/(d)恢复/]<结束>" ":s"  "m d"  nil)
;参数1:提示信息
;参数2 :  :S :E 等CPS选项
;参数3:关键字
;参数4:过滤

发表于 2022-10-9 10:42:10 | 显示全部楼层
留个座位,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:07 , Processed in 0.197381 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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