明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 238|回复: 2

三维多段线手工输入某点高程

[复制链接]
发表于 2023-6-8 00:35 | 显示全部楼层 |阅读模式

三维多段线手工输入某点高程,其实特性栏也能输入

  1. ;论坛长老:baitang36看了一下生成的临时文件,是我的风格    稍微改一下,把函数明前加个前缀“syz-”,这样激活后的隐藏函数就可以和原有的函数同时使用了。如隐藏函数princ变成了syz-princ,避免了冲突
  2. ;;例子:(try-load-hide-fun "get-logical-drives")
  3. (defun try-load-hide-fun (fun / dat file fo len)
  4.         (setq fun1 (strcat "syz-" fun))
  5.         (setq len(+ (* 2(strlen fun))32));长度
  6.         (setq file (vl-filename-mktemp "tryhi.fas"))
  7.         (setq dat
  8.                 (append
  9.                         '(266 70 65 83 52 45 70 73 76 69 32 59 98 121 58 116 114
  10.                                  121 104 105 32 13 266 49 13 266 49 32 36 32 36 13 266)
  11.                         (vl-string->list (itoa len))
  12.                         '(32 52 32 36 20 1 1 1 256 219)
  13.                         (vl-string->list fun1)
  14.                         '(256 256 214)
  15.                         (vl-string->list fun)
  16.                         '(256 256 1 67 256 256 2 256 266 266 131 1 256 160 134 256 256 1 22 36 59 98 121 58 180 243 186 163)
  17.                 )
  18.         )
  19.         (setq fo (open file "w"))
  20.         (foreach x dat (write-char x fo))
  21.         (close fo)
  22.         (load file)
  23.         (vl-file-delete file);删除临时文件
  24.         (eval(read fun1));如果函数不存在则返回nil
  25. )

  26. (try-load-hide-fun "nthcdr")
  27. (defun mposition(lst ens / n);;;列出ens表内各个元素的lst中所有出现位置
  28.   (setq n(length lst))
  29.   (mapcar(function(lambda(x / i l l1)
  30.         (setq l lst)
  31.         (while(setq i(vl-position x l))
  32.           (setq l1(cons(+ i n(-(length l)))l1)
  33.           l(syz-nthcdr(1+ i)l)))
  34.         (reverse l1)))ens))

  35. ;;;;;;;;;;;;;;;;

  36. (defun everyposition(lst / n l2);;;lst表内各元素在表内所有出现位置,可进一步用于去重、频数统计等
  37.   (setq n(length lst)m -1)
  38.   (vl-every(function(lambda(x / i l l1 )
  39.           (or(assoc x l2)
  40.        (progn
  41.          (setq l lst)
  42.          (while(setq i(vl-position x l))
  43.            (setq l1(cons(+ i n(-(length l)))l1)
  44.            l(syz-nthcdr(1+ i)l)))
  45.          (setq l2(cons(cons x(reverse l1))l2))))))lst)
  46.   (reverse l2))
  47. ;EVERYPOSITION
  48. ;_$ (EVERYPOSITION'(a b e f c d a h c f b d h i))
  49. ;((A 0 6) (B 1 10) (E 2) (F 3 9) (C 4 8) (D 5 11) (H 7 12) (I 13))
  50. ;(mposition  '(154 478 123 999) '(123))

  51. (defun vxs (e / i v lst ppp)
  52.   (setq i 0)
  53.   (while
  54.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  55.      (setq lst (cons v lst))
  56.   )
  57.   (setq ppp (reverse lst) )
  58. (append (list(vlax-curve-getpointatparam e 0)) ppp )
  59.   
  60.   )
  61. (defun c:3dgc (   / Polyline PolylineObj p1 gcc xh  coord  temp0 temp1  )
  62. (vl-load-com)
  63. (setq Polyline (car(entsel "\n请选择3维多段线")))
  64. (setq PolylineObj (vlax-ename->vla-object Polyline ) )
  65. (while   (setq p1 (getpoint "\n请点需要输入新高程的坐标点:"))

  66. (setq gcc (getreal "\n请输入该点新高程:"))

  67. ;(mposition  (vxs Polyline) p1)   (everyposition (vxs Polyline) )  (caar '((1355.88 1061.66 152.0) 0) )

  68. ;;;(vxs (car(entsel "\n请选择3维多段线"))) (list (car p1)(cadr p1 ))  (cadar '((1355.88 1061.66 152.0) 0) )

  69. (foreach x  (everyposition (vxs Polyline) )
  70.    
  71.       (if    (< (distance (list (caar x ) (cadar x ) ) (list (car p1) (cadr p1)) )  0.100)

  72. (setq xh (cadr x) )
  73.   ;(setq xh nil )

  74.   )
  75.    

  76. );;;;;;
  77. ;; 找出第一个索引位置的坐标

  78.   (setq coord(vla-get-Coordinate PolylineObj  xh))


  79. ;;; 改变坐标

  80.   ;(setq temp(+ (vlax-safearray-get-element (vlax-variant-value coord) 0) 1))
  81. (setq temp0 (car p1)
  82.       temp1  (cadr p1)
  83.            

  84.      )

  85.   (setq coord(vlax-variant-value coord))

  86.   (vlax-safearray-put-element coord 0 temp0)

  87. (vlax-safearray-put-element coord 1 temp1)
  88. (vlax-safearray-put-element coord 2 gcc)
  89.   (vla-put-Coordinate PolylineObj xh coord)

  90.   (vla-Update PolylineObj)
  91.   
  92. ;;;;;;;
  93.   )

  94. (princ)

  95. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2023-6-8 01:10 | 显示全部楼层
  1. : (setq a'((100 252 36) (457 878 21) (211 985 24)))
  2. ((100 252 36) (457 878 21) (211 985 24))

  3. 命令: 'VLIDE
  4. 命令:
  5. 命令: 'VLIDE
  6. 命令:
  7. 命令: (setq n (length a))
  8. 3

  9. 命令: 'VLIDE
  10. 命令:
  11. 命令: (apply 'append (mapcar'(lambda(x)(setq a(cdr a))   (list(cons (- n (length
  12. a)) x))  )a))
  13. ((1 100 252 36) (2 457 878 21) (3 211 985 24))

 楼主| 发表于 2023-6-8 01:47 | 显示全部楼层


为表中每个元素前插入序号
_$ (setq a'("a" "b" "c"))
("a" "b" "c")
_$ (setq n (length a))
3
_$ (apply 'append (mapcar'(lambda(x)(setq a(cdr a))(list (- n (length a)) x))a))
(1 "a" 2 "b" 3 "c")
(setq i 0)(apply'append(mapcar'(lambda(x)(List(setq i(1+ i))x))a))

  1. ;论坛长老:baitang36看了一下生成的临时文件,是我的风格    稍微改一下,把函数明前加个前缀“syz-”,这样激活后的隐藏函数就可以和原有的函数同时使用了。如隐藏函数princ变成了syz-princ,避免了冲突
  2. ;;例子:(try-load-hide-fun "get-logical-drives")
  3. (defun try-load-hide-fun (fun / dat file fo len)
  4.         (setq fun1 (strcat "syz-" fun))
  5.         (setq len(+ (* 2(strlen fun))32));长度
  6.         (setq file (vl-filename-mktemp "tryhi.fas"))
  7.         (setq dat
  8.                 (append
  9.                         '(266 70 65 83 52 45 70 73 76 69 32 59 98 121 58 116 114
  10.                                  121 104 105 32 13 266 49 13 266 49 32 36 32 36 13 266)
  11.                         (vl-string->list (itoa len))
  12.                         '(32 52 32 36 20 1 1 1 256 219)
  13.                         (vl-string->list fun1)
  14.                         '(256 256 214)
  15.                         (vl-string->list fun)
  16.                         '(256 256 1 67 256 256 2 256 266 266 131 1 256 160 134 256 256 1 22 36 59 98 121 58 180 243 186 163)
  17.                 )
  18.         )
  19.         (setq fo (open file "w"))
  20.         (foreach x dat (write-char x fo))
  21.         (close fo)
  22.         (load file)
  23.         (vl-file-delete file);删除临时文件
  24.         (eval(read fun1));如果函数不存在则返回nil
  25. )

  26. (try-load-hide-fun "nthcdr")
  27. (defun mposition(lst ens / n);;;列出ens表内各个元素的lst中所有出现位置
  28.   (setq n(length lst))
  29.   (mapcar(function(lambda(x / i l l1)
  30.         (setq l lst)
  31.         (while(setq i(vl-position x l))
  32.           (setq l1(cons(+ i n(-(length l)))l1)
  33.           l(syz-nthcdr(1+ i)l)))
  34.         (reverse l1)))ens))

  35. ;;;;;;;;;;;;;;;;

  36. (defun everyposition(lst / n l2);;;lst表内各元素在表内所有出现位置,可进一步用于去重、频数统计等
  37.   (setq n(length lst)m -1)
  38.   (vl-every(function(lambda(x / i l l1 )
  39.           (or(assoc x l2)
  40.        (progn
  41.          (setq l lst)
  42.          (while(setq i(vl-position x l))
  43.            (setq l1(cons(+ i n(-(length l)))l1)
  44.            l(syz-nthcdr(1+ i)l)))
  45.          (setq l2(cons(cons x(reverse l1))l2))))))lst)
  46.   (reverse l2))
  47. ;EVERYPOSITION
  48. ;_$ (EVERYPOSITION'(a b e f c d a h c f b d h i))
  49. ;((A 0 6) (B 1 10) (E 2) (F 3 9) (C 4 8) (D 5 11) (H 7 12) (I 13))
  50. ;(mposition  '(154 478 123 999) '(123))

  51. (defun vxs (e / i v lst ppp)
  52.   (setq i 0)
  53.   (while
  54.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  55.      (setq lst (cons v lst))
  56.   )
  57.   (setq ppp (reverse lst) )
  58. (append (list(vlax-curve-getpointatparam e 0)) ppp )
  59.   
  60.   )
  61. (defun c:3dgcd (   / Polyline PolylineObj p1 gcc xh  coord  temp0 temp1  aaa n xdb)
  62. (vl-load-com)
  63. (setq Polyline (car(entsel "\n请选择3维多段线")))
  64. (setq PolylineObj (vlax-ename->vla-object Polyline ) )
  65. (while   (setq p1 (getpoint "\n请点需要输入新高程的坐标点:"))

  66. (setq gcc (getreal "\n请输入该点新高程:"))

  67. ;(mposition  (vxs Polyline) p1)   (everyposition (vxs Polyline) )  (caar '((1355.88 1061.66 152.0) 0) )

  68. ;;;(vxs (car(entsel "\n请选择3维多段线"))) (list (car p1)(cadr p1 ))  (cadar '((1355.88 1061.66 152.0) 0) )
  69.    (setq aaa (vxs Polyline) )     (setq n (length aaa))
  70.   (setq xdb (apply 'append (mapcar'(lambda(x)(setq aaa(cdr aaa))   (list(cons (- n (length aaa)) x))  )aaa))  )


  71. (foreach x  xdb
  72.    
  73.       (if    (< (distance (list (nth 1 x) (nth 2 x) ) (list (car p1) (cadr p1)) )  0.0500)

  74. (setq xh (-(car x) 1))
  75.   ;(setq xh nil )

  76.   )
  77.    

  78. );;;;;;
  79. ;; 找出第一个索引位置的坐标

  80.   (setq coord(vla-get-Coordinate PolylineObj  xh))


  81. ;;; 改变坐标

  82.   ;(setq temp(+ (vlax-safearray-get-element (vlax-variant-value coord) 0) 1))
  83. (setq temp0 (car p1)
  84.       temp1  (cadr p1)
  85.            

  86.      )

  87.   (setq coord(vlax-variant-value coord))

  88.   (vlax-safearray-put-element coord 0 temp0)

  89. (vlax-safearray-put-element coord 1 temp1)
  90. (vlax-safearray-put-element coord 2 gcc)
  91.   (vla-put-Coordinate PolylineObj xh coord)

  92.   (vla-Update PolylineObj)
  93.   
  94. ;;;;;;;
  95.   )

  96. (princ)

  97. )

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-28 17:27 , Processed in 0.338414 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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