找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 980|回复: 7

[求助] [求助]:xyp64进入看看(能否加个回退功能谢谢)

[复制链接]
发表于 2005-4-15 09:11:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
[编程申请]:编一个画线程序?
(defun c:test ()
  (princ "第1点坐标")
  (setq    x (getreal "\nX坐标 : ")
    y (getreal "\nY坐标<退出> : ")
    j 1
  )   
  (command "pline")
  (while (and x y)
    (command (list x y))
    (princ "\n")
    (princ (strcat "第" (rtos (setq j (1+ j))) "点坐标"))
    (setq x (getreal "\nX坐标<退出> : "))
    (if    x
      (setq y (getreal "\nY坐标<退出> : "))
    )
  )
  (command "")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-15 15:33:00 | 显示全部楼层
请试试下面的程序,他的画线功能比较强!
;;;
;;本函数返回 Nil or 坐标,st 为T or nil,表示可否返回字符串
(defun InputPoint(pp prompt$ st / p p1)
  (setvar "osmode" 173)
    (while (not (progn
                      (initget 129 "  ")
                      (if pp (setq P (getpoint pp (strcat "\n" prompt$))) (setq P (getpoint (strcat "\n" prompt$))))
                      (setq p1 p)
                      (if (= 'LIST (type p))
                          (setq p p)
                          (if (= p "")
                              t
                              (progn (setq p (read p))
                                                          (if st
                                   (if (= 'INT (type p))
                                     (setq p (searchpoint p))
                                     (setq p p1)
                                    )
                                                             (if (= 'INT (type p))
                                     (setq p (searchpoint p))
                                     (setq p nil)
                                    )
                                                             )
                                 )
                             )
                          )
                        )
                  )
          (alert "请输入正确的点号或坐标!")
          )
  (setvar "osmode" 0)
   (if (= "" p) (setq p nil) (setq p p))
  )


(defun XianLu (/ pstart psecond pnext pfirst ptl Next)
  ;(setvar "OSMODE" 169)
   (setq ptl '() Next T)
   (setq pstart (inputpoint nil "\n输入起点 :" nil) pfirst pstart)
   (setq ptl (cons pstart ptl))
   (setq psecond (inputpoint pstart "\n第二点 :" nil))
   (IF (not psecond) (abcdefg))
   (setq ptl (cons psecond ptl))
   (command "pline" pstart psecond)
   (while Next
        ;|(progn (initget 129 "Close Undo  ")
                 (or (= 'LIST (type (setq pnext (inputpoint psecond (strcat "\nClose[Undo<" "下一点" ">]偏距 :") t))))
                                   (if (= 'STR (type pnext)) (/= "" pnext))
                    )                          
                ) |;
          (initget 129 "Close Undo  ")
          (setq pnext (inputpoint psecond (strcat "\nClose[Undo<" "下一点" ">]偏距 :") t))
          (if (= nil pnext) (setq pnext "Over"))
          (cond ((= "Over" pnext) (setq Next nil))
                ((= 'LIST  (type pnext)) (command pnext) (setq pstart psecond psecond pnext) (setq ptl (cons psecond ptl) Next T))
                ((= "C" (strcase (substr pnext 1 1))) (command pfirst) (SETQ PTL (CONS PFIRST PTL) Next nil))
                ((= "U" (strcase (substr pnext 1 1))) (if (> (length ptl) 2)
                                      (progn
                                           (command "u")
                                           (setq ptl (cdr ptl) psecond pstart pstart (cadr ptl))
                                           )
                                       (if (> (length ptl) 1)
                                           (progn (command "u")
                                                  (setq ptl (cdr ptl)  pstart pfirst psecond (inputpoint pstart "\n第二点 :" nil))
                                                  (if psecond
                                                    (progn (setq ptl (cons psecond ptl)) (command psecond))
                                                    (setq Next nil)
                                                    )
                                                 )
                                          )
                                      )
                       )
               
                ((= "R" (strcase (substr pnext 1 1)))
                        (setq pnext (atof (substr pnext 2)))
                        (if (equal 0.0 pnext 0.00001)
                              ()
                             (progn (setq ang1 (angle pstart psecond))
                                     (setq pstart psecond)
                                     (setq psecond (polar pstart (- ang1 (/ pi 2)) pnext))
                                     (command psecond)
                                     (setq ptl (cons psecond ptl) Next t)
                                    )
                              )
                    )
                 ((= "L" (strcase (substr pnext 1 1)))
                         (setq pnext (atof (substr pnext 2)))
                         (if (equal 0.0 pnext 0.00001)
                             ()
                             (progn (setq ang1 (angle pstart psecond))
                                  (setq pstart psecond)
                                 (setq psecond (polar pstart (+ ang1 (/ pi 2)) pnext))
                                 (command psecond)
                                 (setq ptl (cons psecond ptl) Next t)
                              )
                            )
                    )
                            ((= "E" (strcase (substr pnext 1 1)))
                                       (setq pnext (atof (substr pnext 2)))
                                       (if (equal 0.0 pnext 0.00001)
                                          ()
                                          (progn (setq ang1 (angle pstart psecond))
                                                 (setq pstart psecond)
                                                  (setq psecond (polar pstart ang1 pnext))
                                                 (command psecond)
                                                 (setq ptl (cons psecond ptl) Next t)
                                                )
                                          )
                               )
                         ((< 0 (atof pnext)) (command (atof pnext))
                                             (setq pnext (getvar "lastpoint"))
                                             (setq pstart psecond psecond pnext)
                                             (setq ptl (cons psecond ptl) Next T)
                          )
              )
         )
    (command "")
;(setvar "OSMODE" 0)
    (setq ptl (reverse ptl))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-15 22:14:13 | 显示全部楼层
楼上我想这样:
在画给定坐标点的直线时,需要通过键盘输入坐标值
。这样的情况下当然是利用右边的数字键盘输入较为方便
。但若直接使用AutoCAD的pLine命令画直线,在x和y两个
坐标值之间需要输入一个逗号“,”作为分隔,而数字键
盘区又没有该逗号,所以仍然不方便。能否编一个直线程序只要求用户输入坐标值,
而由程序自动调用pLine命令画出直线,并能提示第一点、第二点.......坐标.因此用户不用离开数字键盘区就能完成工作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-15 22:33:17 | 显示全部楼层
我劝你不要继续
实践证明这么做没什么效率
我一般在文本编辑软件里面写好xy值,存为scr文件,拉入cad即可
输入x y值的时候可用空格代替",",输入完成之后替换空格为",".
这么做方便核查,也方便修改,发现不对的地方,改文本格式的值,再次拉入cad即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-15 23:02:26 | 显示全部楼层
楼上说得对,可以先编个坐标数据文件,然后用程序读入:
[php]
;;;加载通用函数
;;;下载:http://www.xdcad.net/forum/showthread.php?s=&threadid=325268
(load "xyp_lib")

;;;数据画线
;;;文本格式的一组坐标点调入AutoCAD自动绘制段线或多线段
;;;已知一组 X、Y ,并且已写入一文件TXT1.TXT,要根据此文件让其自动用“PLINE”绘出。
;;;文件内容格式如下:
;;;X坐标 Y坐标 Z坐标
;|实例:
123 456
222 333
444 555
777 888
888 999
999 754
111 755
333 666
555 777
|;
(defun c:SJHX ()
  (cmdla0)
  (alert
    "数据格式:
  X坐标 Y坐标
  X坐标 Y坐标
  X坐标 Y坐标
  ..."
  )
  (prompt "\n\t稍候 ")
  (MKLA "建筑-红线" 1)
  (setq tn (getfiled "坐标数据文件(txt;dat;*)" "" "txt;dat;*" 2))
  (setq fle (findfile tn))
  (if (not fle)
    (setq fle (getfiled "请选择数据文件" "txt1" "txt;dat;*" 8))
  )
  (if fle
    (progn
      (setq fn (open fle "r"))
      (command "pline")
      (while (setq pt (read-line fn))
        (princ ".")
        (command (read (strcat "(" pt ")")))
      )
      (command "")
      (close fn)
    )
    (princ "\n未选择数据文件,退出")
  )
  (prompt " 完毕!")
  (cmdla1)
)
(PXYP "SJHX  (数据画线)")
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-16 12:13:19 | 显示全部楼层
(command (read (strcat "(" pt ")"))) 这段是什么意思?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-16 12:43:51 | 显示全部楼层
这个是把字符串转为表的基本手筋.
自己试试就清楚
(read (strcat "(" "这段 是什么 意思" ")")) ->(这段 是什么 意思)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-16 15:29:54 | 显示全部楼层
谢谢狂刀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 02:30 , Processed in 0.383843 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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