马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 marting 于 2016-9-25 23:07 编辑
N多的函数,贴几个:
![](source/plugin/imc_colorcode/images/loading.gif) - ;===============返回线上指定参数加一微值的点=========================
- (defun Gfun-cx-pt (diann jiaod1 jiaod2 name x / cs obj pt)
- (setq
- obj (vlax-ename->vla-object name)
- cs (vlax-curve-getDistAtPoint obj jiaod2)
- )
- (if cs
- (progn
- (setq pt (vlax-curve-getPointAtDist obj (+ cs x)))
- (if pt
- (if (inters diann pt jiaod1 jiaod2)
- (setq pt (vlax-curve-getPointAtDist obj (- cs x)))
- )
- )
- )
- )
- (if (not pt) (setq pt (polar jiaod2 (angle jiaod2 diann) 0.1)))
- (list (car pt) (nth 1 pt))
- )
- ;===============点到空间多段线的最短垂点=========================
- (defun Gfun-ptoln-lw (p xian / ang_12 ang_2n ang_n1 dian dian_p i)
- (setq dian_p (append (car xian) '(0)));加z坐标
- (setq i 0)
- (while (< i (- (length xian) 1))
- (setq dian (Gfun-ptoln p (nth i xian) (nth (+ i 1) xian)))
- (setq ang_n1 (angle dian (nth i xian)))
- (setq ang_2n (angle (nth (+ i 1) xian) dian))
- (setq ang_12 (angle (nth i xian) (nth (+ i 1) xian)))
- (cond
- ((equal_ang ang_n1 ang_12 0.00000001) (setq dian (append (nth i xian) '(0))))
- ((equal_ang ang_2n ang_12 0.00000001) (setq dian (append (nth (+ i 1) xian) '(0))))
- )
- (if (< (distance p dian) (distance p dian_p))
- (setq dian_p dian)
- )
- (setq i (1+ i))
- )
- (reverse (cdr (reverse dian_p)));去掉z坐标
- )
- ;======================================================================
- ;===========用于方位角的比较0度与359度只差1度(,或空格分隔字段)========
- ;======================================================================
- (defun equal_ang (j1 j2 jd / y);只考虑弧度
- (cond
- ((and (/= (type j1) 'INT) (/= (type j1) 'REAL)) (setq y nil))
- ((and (/= (type j2) 'INT) (/= (type j2) 'REAL)) (setq y nil))
- ((and (/= (type jd) 'INT) (/= (type jd) 'REAL)) (setq y nil))
- ((equal j1 j2 jd) (setq y t))
- ((equal (- j1 j2) (* 2.0 pi) jd) (setq y t))
- ((equal (- j2 j1) (* 2.0 pi) jd) (setq y t))
- ; ((equal (- j2 j1) 360.0 jd) (setq y t))
- ; ((equal (- j1 j2) 360.0 jd) (setq y t))
- (t (setq y nil))
- )
- )
- ;===============判断某值是否等于表中的一项=========================
- (defun equal_or_bak (a biao jd / x y)
- (mapcar '(lambda(x)
- (if (equal a x jd) (setq y t))
- )
- biao
- )
- y
- )
|