明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1946|回复: 4

随机坐标高程 73哥 GU版函数

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

  74. ;;;;;;;;;;;;;;;;;;;;
  75. (defun RandList (a b n i / l r Rani)
  76.   (defun Rani (a b / tmp)
  77.     (if        (not *Seed*)
  78.       (setq *Seed* (- (setq tmp (getvar "DATE")) (fix tmp)))
  79.     )
  80.     (+ a
  81.        (fix (* (- b a)
  82.                (setq
  83.                  *Seed*        (- (setq
  84.                              tmp (/ (* *Seed* 1000000000 663608941)
  85.                                     1000000000.0
  86.                                  )
  87.                            )
  88.                            (fix tmp)
  89.                         )
  90.                )
  91.             )
  92.        )
  93.     )
  94.   )
  95.   (cond
  96.     ((or
  97.        (and (> (rem n (1+ (- b a))) 0)
  98.             (< i (1+ (/ n (1+ (- b a)))))
  99.        )
  100.        (and (= (rem n (1+ (- b a))) 0)
  101.             (< i (/ n (1+ (- b a))))
  102.        )
  103.      )
  104.      (prompt "\n没有满足要求的结果")
  105.     )
  106.     ((and (= (rem n (1+ (- b a))) 0)
  107.           (= i (/ n (1+ (- b a))))
  108.      )
  109.      (repeat i
  110.        (setq l (cons a l))
  111.      )
  112.      (while (< a b)
  113.        (setq a (1+ a))
  114.        (repeat i
  115.          (setq l (cons a l))
  116.        )
  117.      )
  118.      (reverse l)
  119.     )
  120.     (t
  121.      (while (< (length l) n)
  122.        (setq r (Rani a b))
  123.        (if (< (- (length l) (length (vl-remove r l))) i)
  124.          (setq l (cons r l))
  125.        )
  126.      )
  127.      (reverse l)
  128.     )
  129.   )
  130. )
  131. ;;测试: (f 1 100 40 1)
  132. ;;;;;;;;;;;;;;;;;;;;;;;
  133. (defun poinpl(p pt);;:点是否在指定点表内
  134.   (equal(abs(apply'+(mapcar'(lambda(x y)(rem(-(angle x p)(angle y p))pi))pt(cons(last pt)pt))))pi 1e-8))
  135. (defun plinexy(e)
  136.   (mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))(entget e)))
  137.   )

  138. (defun c:sjgcd ( / ent11 pts ptlst ptlst1 e1 e2 minzb maxzb blc scale a b c n shuijishu i xzb yzb xinzb)
  139. (setq ent11 (car (entsel "\n请选择边界线:")))
  140. (setq pts (plinexy ent11))
  141. ;(setq zfu (poinpl (getpoint "\n.......") pts))
  142. (setq ptlst (vl-sort pts
  143.                    ;以下根据y坐标对表排序
  144.    '(lambda (e1 e2)
  145.             (< (cadr e1) (cadr e2) )
  146.          )   )    )

  147. (setq ptlst1 (vl-sort pts
  148.                    ;以下根据x坐标对表排序
  149.    '(lambda (e1 e2)
  150.             (< (car e1) (car e2) )
  151.          )   )    )

  152. (setq minzb (list (car(car ptlst1))  (cadr(car ptlst))                  )    )
  153. (setq maxzb (list (car(last ptlst1))  (cadr(last ptlst))                  )    )
  154. ;(command "rectangle" minzb maxzb)
  155.   (vl-load-com) ;将 Visual LISP 扩展功能加载到 AutoLISP
  156.      (setq blc (getint "\n请输入比例尺1:<500>"))
  157.   (if (= blc nil)(setq blc 500))
  158.   (setvar 'userr1 blc);设置比例尺
  159. (setq scale (* 0.001 blc));缩放比例
  160. (setq a (getreal "\n随机数下限(不要超过3位小数):"))
  161.            (setq b (getreal "\n随机数上限(不要超过3位小数):"))
  162.            (setq c (getint "\n随机数个数:"))
  163.            (setq n (getint "\n随机数最多重复次数:"))
  164. (command "_.units" "2" "8" "1" "8"  "0" "n")
  165. (princ)
  166. (setvar "dimzin" 8)

  167. (setq shuijishu (RandList  (* a (expt 10 3)) (* b (expt 10 3))  c n) )
  168.   (setvar "dimzin" 0)



  169. (setq i 0)
  170. (repeat c

  171. (if   (and (setq xzb (car(randlist (* (atof (rtos (car minzb)2 3 ) )  1000) (* (atof (rtos (car maxzb)2 3 ) )  1000)  c n) ))
  172.             (setq yzb (car(randlist (* (atof (rtos (cadr minzb)2 3 ) )  1000) (* (atof (rtos (cadr maxzb)2 3 ) )  1000)  c n) ))
  173.    (= (poinpl (list (/ xzb 1000) (/ yzb 1000) ) pts)  T)
  174.    )
  175.    (progn
  176. (setq xinzb (list (/ xzb 1000) (/ yzb 1000) (/ (nth i shuijishu) 1000)  )   )
  177.    (gxl-cs:gcd  xinzb (/ (nth i shuijishu) 1000) scale)
  178.    (setq i (1+ i))
  179.    ) )
  180.   


  181.   
  182.   )

  183. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
llsheng_73 + 1 + 50 具体用途不明,但创意新颖

查看全部评分

发表于 2015-9-18 21:16:14 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-9-18 21:26 编辑

看样子个数没有被保证,因为只生成了要求的100个数据,但在范围外的被排除了。。。
RandList按指定要求生成随机数表很强大。。。   实际上你可以象高程数据一样先在把坐标数据生成了(重复次数限定为1),可以让它生成的比实际需要的多,比如1.5倍甚至2倍,然后再一个个判断是否在指定多边形范围内,直到够了指定个数为止     
 楼主| 发表于 2015-9-18 21:31:23 | 显示全部楼层
llsheng_73 发表于 2015-9-18 21:16
看样子个数没有被保证,因为只生成了要求的100个数据,但在范围外的被排除了。。。
RandList按指定要求生成 ...

对 个数没有被保证 有些范围外被删除了
发表于 2015-9-18 22:17:27 | 显示全部楼层
是建随机地形图吗?
发表于 2021-6-27 23:05:45 | 显示全部楼层
使用出现:
命令:
没有满足要求的结果
没有满足要求的结果

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

本版积分规则

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

GMT+8, 2024-11-6 07:11 , Processed in 0.150638 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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