注册 登录
明经CAD社区 返回首页

caoyin的个人空间 http://www.mjtd.com/?213172 [收藏] [复制] [分享] [RSS]

日志

绘制波浪线

热度 4已有 1150 次阅读2011-8-4 11:08 |个人分类:LISP|系统分类:开发

;;; WAVES.lsp
;;; by caoyin @ 2011.08.04
;;; 绘制波浪线
;;; -----------------------------------------------------------------
(defun C:WAVES (/ R2S P1 PA BU TAG P2 ANG LST I OBJ BU)
  (defun R2S (REL / DZIN)
    (setq DZIN (getvar "DIMZIN"))
    (setvar "DIMZIN" 0)
    (setq REL (rtos REL 2 (getvar "LUPREC")))
    (setvar "DIMZIN" DZIN)
    REL
  )
  (if (setq P1 (getpoint "\n指定起点: "))
    (progn
      (or *WAVES-PA* (setq *WAVES-PA* 100.0))
      (or *WAVES-BU* (setq *WAVES-BU* 0.5))
      (setq TAG T PA *WAVES-PA* BU *WAVES-BU*)
      (while (or TAG (not (vl-consp P2)))
        (mapcar
          'princ
          (list "\n当前设置: 段长 = " (R2S *WAVES-PA*) ",凸度 = " (R2S *WAVES-BU*))
        )
        (initget "Set")
        (setq P2 (getpoint P1 "\n指定终点或 [设置(S)]: "))
        (cond
          ((= P2 "Set")
           (or (setq PA (getdist (strcat "\n指定段长 <" (R2S *WAVES-PA*) ">: ")))
               (setq PA *WAVES-PA*)
           )
           (while (and (setq BU (getdist (strcat "\n指定凸度 <" (R2S *WAVES-BU*) ">: ")))
                       (or (< BU 0) (> BU 1.5))
                       (princ "\n凸度应为0~1.5之间的数字。")
                  )
           )
           (or BU (setq BU *WAVES-BU*))
          )
          ((vl-consp P2)
           (if (> (setq DI (distance P1 P2)) PA)
             (setq TAG nil)
             (mapcar 'princ (list "\n两点之间距离" (R2S DI) " 不能小于段长 " (R2S PA) "。"))
           )
          )
        )
      )
      (setq P1  (list (car P1) (cadr P1))
            P2  (list (car P2) (cadr P2))
            ANG (angle P1 P2)
            LST P1
            I   (fix (/ DI PA))
      )
      (repeat I
        (setq P1  (polar P1 ANG PA)
              LST (append LST P1)
        )
      )
      (setq OBJ (vla-AddLightweightPolyline
                    (vlax-get
                      (vla-get-ActiveDocument (vlax-get-acad-object))
                      (if (> (getvar 'CVPORT) 1) 
                        'ModelSpace
                        'PaperSpace
                      )
                    )
                    (vlax-make-variant
                      (vlax-safearray-fill
                        (vlax-make-safearray
                          5
                          (cons 0 (1- (length LST)))
                        )
                        LST
                      )
                    )
                  )
      )
      (setq *WAVES-PA* PA *WAVES-BU* BU)
      (repeat (setq I (/ (length LST) 2))
        (vla-SetBulge OBJ (setq I (1- I)) (setq BU (- BU)))
      )
    )
  )
  (princ)
)
 已同步至 caoyin的微博

路过

雷人
3

握手

鲜花

鸡蛋

刚表态过的朋友 (3 人)

发表评论 评论 (1 个评论)

回复 lzgxklable 2011-9-1 20:22
(vl-load-com)
(princ "选择辅助线\n")
(setq m_ent1 (car(entsel)))
  (setq ent1_s(vlax-curve-getStartPoint p1))
(print "请选择需要扫描的区域:")
(setq ss  (ssget))
(setq lengss (sslength ss))
(setq bb 0)

(while (< bb lengss)
(setq p1 (ssname ss bb))
(setq ed (entget p1))
下面不知道该如何写了

即把ss内的所有曲线按照到ent-s点的距离由小到大重新排序

望高手提供帮助

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-5-15 23:55 , Processed in 0.099861 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部