明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12285|回复: 20

[LISP][原创]铁路线绘制

  [复制链接]
发表于 2004-3-19 20:15 | 显示全部楼层 |阅读模式
;把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)

----------------------------------------------
天这样的蓝, 树这样的绿,
生活原来这样的, 安宁和美丽......
发表于 2004-4-8 23:27 | 显示全部楼层
兄弟,你画的铁路在不同比例尺下显示的宽度是不是会变化啊,能不能实现在不同比例尺下显示的是同一宽度啊,也就是说铁路线的符号必须是半比例尺的,我目前在做的程序需要实现这个功能,拜托你帮我思考思考好吗?
 楼主| 发表于 2004-5-5 18:03 | 显示全部楼层
不好意思,今天才看到你的回复,我想知道你需要什么样的比例,你能给我一个例子吗?
发表于 2005-6-30 14:05 | 显示全部楼层
发贴心情
不好意思,你能告诉我 怎么用 谢谢
发表于 2005-10-17 09:42 | 显示全部楼层

请教兄弟:

错误: 参数类型错误: lselsetp nil

怎么解决

 

发表于 2005-10-25 21:51 | 显示全部楼层
我们自己使用的简单!三条线,中间这条改一下线形就行了!
发表于 2005-10-27 06:25 | 显示全部楼层

请教兄弟:我下载后加载运行发现

错误: 参数类型错误: lselsetp nil

怎么解决

发表于 2005-10-27 21:59 | 显示全部楼层
逐行调试!
 楼主| 发表于 2006-3-11 23:09 | 显示全部楼层

操做

1,先绘制一条spine

2,然后加载lt.lsp

3,在命令行输入lt

4,选择spline,输入宽度及长度

5,黑白段会跟随spine在屏幕中间流动,

6,等待结束

 

本帖子中包含更多资源

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

x
发表于 2006-7-31 15:20 | 显示全部楼层

下了 ,只是有个问题长度和宽度应该不限整数 就更好了

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

本版积分规则

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

GMT+8, 2024-3-28 19:25 , Processed in 0.189570 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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