明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2927|回复: 9

[LISP]求助,一个画Pline线,并自动移屏的函数

[复制链接]
发表于 2004-8-19 20:19:00 | 显示全部楼层 |阅读模式
我要要一个画Plien线的函数,最好不用Pline命令,并且在话到屏幕边缘时,能自动将最近画的点位移至屏幕中间。
希望能有高手帮我写一个
发表于 2004-8-19 21:43:00 | 显示全部楼层
  1. (DEFUN C:PP   (/ oldEcho FirstPt ptlst NextPt)
  2.    (setq oldEcho (getvar "CMDECHO"))
  3.    (setvar "CMDECHO" 0)
  4.    (setq FirstPt (GETPOINT "\nFirst point: "))
  5.    (setq ptlst (list FirstPt))
  6.    (while FirstPt
  7.        (setq NextPt (getpoint FirstPt "\nNext point: "))
  8.        (if  NextPt
  9.            (progn
  10.   (command "zoom" "c" NextPt "")
  11.   (setq ptlst (cons NextPt ptlst))
  12.   (GrVecs (getvlist ptlst))
  13.   )
  14.            )
  15.        (setq FirstPt NextPt)
  16.        )
  17.    (if (> (length ptlst) 1)
  18.        (progn
  19.            (command "pline")
  20.            (foreach pt   ptlst
  21.   (command pt))
  22.            (command "")
  23.            )
  24.        )
  25.    (setvar "CMDECHO" oldEcho)
  26.    (princ)
  27.    )
  28. ;;;;;--------------------------
  29. (defun getvlist   (lst / RetLst idx)
  30.    (setq idx 0)
  31.    (repeat (1- (length lst))
  32.        (setq RetLst
  33.        (append
  34.            RetLst
  35.            (list (list (car (nth idx lst)) (cadr (nth idx lst))))
  36.            (list (list (car (nth (1+ idx) lst))
  37.        (cadr (nth (1+ idx) lst))))))
  38.        (setq idx (1+ idx))
  39.        )
  40.    RetLst
  41.    )
发表于 2004-8-20 18:11:00 | 显示全部楼层
好程序
 楼主| 发表于 2004-8-20 19:46:00 | 显示全部楼层
不好意思,不是很完善哦,提两点意见可以吗? 1.在每次输入点位的时候,都进行从新定位,速度很慢,特别是带有影象的时候
2.没有回推,和闭合选项,画线工具不完美 建议: 1.根据屏幕高度和当前点位的一定比例(比如当前点位到了屏幕上方多少,移屏),将当前屏幕中点移至当前点位. 2.用Entmod生成实体速度比较快
发表于 2004-8-20 20:03:00 | 显示全部楼层
提的好啊
发表于 2004-8-23 12:17:00 | 显示全部楼层
I suggest you use  the wheel on your mouse...
  1. (DEFUN C:PP   (/ oldEcho FirstPt ptlst NextPt)
  2.    (setq oldEcho (getvar "CMDECHO"))
  3.    (setvar "CMDECHO" 0)
  4.    (setq FirstPt (GETPOINT "\nFirst point: "))
  5.    (setq ptlst (list FirstPt))
  6.    (while FirstPt
  7.        (setq NextPt (getpoint FirstPt "\nNext point: "))
  8.        (if NextPt
  9.            (progn
  10.                (if (ChkCloseToEdge NextPt 0.9)
  11.                    (command "zoom" "c" NextPt ""))
  12.                (setq ptlst (cons NextPt ptlst))
  13.                (GrVecs (getvlist ptlst))
  14.                )
  15.            )
  16.        (setq FirstPt NextPt)
  17.        )
  18.    (if (> (length ptlst) 1)
  19.        (EntMakeLWPolyline ptlst)
  20.        )
  21.    (setvar "CMDECHO" oldEcho)
  22.    (princ)
  23.    )
  24. ;;;;;--------------------------
  25. (defun getvlist   (lst / RetLst idx)
  26.    (setq idx 0)
  27.    (repeat (1- (length lst))
  28.        (setq RetLst
  29.                      (append
  30.                          RetLst
  31.                          (list (list (car (nth idx lst)) (cadr (nth idx lst))))
  32.                          (list (list (car (nth (1+ idx) lst))
  33.                                                  (cadr (nth (1+ idx) lst))))))
  34.        (setq idx (1+ idx))
  35.        )
  36.    RetLst
  37.    )
  38. ;;;
  39. (defun ChkCloseToEdge   (p th / vc vx vy)
  40.    (setq vc (getvar "VIEWCTR")
  41.                vy (getvar "VIEWSIZE")
  42.                vx (* vy
  43.                            (/ (car (getvar "SCREENSIZE")) (cadr (getvar "SCREENSIZE")))))
  44.    (if (and (< (- (car vc) (* th vx 0.5))
  45.                            (car p)
  46.                            (+ (car vc) (* th vx 0.5)))
  47.                      (< (- (cadr vc) (* th vy 0.5))
  48.                            (cadr p)
  49.                            (+ (cadr vc) (* th vy 0.5))))
  50.        nil
  51.        T
  52.        )
  53.    )
  54. (defun EntMakeLWPolyline   (plist)
  55.    (entmake
  56.        (append
  57.            (list
  58.                '(0 . "LWPOLYLINE")
  59.                '(100 . "AcDbEntity")
  60.                '(100 . "AcDbPolyline")
  61.                (cons 90 (length plist))
  62.                )
  63.            (mapcar '(lambda (x) (cons 10 x)) plist)
  64.            )
  65.        )
  66.    )
发表于 2004-8-25 19:34:00 | 显示全部楼层
第二个好,用数组也没有错误了
 楼主| 发表于 2004-8-25 23:16:00 | 显示全部楼层
谢了,好多了,可惜还是不能回推,不过给了我很大的启发和思路,非常感谢
发表于 2013-8-15 15:33:15 | 显示全部楼层
……支持支持,路过,学习。
发表于 2013-9-1 16:15:57 | 显示全部楼层
感觉第二个不如第一个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 10:01 , Processed in 0.202058 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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