明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1856|回复: 5

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

[复制链接]
发表于 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 (< j len)
      (if (> (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)
)
发表于 2003-10-31 17:25:00 | 显示全部楼层
到底是程序还是函数???

你给点提示讪,比如命令是什么,and so on
发表于 2003-10-31 18:50:00 | 显示全部楼层
函数不是程序?
不都一样吗,,只不过函数不能象命令那样用
发表于 2003-11-10 11:56:00 | 显示全部楼层
merakn你好
我看了你编写的这个程序,觉得有些地方看不懂,能麻烦你介绍一下这个程序实现的功能以及你实现的一些思路吗?谢谢!
发表于 2003-11-10 11:58:00 | 显示全部楼层
merakn你好
我看了你编写的这个程序,觉得有些地方看不懂,能麻烦你介绍一下这个程序实现的功能以及你实现的一些思路吗?谢谢!
发表于 2003-11-10 12:00:00 | 显示全部楼层
一看那么长的程序,我就头晕!不过,对排序问题,我感兴趣!虽然没读懂程序,但是先顶你一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 04:17 , Processed in 0.169305 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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