荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店