荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: 矩形的快速绘制与修改
发信站: BBS 荔园晨风站 (Thu Jan 21 23:09:22 1999), 转信
矩形是一种最基本而又最常用的图形,其画法在很多应用软件中
都有较好的定义,比如A SIC、C语言等。作为专业化的绘图软件AUTOC
AD(ACAD),虽然其绘图功能十分强大,但在矩形的绘制方法上,却有点
不尽如人意。
ACAD系统为用户提供丰富的正多边形、圆、椭圆等图形的绘制命
令,使用起来也是得心应手,十分简单,而在绘制一个简单的矩形时,AC
AD并没有灵活方便的命令。因此,作图时要么通过输入一大堆坐标和
角度一点一点绘,要么用命令RECTAN,先绘出水平放置的矩形,再进行
旋转操作,而且这种画法,用户不能定义矩形的长宽。能否使得矩形的
绘制像正方形那样简单方便呢?答案是肯定的。笔者用LISP语言编程
解决了这个问题,所编程序不仅能方便绘制各种条件下的矩形,而且还
可按用户需要修正变形的矩形或用新绘制的矩形替换原有矩形,从而
大大提高了矩形的绘制速度,克服了ACAD系统简单图形复杂画法的弱
点。
程序清单如下:
;;************************************
;; 程序功能: 1.按指定长宽绘制矩形,矩形位置由用户用鼠标
指定;
;; 2.按指定相邻两角点及表示宽度的点绘制矩形,
矩形位于起止点方向
;; 的左侧,当回答0时,程序修正短形同时删除原
有矩形;
;; 3.按指定矩形相邻两角点及宽度值绘制矩形,矩
形位于起止方向的左侧
;; 使用说明: 1.绘制矩形时,提示输入X SCALE(矩形长)、Y SC
ALE(矩形宽值)、
;; ROTATE(矩形倾角),不给定任何值时,绘制自由
大小的矩形。
;; 2.当修正矩形时,须指定基点为图上的一个点,最
好是矩形的一个角点。
;; 3.修改后的矩形长和宽由所给基点和横向上的点
及纵向所指的点构成。
;; 4.图块J.DWG是一个单位矩形,大小为1:1,所在路
径为ACAD路径
;; 库中任一个,如\ACAD12等。
;; 5.运行程序时,可将该程序(设文件名为JXFZ.LSP
)拷贝到ACAD一库路
;; 径上,进入ACAD后,输入(LOAD "JXFZ"),这样产
生一个JX命令,输
;; 入JX,按提示输入相应参数即可生成矩形。
;;************************************
;;按指定两点及宽度绘制矩形
(defun fw()
(setq pi(/ 3.14 2))
(setq p1(getpoint"\n请输入第一点:"))
(setq p2(getpoint"\n请输入第二点:"))
(setq kd(getreal"\n请输入宽度:"))
(setq an21(angle p2 p1)
an12(angle p1 p2)
an23(+an12 pi)
)
(setq p3(polar p2 an23 kd)
d21 (distance p2 p1)
d34 d21
an34 an21
)
(setq p4(polar p3 an34 d34))
(command "pline" p1 p2 p3 p4 p1 nil)
);end defun fw()
;;;;删除原有图形
(defun entde()
(setq sset(ssget b));select ent.across point of b
(setq entn(ssname sset 0))
(entdel entn)
);end defun entde
(defun czd()
(setq ang( + anb(/ 3.14 2.0))) ;ang=ang+pi/2;across pt
line
(setq ptt(polar yp ang1)) ;end point line across pt
(setq ptt(inters b xp yp ptt nil));
);end defun lk
;;******** 矩形绘制与修改 (MAIN PROGRAM) ************
(defun c:jx()
(setq xz(getstring"\n绘矩形:1.按长宽/2.按三点/3.按二点和
宽度<2>:"))
(COND((=XZ"1")
(COMMAND"INSERT""J")
)
((or(=XZ"2")(=xz""))
(setq b (getpoint"\n指定修改角点(基点):")
xp(getpoint"\n指定矩形横向一点:")
yp(getpoint"\n指定矩形纵向一点):")
)
(SETQ STR(GETSTRING"\n.只生成矩形?<1>"))
(COND( (or(=STR"1")(=str""))
(setq w(distance xp b)
anb(angle b xp)
)
(czd)
(setq h(distance yp ptt))
(setq ro(* anb(/ 180 3.14)))
(command "insert" "j" b w h ro)
)
((=str"0")
(entde)
(setq w (distance xp b)
anb(angle b xp)
)
(czd)
(setq h(distance yp ptt))
(setq ro(* anb(/ 180 3.14)))
(command"insert""j"b w h ro)
)
);end cond
)
( (= XZ "3")
(fw)
)
);END OF COND
);end defun c:JX
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店