乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 66|回复: 5

刚刚写完的选择集标注小程序,不足之处,多多指教!

[复制链接]

8

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
48
发表于 2003-10-31 17:16:00 | 显示全部楼层 |阅读模式
;    ************************************************
;    *                                                                                *
;    *                       选 择 集 标 注( X轴)                              *
;    *                                                                                *
;    ************************************************
; P1 标注左端点,P2 标注右端点,P3 用来控制标注线的
; 方向、距离(上正下负),PIST 标注点的选择集
(defun ssdim (p1 p2   p3   pist        /    px          py   pt1  pt2         pt3  n           n1
                 px1  ll1  ll        ll2  str  n2   o1   o2         pox  ss   ss1
                )
  ;;;对选择集中点的X坐标进行排序
  (setq o1 (length pist)
        o2 0
        ss nil
        ss1 pist)
  (repeat o1
    (setq pox (car (nth o2 pist)))
    (setq ss (cons pox ss))
    (setq o2 (+ o2 1))
    )
  (setq pist (reverse ss))
  ;;;判断选定标注的位置
  (if (>= p3 0.0)
    (if        (>= (cadr p1) (cadr p2))
      (setq pt1 p1)
      (setq pt1 (polar p2 pi (- (car p2) (car p1))))
    )
    (if        (>= (cadr p1) (cadr p2))
      (setq pt1 (polar p2 pi (- (car p2) (car p1))))
      (setq pt1 p1)
    )
  )
  (setq ss1 (sort ss1 2))
  (setq pt2 (last ss1))
  T3 为标注的基点
  (if (>= p3 0.0)
    (if (>= (cadr pt1) (cadr pt2))
      (setq pt3 (polar pt1 hpi p3))
      (setq pt3 (polar (polar pt2 pi (- (car pt2) (car pt1))) hpi p3))
      )
    (if (>= (cadr pt1) (cadr pt2))
      (setq pt3 (polar (polar pt2 pi (- (car pt2) (car pt1))) hpi p3))
      (setq pt3 (polar pt1 hpi p3))
      )
    )
  ;;;                  
  (setq        n  (length pist)
        n1 1
        px  (car pt3)
  )
  (setq px1 (nth 0 pist))
  (setq ll (- px1 px)
        ll2 0)                                ;第一个要标注点离左参照点的距离
   ;;;                 
  (repeat (- n 1)
    (setq px (nth n1 pist))
    (setq ll1 (- px px1))
    (setq ll2 (+ ll ll2))
    (if        (> (abs (- ll1 ll)) 0.00001)
      (progn
        (if (/= ll2 0)
          (progn
            (setq pt2 (polar pt1 0 ll2))
            (setq n2 (/ ll2 ll))
            (if        (> n2 1.0)
              (setq str (strcat (rtos n2) "*" (rtos (* 100.0 ll))))
              (setq str (rtos (* 100.0 ll2) 2 1))
            )  
          )
          (progn
            (setq pt2 (polar pt1 0 ll))
            (setq str (rtos (* 100.0 ll) 2 1))
          )
        )
        (if (or (/= ll2 0) (/= ll 0))
          (command "dim1" "hor" pt1 pt2 pt3 str)
        )
        (setq pt1 pt2
              ll2 0)
      )
    )
    (setq ll  ll1
          px1 px
         
    )
    (if        (= (- n 1) n1)
      (progn
        (if (> (abs (- ll1 ll)) 0.00001)
          (progn
            (setq pt2 (polar pt1 0 ll1))
            (setq str (rtos (* 100.0 ll1) 2 1))
          )
          (progn
            (setq ll2 (+ ll2 ll))
            (setq pt2 (polar pt1 0 ll2))
            (if (/= ll 0)
            (setq n2 (/ ll2 ll))
              )
            (if        (and (/= ll 0) (> n2 1.0))
              (setq str (strcat (rtos n2) "*" (rtos (* 100.0 ll))))
              (setq str (rtos (* 100.0 ll2) 2 1))
            )
          )
        )
        (if (or (/= ll2 0) (/= ll 0))
          (command "dim1" "hor" pt1 pt2 pt3 str)
        )
      )
    )
    (setq n1 (+ n1 1))
  )
  (if (/= (car pt2) (car p2))
    (command "dim1" "hor" pt2 p2 pt3 "")
  )
)
;;;功能:把表对从小到大排列
;;;参数:LIS要排序的表对、Num个示对表对第几个排序
(defun sort( lis num / i j k INDEX LEN LIS1 M)
  (setq len (length lis))
  (while (> len 0)
    (setq k 0)
    (setq j 1)
    (while ( (nth num (nth k lis)) (nth num (nth j lis)) )
         (setq k j)
      )
      (setq j (+ j 1))
    )
    (setq index (append index (list (nth k lis))))
      
  
    ;;;把K前面的放到LIS1中去
    (setq m 0)
    (setq lis1 nil)
    (while (< m  k )
      (setq lis1 (append lis1 (list (nth m lis))))
      (setq m (+ m 1))
    )
    ;;;把K后面的放到LIS1中去
    (setq m (+ k 1))
    (while (< m Len)
      (setq lis1 (append lis1 (list (nth m lis))))
      (setq m (+ m 1))
    )
    (setq lis lis1)
   
    (setq len (length lis))
  )
  
  ;;;这是我们要的结果
  (setq index index)
)
回复

使用道具 举报

36

主题

201

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
345
发表于 2003-10-31 17:25:00 | 显示全部楼层
到底是程序还是函数???
你给点提示讪,比如命令是什么,and so on
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-10-31 18:50:00 | 显示全部楼层
函数不是程序?
不都一样吗,,只不过函数不能象命令那样用
回复

使用道具 举报

8

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
49
发表于 2003-11-10 11:56:00 | 显示全部楼层
merakn你好
我看了你编写的这个程序,觉得有些地方看不懂,能麻烦你介绍一下这个程序实现的功能以及你实现的一些思路吗?谢谢!
回复

使用道具 举报

8

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
49
发表于 2003-11-10 11:58:00 | 显示全部楼层
merakn你好
我看了你编写的这个程序,觉得有些地方看不懂,能麻烦你介绍一下这个程序实现的功能以及你实现的一些思路吗?谢谢!
回复

使用道具 举报

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-10 12:00:00 | 显示全部楼层
一看那么长的程序,我就头晕!不过,对排序问题,我感兴趣!虽然没读懂程序,但是先顶你一下!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 21:26 , Processed in 0.781088 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表