明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1780|回复: 6

meflying,请指教!!

[复制链接]
发表于 2003-6-13 11:33:00 | 显示全部楼层 |阅读模式
本帖最后由 meflying 于 2003-6-13 11:33:11 编辑

使用代码自动画线,通过读取规定的数据文件,格式为:代码,,X,Y,H
运行“PLINE”,然后在命令提示行:
输入第一点的代码xx,输入第二点的代码xx,。。。。
自动画出线来
发表于 2003-6-12 10:51:00 | 显示全部楼层

运行PLINE后的提示不是用户规定的,

既然是读取数据文件,为什么还要提示输入第一点代码,第二点代码?
读取数据文件后根据读出的代码直接画出直线不是更好吗?
还有,就是如果两个点的H不同,PLINE就画不出来了,
能否再说明白些?
 楼主| 发表于 2003-6-13 11:34:00 | 显示全部楼层

meflying,是这样!谢谢

本帖最后由 meflying 于 2003-6-13 11:34:46 编辑

思路是这样的,读取数据文件后(数据文件在附件)后,用代码去表示点坐标,如需要画线时,在命令提示行输入代码:第一点代码是2,第二点代码是3,第三点代码是5,。。。然后可以将输入的代码连成线。也就是用代码代替点得坐标。即输入代码3,则表示得list(200 200)。

本帖子中包含更多资源

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

x
发表于 2003-6-13 11:35:00 | 显示全部楼层

还有一些小问题

本帖最后由 meflying 于 2003-6-13 11:35:33 编辑

是meflying,不是myflying,我擅自改了一下,哈哈。。。

首先你到底要输入几点,是文件中的点都全部输入,还是以某种方式结束输入,另外就是我上次说过了,如果H不同,是不可以用PLINE的,我改用了LINE,结束输入点方式以一个空回车结束。程序没有做出错处理。
(defun read_l(str / n i slist stmp stmp2 slist in)
  (setq n (strlen str))
  (setq i 1)
  (setq in nil)
  (setq slist nil)
  (while (<= i n)
    (while (and (< i n) (/= (setq stmp (substr str i 1)) ","))
      (if (not in) (setq stmp2 stmp))
      (setq in t)
      (setq i (1+ i))
      (setq stmp2 (strcat stmp2 (substr str i 1)))
    )
    (if in (progn
        (setq slist (append slist (list (atoi (vl-string-right-trim "," stmp2)))))
        (setq in nil))
    )
    (setq i (1+ i))
  )
  slist
)

(defun read_f(fname index)
  (setq f (open fname "r"))
  (setq str (read-line f))
  (repeat index
    (setq str (read-line f))
  )
  str
)

(defun c:drawline( / fname n i str str_start str_end strDxf)
  (setq fname "d:\\abc.txt")
  (setq n 1)
  (setq i 1)
  (while n
    (setq n (getint (strcat "第" (itoa i) "点代码:")))
    (setq i (1+ i))
    (if n
      (setq str (append str (list (read_f fname n))))
    )
  )
  (setq n (length str))
  (setq i 1)
  (setq str_start (cdr (read_l (nth 0 str))))

  (while (< i n)
;;;    (setq x_start (nth 0 str_start))
;;;    (setq y_start (nth 1 str_start))
;;;    (setq h_start (nth 2 str_start))
    (setq str_end (cdr (read_l (nth i str))))
;;;    (setq x_end (nth 0 str_end))
;;;    (setq y_end (nth 1 str_end))
;;;    (setq h_end (nth 2 str_end))

    (setq strDxf '((0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine")))
    (setq strDxf (append strDxf (list (cons 10 str_start) (cons 11 str_end) '(210 0.0 0.0 1.0))))
    (entmake strDxf)
    (setq str_start str_end)
    (setq i (1+ i))
  )
  (princ)
)
发表于 2003-6-13 11:59:00 | 显示全部楼层

改用3dpoly行吗?

 楼主| 发表于 2003-6-13 13:48:00 | 显示全部楼层

meflying请看

输入点是选择性输入,并不需要全部输入,输完用空回车结束。
请帮助完善程序,刚才我用了该程序,还是有问题,多谢帮忙
今后得多向你学习。
发表于 2003-6-13 13:54:00 | 显示全部楼层

可以,

修改c:drawline,
其实我只是提供一种解决方法,你应该根据思路去找出更好的解决方法,或更好地完善它。
说说都还有哪些问题?

(defun c:drawline( / fname n i str str_start str_end strDxf cmd os)
  (setq cmd (getvar "cmdecho")
  (setq os (getvar "osmode")
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (setq fname "d:\\abc.txt")
  (setq n 1)
  (setq i 1)
  (while n
    (setq n (getint (strcat "第" (itoa i) "点代码:")))
    (setq i (1+ i))
    (if n
      (setq str (append str (list (read_f fname n))))
    )
  )
  (setq n (length str))
  (setq i 1)
  (setq str_start (cdr (read_l (nth 0 str))))
  (command "_.3dpoly" str_start)
  (while (< i n)
    (setq str_end (cdr (read_l (nth i str))))
    (command str_end)
    (setq i (1+ i))
  )
  (command "")
  (setvar "osmode" os)
  (setvar "cmdecho" cmd)
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 15:47 , Processed in 0.157890 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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