明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 10484|回复: 42

框选画云线程序

  [复制链接]
发表于 2011-1-28 12:55 | 显示全部楼层 |阅读模式
本帖最后由 yucpp 于 2011-1-28 13:24 编辑


;;此云线使用pline做的,为了使之醒目,pline的开始点宽度为0,结束点宽度570, (command "w" 0 570 "a")
;;这两个值是我做程序的时候调试写的,用户要自己改下,否则画出的线条可能不合适
;;程序命令:kk

;;find_peak_point_left 找出选择框的左上角点
(defun find_peak_point_left (aa0 bb0 / calu_pos_ori_x calu_pos_ori_y)
  (if (> (car aa0) (car bb0))
    (setq calu_pos_ori_x (car bb0))
    (setq calu_pos_ori_x (car aa0))
  )
  (if (> (cadr aa0) (cadr bb0))
    (setq calu_pos_ori_y (cadr aa0))
    (setq calu_pos_ori_y (cadr bb0))
  )
  (setq calu_pos_ori (list calu_pos_ori_x calu_pos_ori_y 0))     
)
;;find_peak_point_right 找出选择框的右下角点
(defun find_peak_point_right (aa0 bb0 / calu_pos_ori_x calu_pos_ori_y)
  (if (< (car aa0) (car bb0))
    (setq calu_pos_ori_x (car bb0))
    (setq calu_pos_ori_x (car aa0))
  )
  (if (< (cadr aa0) (cadr bb0))
    (setq calu_pos_ori_y (cadr aa0))
    (setq calu_pos_ori_y (cadr bb0))
  )
  (setq calu_pos_ori (list calu_pos_ori_x calu_pos_ori_y 0))     
)
(defun c:kk ()
  (setq oldos (getvar "osmode"))
  (setq aa_point (getpoint "\n点取云线起点:"))
  (setq bb_point (getcorner aa_point "\n点取云线终点:"))
  (setq s_point (find_peak_point_left aa_point bb_point));左上角点
  (setq e_point (find_peak_point_right aa_point bb_point));右下角点
  (setq AllXyList nil)
  (setvar "cmdecho" 0)
  (setq dengfen 5)   ;等分20份
  (if (<= (abs (- (car e_point) (car s_point)))
   (abs (- (cadr e_point) (cadr s_point)))
      )
    (setq steplen (/ (abs (- (car e_point) (car s_point))) dengfen))
    (setq steplen (/ (abs (- (cadr e_point) (cadr s_point))) dengfen))
  )     ;if 步长
  ;;下面计算应该生成的圆弧个数,实际上短边方向是已知的,不过再判断一次比较方便
  (setq x_num (fix (/ (abs (- (car e_point) (car s_point))) steplen)))
     ;x方向数量
  (setq y_num (fix (/ (abs (- (cadr e_point) (cadr s_point))) steplen)))
     ;y方向数量
  (setq s_xunhuan s_point
e_xunhuan e_point
  )
  ;;下面计算所有的点坐标,并存入一个表中供调用
  (repeat x_num
    (setq next_point
    (list (+ (car s_xunhuan) steplen)
   (cadr s_xunhuan)
   (caddr s_xunhuan)
    )
    )     ;计算下一个点
    (setq AllXyList (cons s_xunhuan AllXyList)) ;收集坐标点
    (setq s_xunhuan next_point)
  )     ;计算x方向坐标,方向从左向右
  (repeat y_num
    (setq next_point
    (list (car s_xunhuan)
   (- (cadr s_xunhuan) steplen)
   (caddr s_xunhuan)
    )
    )     ;计算下一个点
    (setq AllXyList (cons s_xunhuan AllXyList)) ;收集坐标点
    (setq s_xunhuan next_point)
  )     ;计算y方向坐标,方向从上到下
  (repeat x_num
    (setq next_point
    (list (- (car s_xunhuan) steplen)
   (cadr s_xunhuan)
   (caddr s_xunhuan)
    )
    )     ;计算下一个点
    (setq AllXyList (cons s_xunhuan AllXyList)) ;收集坐标点
    (setq s_xunhuan next_point)
  )     ;计算x方向坐标,方向从右向左
  (repeat y_num
    (setq next_point
    (list (car s_xunhuan)
   (+ (cadr s_xunhuan) steplen)
   (caddr s_xunhuan)
    )
    )     ;计算下一个点
    (setq AllXyList (cons s_xunhuan AllXyList)) ;收集坐标点
    (setq s_xunhuan next_point)
  )     ;计算y方向坐标,方向从下到上
  (setq AllXyList (reverse (cons s_point AllXyList)))
     ;把起点的坐标加进去,构成闭合图形
  (setvar "osmode" 0)
  (command ".pline")
  (setq FriFlags 0)
  (foreach x AllXyList
    (command x)    ;这个command是关键
    (command "w" 0 570 "a")
    (if (= FriFlags 0)
      (progn
(command "a" -120)
(setq FriFlags 1)
      )
      (progn
(command -120)
(setq FriFlags (1+ FriFlags))
      )
    )
  )     ;foreach   
  (command (car AllXyList) "");如此才能结束pline
   (setvar "osmode" oldos)
)






本帖子中包含更多资源

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

x
发表于 2011-1-28 18:33 | 显示全部楼层
楼主有心了,不过有个更加简单的画这种云线的方法,先用LISP 生成一个矩形,再把矩形转换成云线,几句话就搞定了,运行起来也更快。
 楼主| 发表于 2011-1-28 21:42 | 显示全部楼层
LIFEI18 发表于 2011-1-28 18:33
楼主有心了,不过有个更加简单的画这种云线的方法,先用LISP 生成一个矩形,再把矩形转换成云线,几句话就搞 ...

这位兄弟的方法我倒不会,可否告诉下操作过程?其实我编这个程序主要是因为那天突然发现pline和command可以如此奇妙的组合使用,甚至其他的cad命令也可以有这种灵活的调用方法,于是就找几段代码凑了这个程序。
现在基本上不再画图了,挺怀念的,呵呵。
发表于 2011-1-29 20:22 | 显示全部楼层
使用COMMAND函数掉用CAD本身画云线命令,将最后生成的对象转换成云线,就行了,

(command "_.rectang" pt1 pt2 "")
(command "_.revcloud" "o" (entlast) "n" "")
发表于 2011-2-4 16:48 | 显示全部楼层
太强了!
发表于 2011-2-4 16:49 | 显示全部楼层
太强了!
发表于 2011-7-8 10:09 | 显示全部楼层
不错的东西。
发表于 2011-7-31 21:12 | 显示全部楼层
谢谢大师们!
发表于 2011-8-11 09:57 | 显示全部楼层
感谢楼主分享!
发表于 2011-8-14 09:18 | 显示全部楼层
虽然用到的不多,感谢分享!~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2018-10-18 00:20 , Processed in 0.264442 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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