树櫴希德 发表于 2015-12-31 23:01:57

奇葩水深点生成数据文件,求改进

(DEFUN VXS (E /)
      (CDR (ASSOC 10 (ENTGET E)))


)
(DEFUN VXS1 (E /)
      (CDR (ASSOC 1 (ENTGET E)))


)
(defun get_inpoint (blockname)
(setq in_point(cdr (assoc 10 (entget blockname))))
in_point
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun get_inpointname (blockname)
(setq in_point(cdr(car(entget blockname))))
in_point
)



(setq ssa (ssget '((0 . "TEXT") (8 . "0"))))
                (setq ii   0
                      no0
                  )
                  (repeat (sslength ssa)
                     (setq en (ssname ssa ii)
                            ptb (vxs en)
          pzx (append pzx (list ptb))
         ii(1+ ii)               )
      )

(setq pzx1(getpoint "\n 文字起点"))
(setq pzx2(getpoint "\n 第二文字终点"))

(setq lst(vl-sort pzx'(lambda(x y)(and (equal (distance pzx1 pzx2) (distance x y) 0.3)

                                       (equal (angle pzx1 pzx2) (angle x y) 0.002)

            (<(car x)(car y))(>(cadr x)(cadr y))
               )      )))





(defun divlst(lst n / a b)
    (while lst(setq b nil)
      (repeat(min(length lst)n)(setq b(cons(car lst) b)lst(cdr lst)))
      (setq a(cons b a)))
    (mapcar'reverse(reverse a)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun testlsp(lst x1 x2 / a b d l)
(setq lst(vl-sort lst'(lambda(x y)(and(<(car x)(car y))(<(cadr x)(cadr y)))))
d(distance x1 x2))
(while lst
    (if(setq a(car lst)
   b(vl-remove-if-not'(lambda(x)(equal(distance x a)d 0.3))(cdr lst)))
      (setq b(cons a b)
    l(cons b l)
    lst(repeat(length b)
(setq a(car b)
       b(cdr b)
       lst(vl-remove a lst))))
      (setq lst(cdr lst))))
l)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;(setq lst nilnewlst nil x1 0)
(setq fp(getfiled "打开数据文件" "C:\\" "dat" 5)
fp(if fp(open fp"w")))
(foreach x (testlsp lst pzx1 pzx2)

(repeat (setq k (sslength ssa))
    (if(and (setq e (ssname ssa (setq k (1- k ))))
       (setq en (entget e))
)
      (progn

(if (member (cons 10 (car x)) en)
    (setq pzx3(VXS1 e))
    ;(setq en (cons x en))
)
      )
    )
)

(repeat (setq k (sslength ssa))
    (if(and (setq e (ssname ssa (setq k (1- k ))))
       (setq en (entget e))
)
      (progn

(if (member (cons 10 (cadr x)) en)
    (setq pzx4(VXS1 e))
    ;(setq en (cons x en))
)
      )
    )
)

(setq pzx5(mapcar '(lambda(x y) (* 0.5(+ x y)))(car x)(cadr x)))

(setq pzx6(strcat "0" ",,"(rtos (car pzx5)2 3)","(rtos (cadr pzx5)2 3)","(strcat pzx3"."pzx4)"\n"))

;(command "rectangle" (car x) (cadr x))

(write-line pzx6 fp)


)


(close fp)

llsheng_73 发表于 2016-1-3 18:18:09

本帖最后由 llsheng_73 于 2016-1-3 18:19 编辑

1当小数部分为0时,不会出现代表小数的文字。这种情况下需要设置小数为0而不是将其排除,其点位可参考前一点计算出的位置
2不是所有整数部分和小数部分两个文字的插入坐标差值都是相同的。所以整数和小数的匹配是一个问题,可以考虑采用代表整数和小数的文字的距离不超过多少并且小数在右边进行组合,而不是采用固定的距离和角度
进行限制,另外,对于点位的计算如果考虑整数多于一位的情况刚不能用这两个文字的10组取中数
3程序基本无章法,这方面需要提高,比如反复写同一个东东或者不断修改已经写经写好的程序

树櫴希德 发表于 2016-1-5 16:41:20

llsheng_73 发表于 2016-1-3 18:18 static/image/common/back.gif
1当小数部分为0时,不会出现代表小数的文字。这种情况下需要设置小数为0而不是将其排除,其点位可参考前一点 ...

是啊。我主要是看这个烂图气人,完成大部分,其它自己搞。希望烂图千年一遇

知行ooo李肖坪 发表于 2016-1-6 19:14:36

同步学习中………………

gzxl 发表于 2016-1-15 12:21:23

烂图

冰神 发表于 2016-2-15 21:57:46

这是海图水深的标准标法呀~~~

song宋_74729 发表于 2016-2-19 21:10:24

如何做到的請大哥教一下
页: [1]
查看完整版本: 奇葩水深点生成数据文件,求改进