找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 953|回复: 5

[LISP程序]:求教;如何画铁路线

[复制链接]
发表于 2005-10-13 23:04:50 | 显示全部楼层 |阅读模式

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

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

×
求各位大侠帮忙!
我LISP画铁路程序如下:
;把spline变成铁路线示图
;ljc 2004.3
(DEFUN O1O( name cd / cm tc os q zd qd ang qdz zdy w1 w2 w3 w4 p1p2 p3 p4 ) ;name--spline的图元名 cd铁路线的宽度
          (setq cm(getvar "cmdecho") tc(getvar "clayer") os(getvar "osmode"))
          (command "osnap" "off")
          (setq cd(/ cd 2))
          (setq q(entget name))
          (setq Zd (cdr(assoc 10 q)))
          (setq qd (cdr(LAST q)))
          (SETQ ANG (ANGLE QD ZD))
          (SETQ  qdz (polar qd (+ ANG ( / PI 2)) cd))
          (setq  qdy (polar qd (- ANG ( / PI 2)) cd))
          (command "offset"  cd name qdz  "")
          (setq w1(entlast))
          (setq p1 (cdr(assoc 10 (entget w1))))
          (setq p2 (cdr(last (entget w1))))
          (command "offset"  cd name qdy  "")
          (setq w2(entlast))         
          (setq p4 (cdr(assoc 10 (entget w2))))
          (setq p3 (cdr(last (entget w2))))
          (command "line" p1 p4 "")    (setq w3(entlast))     
          (command "line" p2 p3 "")    (setq w4(entlast))
          (command "-bhatch" "p" "solid" "s" w1 w2 w3 w4 "" "")
          (command "erase" w1 w2 w3 w4 name "")
          (setvar "cmdecho" cm)
          (setvar "osmode" os)
          (setvar "clayer"  tc)
)
(defun c:tl( / line n0 j linex q qd zd cdd ang qdz dqy)
   (setq cm(getvar "cmdecho") tc(getvar "clayer") os(getvar "osmode"))
   (command "osnap" "off")
   (print "请选择铁路线:") (print)
   (setq line (ssget '((0 . "SPLINE"))))
   (setq ds(getint "请输黑白段长度:"))
   (setq cd(getreal "请输入绘制铁路线的宽度:"))
   (command "ucs" "" "")
   (command "erase" (ssget "x" '((0 . "point"))) "")
   (setq n0 (sslength line))
   (setq j 0  n2 0)
  (repeat n0
   (setq linex (ssname line j))  
   (setq cdd(/ cd 2))
   (setq q(entget linex))
   (setq Zd (cdr(assoc 10 q)))
   (setq qd (cdr(LAST q)))
   (SETQ ANG (ANGLE QD ZD))
   (SETQ  qdz (polar qd (+ ANG ( / PI 2)) (* 10 cd)))
   (setq  qdy (polar qd (- ANG ( / PI 2)) (* 10 cd)))
   (command "offset"  cdd linex qdz linex qdy "")
   (command "measure" linex ds "")
   (command)
   (setq point (ssget "x" '((0 . "point"))))
   (setq n (sslength point))
   (setq i 0 ii 0)
   (repeat n
   (setq p1 (cdr(assoc 10 (entget(ssname point i)))))
   (command "erase" (ssname point i) "")
   (command "zoom" "w" (polar p1 (* pi 0.75) ds )  (polar p1 (* pi -0.25) ds ) )
   (command "break"  (list (car p1) (cadr p1)  (caddr p1))  "@" )
   (if (= 2 ii) (setq ii 0))
   (if (= 0 ii) (o1o (entlast) cd) (command "erase" (entlast) ""))
   (setq ii (1+ ii))  
   (setq i (+ i 1))
   )
   (setq j (+ j 1))
   (if (= 2 ii) (o1o linex cd) (command "erase" linex ""))
  )
   (command "zoom" "e" "")
(setvar "cmdecho" cm)
          (setvar "osmode" os)
          (setvar "clayer"  tc)
  
(print "敲入tL运行程序---LJC") (PRINT)
加载后不能画铁路线,请指导或提供新程序.谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-13 23:24:39 | 显示全部楼层
其实最简单的方法是加载一种特殊的“铁路线”线型,直接使用这种线型画线就可以了,剪切修改起来也很方便
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-13 23:47:57 | 显示全部楼层

Re: [LISP程序]:求教;如何画铁路线

最初由 陈西 发布
[B]求各位大侠帮忙!
我LISP画铁路程序如下:
;把spline变成铁路线示图
;ljc 2004.3
(DEFUN O1O( name cd / cm tc os q zd qd ang qdz zdy w1 w2 w3 w4 p1p2 p3 p4 ) ;name--spline的图元名 cd铁路线的宽度
        ... [/B]


试试:
  1. [FONT=courier new](defun c:tl (/ line n0 j linex q qd zd cdd ang qdz dqy)
  2.   (setq        cm (getvar "cmdecho")
  3.         tc (getvar "clayer")
  4.         os (getvar "osmode")
  5.   )
  6.   (command "osnap" "off")
  7.   (print "\n请选择铁路线 : ")
  8.   (setq        line (ssget '((0 . "SPLINE")))
  9.         ds   (getint "\n请输黑白段长度 : ")
  10.         cd   (getreal "\n请输入绘制铁路线的宽度 : ")
  11.   )
  12.   (command "ucs" "" "")
  13.   (command "erase" (ssget "x" '((0 . "point"))) "")
  14.   (setq        n0 (sslength line)
  15.         j  0
  16.         n2 0
  17.   )
  18.   (repeat n0
  19.     (setq linex        (ssname line j)
  20.           cdd        (/ cd 2)
  21.           q        (entget linex)
  22.           Zd        (cdr (assoc 10 q))
  23.           qd        (cdr (LAST q))
  24.           ANG        (ANGLE QD ZD)
  25.           qdz        (polar qd (+ ANG (/ PI 2)) (* 10 cd))
  26.           qdy        (polar qd (- ANG (/ PI 2)) (* 10 cd))
  27.     )
  28.     (command "offset" cdd linex qdz linex qdy "")
  29.     (command "measure" linex ds "")
  30.     (command)
  31.     (setq point        (ssget "x" '((0 . "point")))
  32.           n        (sslength point)
  33.           i        0
  34.           ii        0
  35.     )
  36.     (repeat n
  37.       (setq p1 (cdr (assoc 10 (entget (ssname point i)))))
  38.       (command "erase" (ssname point i) "")
  39.       (command "zoom"
  40.                "w"
  41.                (polar p1 (* pi 0.75) ds)
  42.                (polar p1 (* pi -0.25) ds)
  43.       )
  44.       (command "break" (list (car p1) (cadr p1) (caddr p1)) "@")
  45.       (if (= 2 ii)
  46.         (setq ii 0)
  47.       )
  48.       (if (= 0 ii)
  49.         (o1o (entlast) cd)
  50.         (command "erase" (entlast) "")
  51.       )
  52.       (setq ii (1+ ii)
  53.             i  (+ i 1)
  54.       )
  55.     )
  56.     (setq j (+ j 1))
  57.     (if        (= 2 ii)
  58.       (o1o linex cd)
  59.       (command "erase" linex "")
  60.     )
  61.   )
  62.   (command "zoom" "e" "")
  63.   (setvar "cmdecho" cm)
  64.   (setvar "osmode" os)
  65.   (setvar "clayer" tc)
  66. )
  67. (print "敲入tL运行程序---LJC")
  68. (PRINT)


  69. (DEFUN O1O (name cd / cm tc os q zd qd ang qdz zdy w1 w2 w3 w4 p1p2 p3
  70.             p4)
  71.   (setq        cm (getvar "cmdecho")
  72.         tc (getvar "clayer")
  73.         os (getvar "osmode")
  74.   )
  75.   (command "osnap" "off")
  76.   (setq        cd  (/ cd 2)
  77.         q   (entget name)
  78.         Zd  (cdr (assoc 10 q))
  79.         qd  (cdr (LAST q))
  80.         ANG (ANGLE QD ZD)
  81.         qdz (polar qd (+ ANG (/ PI 2)) cd)
  82.         qdy (polar qd (- ANG (/ PI 2)) cd)
  83.   )
  84.   (command "offset" cd name qdz "")
  85.   (setq        w1 (entlast)
  86.         p1 (cdr (assoc 10 (entget w1)))
  87.         p2 (cdr (last (entget w1)))
  88.   )
  89.   (command "offset" cd name qdy "")
  90.   (setq        w2 (entlast)
  91.         p4 (cdr (assoc 10 (entget w2)))
  92.         p3 (cdr (last (entget w2)))
  93.   )
  94.   (command "line" p1 p4 "")
  95.   (setq w3 (entlast))
  96.   (command "line" p2 p3 "")
  97.   (setq w4 (entlast))
  98.   (command "-bhatch" "p" "solid" "s" w1 w2 w3 w4 "" "")
  99.   (command "erase" w1 w2 w3 w4 name "")
  100.   (setvar "cmdecho" cm)
  101.   (setvar "osmode" os)
  102.   (setvar "clayer" tc)
  103. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-14 00:34:11 | 显示全部楼层
关于画铁路线,我认为两种方法最可取
1.用线形
2.3条曲线组成,中间一条为有宽度虚线
两种方法都不用将spline改成多义线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 17:07 , Processed in 0.182504 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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