 - ;;
- ;;;
- ;;; EXTRIM.LSP
- ;;; 版权 ?1999 年 Autodesk, Inc.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;扩展修剪 - cookie-cutter 脚本
- ;
- ;选择多段线、直线、圆或弧和要修剪的一侧
- ;
- (VL-LOAD-COM)
- (DEFUN C:etrim() (C:extrim))
- (DEFUN C:tt() (C:extrim))
- (DEFUN C:qq() (C:extrim))
- (DEFUN C:qqq() (C:extrim))
- ;(PROMPT "QQQ\n")
- (PROMPT "\n超级修剪 extrim 或 etrim 、TT \n" )
- (defun c:extrim ( / na e1 p1 redraw_it lst n )
-
- (acet-error-init (list
- (list "cmdecho" 0
- "highlight" 0
- "regenmode" 1;;;控制图形自动形成
- "osmode" 0;;;控制捕捉
- "ucsicon" 0;;;关于控制用户坐标系图标的显示
- "offsetdist" 0;;;设置默认的偏移距离。
- "attreq" 0;;;在插入块过程中控制 INSERT 是否使用默认属性设置。
- "plinewid" 0;;;存储默认的多段线宽度。
- "plinetype" 1;;;指定是否使用优化的二维多段线。
- "gridmode" 0;;;指定栅格处于打开状态还是关闭状态。
- "celtype" "CONTINUOUS";;;;设置新对象的线型。
- "ucsfollow" 0;;;;从一个 UCS 转换为另一个 UCS 时生成平面视图。
- "limcheck" 0;;;;控制是否可以在栅格界限外创建对象。
- )
- T ;flag. True means use undo for error clean up.
- '(if redraw_it (redraw na 4))
- );list
- );acet-error-init
- ;;; acet-error-init 函数属于 ET 工具箱自定义函数,在此是为了对各种环境变量赋值,赋值能够让程序更加稳定的运行
-
- (princ "\n请选择 POLYLINE, LINE, CIRCLE, ARC, ELLIPSE, IMAGE 或 TEXT 作为切割边界...")
- ;;;;提示选择边界
- (setq na (acet-ui-single-select '((-4 . "<OR")
- (0 . "CIRCLE")
- (0 . "ARC")
- (0 . "LINE")
- (0 . "ELLIPSE")
- (0 . "ATTDEF")
- (0 . "TEXT")
- (0 . "MTEXT")
- (0 . "IMAGE")
- (0 . "SPLINE")
- (0 . "INSERT")
- (0 . "SOLID")
- (0 . "3DFACE")
- (0 . "TRACE")
- (0 . "LWPOLYLINE")
- (-4 . "<AND")
- (0 . "POLYLINE")
- (-4 . "<NOT")
- (-4 . "&")
- (70 . 112)
- (-4 . "NOT>")
- (-4 . "AND>")
- (-4 . "OR>")
- )
- T
- );acet-ui-single-select
- );setq
- ;;;;acet-ui-single-select 函数属于 ET 工具箱函数,是 entsel 和 ssget 的类似结合体,在选择的时候,能够进行对选择的图形过滤。entsel 本身不带过滤,ssget 可以带过滤,所以为了结合两者有了 acet-ui-single-select 函数
- ;;;;可以用 while 和 entsel 函数进行改造,选择实体要具有某种封闭的特征
- ;;;;acet-ui-single-select 的返回值是一个图元名称,和 entsel 函数一样
- (if na
- (progn
- (setq e1 (entget na));;setq NA 是图元,E1 是图元 dxf 列表,此处跟我习惯很不大一样,
- (if (or (equal "TEXT" (cdr (assoc 0 e1)))
- (equal "MTEXT" (cdr (assoc 0 e1)))
- (equal "ATTDEF" (cdr (assoc 0 e1)))
- (equal "IMAGE" (cdr (assoc 0 e1)))
- (equal "INSERT" (cdr (assoc 0 e1)))
- (equal "SOLID" (cdr (assoc 0 e1)))
- (equal "3DFACE" (cdr (assoc 0 e1)))
- (equal "TRACE" (cdr (assoc 0 e1)))
- );or 对图元类型进行性判断,上述几种图元没有明显的界限,所以需要生成自己生成一个封闭的多线段作为裁剪的边界
- (progn
- (setq lst (acet-geom-object-point-list na nil))
- ;;;;;acet-geom-object-point-list 是自定义函数,获取上述图元的包围盒,这个包围盒经过测试对于文字可以是最小包围盒,对于其他实体只是简单包围盒
- ;;;;;类似于 vla-GetBoundingBox 函数
- ;;;;;该函数返回了坐标点列表
- (setq n 0)
- (command "_.pline");;;;开始对上述图元画一个包围盒封闭曲线
- (repeat (length lst)
- (command (nth n lst))
- (setq n (+ n 1));setq
- );repeat
- (if (not (equal (car lst) (last lst) 0.0000001))
- (command "_cl")
- (command "")
- );if;;;;判断坐标 lst 收尾坐标是否同一个,如果不同,就生成封闭的曲线
- (setq na (entlast)
- e1 na
- );setq 读取新生成的图元,并且赋值给 E1,E1 此时成了图元而不是列表
- );progn then draw a temp pline to be the cutting edge.
- (setq e1 nil);;;;不是上述图元属性,就默认自带封闭包围和,E1 抛弃掉,后续只需要 NA 变量
- );if
- (redraw na 3);;;;亮显这个封闭曲线,亮显的目的是为了选择下面的点的方便
- (setq redraw_it T)
- ;;;;redraw_it 用来记录亮显的布尔值
- (setq p1 (getpoint "\n请选择裁剪点的方向"));setq 可以是封闭曲线内外
- (redraw na 4);;;;不亮显这个封闭曲线
- (setq redraw_it nil)
- (if p1 (etrim na p1));if 制订了了点,就开始进行裁剪
- (if e1;;;;此时的 E1 是程序自己生成的包围盒,不是图元自带的,自带的 E1 已经为 nil
- ;;;此处其实是利用包围盒,但又不是图元自带的,现需要把这个删掉,删掉之前,需要对图元图层解锁,否则有可能删不掉
- (progn
- (if (setq p1 (acet-layer-locked (getvar "clayer")))
- (command "_.layer" "_un" (getvar "clayer") "");;;解锁图层
- );if
- (entdel e1)
- (if p1
- (command "_.layer" "_lock" (getvar "clayer") "")
- );if
- );progn then
- );if
- );progn
- );if
-
- (acet-error-restore)
- ;;;;;恢复原来环境变量赋值,跟 acet-error-init 作为程序的初始化和结尾
- (princ)
- );defun c:extrim
-
- ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ;实体修剪功能
- ;takes: na - entity name
- ; a - a point, the side to trim on
- ;注意:此功能不允许可能错过
- ;;;; 非连续线型。
- ;;;;实体修剪功能
- ;;;;takes:na-实体名称
- ;;;;a-a点,要修剪的一侧,上述的 P1
- ;;;;注意:此功能不允许可能错过
- ;;;;非连续线型。
- ;;;;
- (defun etrim ( na a / la b d e1 lst lst2 n j k m ss na2 na3 na4
- x y z flag flag2 flag3 zlst vpna vplocked
- )
- (setq e1 (entget na));setq 获取 dxf 表
- (SETQ A P1)
- (if (or (setq flag (equal (acet-dxf 0 e1) "POLYLINE"))
- (setq flag (equal (acet-dxf 0 e1) "LWPOLYLINE"))
- (equal (acet-dxf 0 e1) "LINE")
- (equal (acet-dxf 0 e1) "CIRCLE")
- (equal (acet-dxf 0 e1) "ARC")
- (equal (acet-dxf 0 e1) "ELLIPSE")
- (equal (acet-dxf 0 e1) "TEXT")
- (equal (acet-dxf 0 e1) "ATTDEF")
- (equal (acet-dxf 0 e1) "MTEXT")
- (equal (acet-dxf 0 e1) "SPLINE")
- );or 判断 图元的类型
- (progn
- (if (and flag ;;;;对于"POLYLINE" "LWPOLYLINE" 需要对 70 的 dxf 及封闭性进行判断,如果是 3d 多线段,flag 就是 nil
- (equal 8 (logand 8 (acet-dxf 70 e1)))
- );and
- (setq flag nil)
- );if
- (setq a (trans a 1 0);;;;;传递进来的 P1 有可能用户坐标系下,这里转换成世界坐标系坐标
- vpna (acet-currentviewport-ename);;;获取是否是在视图中
- );setq
- (acet-ucs-cmd (list "_View"));;;;获取当前视图环境变量表 acet-error-init
- ;;;;以下代码是获取这个图元的包围盒,并且根据这个包围盒获取左下角和右下角的坐标,
- ;;;;由于这个 acet-geom-object-point-list 返回包围盒有可能是最小包围盒,所以需要对坐标点进行处理,完全可以用 vla-GetBoundingBox 获取
- ;;;;获取两个点后,利用 zoom_2_object 进行进一步处理,这个处理视为防止是在布局中进行操作,返回 两的点用于视图处理更加准确
- ;;;;视图缩放的目的是为了裁剪做准备,如果图元过小,是没办法裁剪的,猜测裁剪是和屏幕像素相关
- (setq lst (acet-geom-object-point-list na nil) ;;;find extents of selected cutting edge object
- lst (acet-geom-list-extents lst);;;;包围盒左下角 右上角
- x (- (car (cadr lst)) (car (car lst)))
- y (- (cadr (cadr lst)) (cadr (car lst)))
- x (* 0.075 x)
- y (* 0.075 y)
- z (list x y)
- x (list (+ (car (cadr lst)) (car z))
- (+ (cadr (cadr lst)) (cadr z))
- );list
- y (list (- (car (car lst)) (car z))
- (- (cadr (car lst)) (cadr z))
- );list
- zlst (zoom_2_object (list x y))
- );setq
- (if vpna
- (setq vplocked (acet-viewport-lock-set vpna nil)) ;unlock cur viewport if needed.
- );if 如果当前有很多视图,那就对当前视图进行解锁
- (command "_.zoom" "_w" (car zlst) (cadr zlst))
- ;;;;;对视图进行缩放
- (entupd na) ;;;update the ent. so it's curves display smoothly
- ;;;;更新对象(图元)的屏幕显示
- (setq lst (acet-geom-object-point-list na
- (/ (acet-geom-pixel-unit) 2.0)
- )
- );setq lst 是轮廓线
- (if (or (not flag)
- (not (acet-geom-self-intersect lst nil));;;检查自交
- );or
- (progn ;then the object is valid and not a self intersecting polyline.;则该对象是有效的并且不是自相交折线。
- (if (and flag
- (equal (car lst) (last lst) 0.0001)
- );and
- (setq flag3 T);then the polyline could potentialy need a second offset;则折线可能需要第二个偏移
- );if
- (if (setq la (acet-layer-locked (getvar "clayer")))
- (command "_.layer" "_unl" (getvar "clayer") "")
- );if 解锁图层
- ;;;;重新生成一个轮廓线
- (command-s "_.pline")
- (setq b nil)
- (setq n 0);setq
- (repeat (length lst)
- (setq d (nth n lst))
- (if (not (equal d b 0.0001))
- (progn
- (command d)
- (setq lst2 (append lst2 (list d)));setq
- (setq b d);setq
- );progn
- );if
- (setq n (+ n 1))
- );repeat
- (command-s "")
- (setq na2 (entlast)
- ss (ssadd)
- ss (ssadd na2 ss)
- lst nil
- );setq
- (acet-ss-visible ss 1);;;;把重新生成的轮廓线进行隐藏
- (setq lst2 (get_fence_points na2 a lst2 flag3 flag));setq 获取选取图元的包围盒
-
- (if la
- (command "_.layer" "_lock" (getvar "clayer") "")
- );if
- (acet-ucs-cmd (list "_p"))
- ;Move the ents to force a display update of the ents to avoid viewres problems.
- (setvar "highlight" 0)
- (if (setq ss (ssget "_f" (last lst2)))
- (command "_.move" ss "" "0,0,0" "0,0,0")
- );if 把所有的图元全部移动
- (if flag
- (progn
- (if (setq la (acet-layer-locked (acet-dxf 8 e1)))
- (command "_.layer" "_unl" (acet-dxf 8 e1) "")
- );if
- (acet-ucs-set-z (acet-dxf 210 e1));;;;Z轴归零
- (command "_.copy" na "" "0,0,0" "0,0,0")
- ;(entdel na)
- (acet-ss-visible (ssadd na (ssadd)) 1);make it invisible for a while.
- ;;;; 隐藏图元 ;rk 12:01 PM 3/10/98
- (setq na3 na
- na (entlast)
- );setq
- (command "_.pedit" na "_w" "0.0" "_x");;;;对图形进行合并,猜测是直线组成的合成 pl 线
- (acet-ucs-cmd (list "_p"))
- (if la (command "_.layer" "_lock" (acet-dxf 8 e1) ""));if
- );progn
- );if
- (command "_.trim" na "");;;;利用裁剪命令进行裁剪
- ;;;根据 lst2 点表,分批次进行裁剪
- (setq m (- (length lst2) 1));setq
- (setq k 0)
- (repeat (length lst2)
- (setq lst (nth k lst2))
- (setq a (trans (car lst) 0 1))
- (setq n 1)
- (repeat (- (length lst) 1) ;repeat each fence list
- (setq b (trans (nth n lst) 0 1))
- (if (equal a b 0.0001)
- (setq flag2 T)
- (setq flag2 nil)
- );if
- (setq na4 nil);setq
- (setq j 0);setq
- (while (not flag2) ;repeat each segment of the fence until no new ents are created.
- (setq na4 (entlast));setq
- (command "_F" a b "")
- (if (and (equal na4 (entlast))
- (or (not (equal k m))
- (> j 0)
- );or
- );and
- (setq flag2 T)
- );if
- (setq j (+ j 1));setq
- );while
- (setq a b);setq
- (setq n (+ n 1));setq
- );repeat
-
- (setq k (+ k 1))
- );repeat
- (command "")
- ;;;;裁剪完毕
- ;;;;以下用于恢复图层锁定,环境变量,视口状态
- (if flag
- (progn
- (if (setq la (acet-layer-locked (acet-dxf 8 e1)))
- (command "_.layer" "_unl" (acet-dxf 8 e1) "")
- );if
- (entdel na) ;get rid of the copy
-
- ;(entdel na3);bring back the original
- (acet-ss-visible (ssadd na3 (ssadd)) 0) ;bring back the original
- ;rk 12:01 PM 3/10/98
- (if la (command "_.layer" "_lock" (acet-dxf 8 e1) ""));if
- );progn
- );if
- );progn
- (progn
- (acet-ucs-cmd (list "_p"))
- (princ "\n自相交的边缘是不可接受的。")
- );progn else invalid self intersecting polyline
- );if
- (command "_.zoom" "_p")
- (if vplocked
- (acet-viewport-lock-set vpna T) ;then re-lock the viewport
- );if
- );progn then it's a most likely a valid entity.
- );if
- );defun etrim
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;主要是为了偏移一条新的轮廓,获取内外裁剪的点表
- (defun another_offset ( pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4 / na ss lst da1 da2)
-
- (setq da1 (abs (- a2 a1)));setq
- (setq da2 (- (* b (max pl2 pl1))
- (/ (* b (abs (- pl2 pl1)))
- 2.0
- )
- )
- );setq
- (if (> (abs (- da2 da1))
- (* 0.01 (max a1 a2))
- )
- (progn
-
- (acet-pline-make (list lst2))
- (setq na (entlast)
- na2 (entlast)
- ss (ssadd)
- ss (ssadd na ss)
- );setq
- (acet-ss-visible ss 1)
- (command "_.offset" b na2 a "")
- (if (and (not (equal na (entlast)))
- (setq lst3 (acet-geom-vertex-list (entlast)))
- (setq lst3 (intersect_check lst2 lst3 lst4))
- );and
- (progn
- (acet-ss-visible (ssadd (entlast) (ssadd)) 1)
- (command "_.area" "_ob" (entlast))
- (setq pl2 (getvar "perimeter")
- a2 (getvar "area")
- );setq
- (setq lst (list (acet-geom-vertex-list (list (entlast) 0))));setq
- (entdel (entlast));then offset was a success so delete the ent after getting it's info
- );progn then
- (if (not (equal na (entlast))) (entdel (entlast)));if else
- );if
- (entdel na2)
- );progn then let's do that second offset
- );if
-
- lst
- );defun another_offset
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;
- (defun get_fence_points ( na2 a lst2 flag plflag / a1 a2 pl1 pl2 b c d n
- lst lst2 lst3 lst4 na
- )
-
- (if flag
- (progn
- (setq lst2 (cdr lst2));setq
- (repeat (fix (/ (length lst2) 2))
- (setq lst2 (append (cdr lst2) (list (car lst2)));append
- );setq
- );repeat
- (setq lst2 (append lst2 (list (car lst2))));setq
- (command "_.area" "_ob" na2)
- (setq pl1 (getvar "perimeter")
- a1 (getvar "area")
- );setq
- );progn
- );if
-
- (setq a (trans a 0 1)
- b (* (getvar "viewsize") 0.05);初始偏移距离
- n 3.0 ;偏移次数
- d (/ b (- n 1)) ;偏移增量
- c (acet-geom-pixel-unit)
- lst4 (acet-geom-view-points)
- );setq
-
- (while (> b c)
- (setq na (entlast))
- (command "_.offset" b na2 a "")
- (if (and (not (equal na (entlast)))
- (setq lst3 (acet-geom-vertex-list (entlast)))
- (or (not plflag)
- (setq lst3 (intersect_check lst2 lst3 lst4))
- );or
- );and
- (progn
- (setq lst3 (acet-geom-m-trans lst3 1 0))
- (acet-ss-visible (ssadd (entlast) (ssadd)) 1)
- (if flag
- (progn
- (command "_.area" "_ob" (entlast))
- (setq pl2 (getvar "perimeter")
- a2 (getvar "area")
- );setq
- );progn
- );if
- (setq lst (append lst (list lst3)));setq
- (entdel (entlast)) ;删除实体后获取顶点信息
- (if flag
- (setq lst (append lst
- (another_offset pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4)
- );append
- );setq
- );if
- );progn 则偏移成功
- (if (not (equal na (entlast))) (entdel (entlast)));if else
- );if
- (setq b (- b d));setq
- );while
- (setq na (entlast))
- (command "_.offset" c na2 a "")
- (if (and (not (equal na (entlast)))
- (setq lst3 (acet-geom-vertex-list (entlast)))
- (or (not plflag)
- (setq lst3 (intersect_check lst2 lst3 lst4))
- );or
- );and
- (progn
- (setq lst3 (acet-geom-m-trans lst3 1 0))
- (acet-ss-visible (ssadd (entlast) (ssadd)) 1)
- (if flag
- (progn
- (command "_.area" "_ob" (entlast))
- (setq pl2 (getvar "perimeter")
- a2 (getvar "area")
- );setq
- );progn
- );if
- (setq lst (append lst (list lst3)));setq
- (entdel (entlast));则偏移成功所以删除实体后获取其信息
- (if flag
- (setq lst (append lst
- (another_offset pl1 pl2 a1 a2 c na2 lst2 a lst3 lst4)
- );append
- );setq
- );if
- );progn 则
- (if (not (equal na (entlast))) (entdel (entlast)));if else
- );if
- (entdel na2)
-
- lst
- );defun get_fence_points
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;如果第一个列表和第二个列表不包含相交的线段,则返回屏幕上的一组点。
- ;检查轮廓线自交
- (defun intersect_check ( lst lst2 lst3 / x x2 y y2 lst4 flag len len2
- a aa b bb c d n j)
-
- (setq len (length lst)
- len2 (length lst2)
- x (car (car lst3))
- x2 (car (cadr lst3))
- y (cadr (car lst3))
- y2 (cadr (cadr lst3))
- );setq
-
- (setq n 0);setq
- (while (and (not flag)
- (< (+ n 1) len2)
- );and
- (setq aa (nth n lst2)
- bb (nth (+ n 1) lst2)
- a (bns_truncate_2_view aa bb x y x2 y2)
- b (bns_truncate_2_view bb aa x y x2 y2)
- lst4 (append lst4 (list a))
- );setq
- (if (or (not (equal a aa))
- (not (equal b bb))
- );or
- (setq lst4 (append lst4 (list b)))
- );if
- (setq j 0);setq
- (while (and (not flag)
- (< (+ j 1) len)
- );and
- (setq c (nth j lst)
- d (nth (+ j 1) lst)
- flag (inters a b c d)
- );setq
-
- (setq j (+ j 1));setq
- );while
-
- (setq n (+ n 1));setq
- );while
- (if (not (equal b (last lst4)))
- (setq lst4 (append lst4 (list b)));setq
- );if
- (if (not flag)
- (setq flag lst4)
- (setq flag nil)
- );if
- flag
- );defun intersect_check
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;获取视口的放大的两点,这两点的矩形要把裁剪的所有图元包括在内
- ;;;该函数考虑了布局被的情况
- (defun zoom_2_object ( lst / p1 p2 p3 p4 p5 p6 mp dx dy dx2 dy2
- r1 r2 na e1 x w h dv1 dv2 x
- )
- (setq lst (acet-geom-m-trans lst 1 2)
- p1 (acet-geom-m-trans (acet-geom-view-points) 1 2) ;p1 和 p2 是视图点
- p2 (cadr p1)
- p1 (car p1)
- p1 (list (car p1) (cadr p1))
- p2 (list (car p2) (cadr p2))
- );setq
- (if lst
- (progn
- (setq p5 (acet-geom-list-extents lst) ;p5 和 p6 是几何点
- p6 (cadr p5)
- p5 (car p5)
- p5 (list (car p5) (cadr p5))
- p6 (list (car p6) (cadr p6))
- mp (acet-geom-midpoint p5 p6) ;准备调整几何矩形大小
- dx (- (car p2) (car p1)) ;使其具有与 p1 p2 相同的 dy/dx 比例
- dy (- (cadr p2) (cadr p1))
- dx2 (- (car p6) (car p5))
- dy2 (- (cadr p6) (cadr p5))
- );setq
- (if (equal dx 0.0) (setq dx 0.000001)) ;以防除以零
- (if (equal dx2 0.0) (setq dx2 0.000001))
- (setq r1 (/ dy dx)
- r2 (/ dy2 dx2)
- );setq
- (if (< r2 r1)
- (setq dy2 (* r1 dx2));则放大 dy2
- (progn
- (if (equal r1 0.0) (setq r1 0.000001)) ;以防除以零
- (setq dx2 (* dy2 (/ 1.0 r1)));否则放大 dx2
- );progn
- );if
- (setq p5 (list (- (car mp) (/ dx2 1.98)) ;1.98 用于代替 2.0 以略微扩大
- (- (cadr mp) (/ dy2 1.98)) ;矩形
- );list
- p6 (list (+ (car mp) (/ dx2 1.98))
- (+ (cadr mp) (/ dy2 1.98))
- );list
- );setq
- );progn 则 lst
- );if
- (if (and lst
- (equal 0 (getvar "tilemode"))
- (not (equal 1 (getvar "cvport")))
- (setq na (acet-currentviewport-ename))
- );and
- (progn
- (setq e1 (entget na)
- x (cdr (assoc 10 e1))
- w (cdr (assoc 40 e1))
- h (cdr (assoc 41 e1))
- p3 (list (- (car x) (/ w 2.0))
- (- (cadr x) (/ h 2.0))
- );list
- p4 (list (+ (car x) (/ w 2.0))
- (+ (cadr x) (/ h 2.0))
- );list
- p3 (trans p3 3 2) ;p3 和 p4 是视口点
- p4 (trans p4 3 2)
- dv1 (acet-geom-delta-vector p1 p3)
- dv2 (acet-geom-delta-vector p2 p4)
- x (distance p1 p2)
- );setq
- (if (equal 0 x) (setq x 0.000001));以防
- (setq x (/ (distance p5 p6)
- x
- )
- dv1 (acet-geom-vector-scale dv1 x)
- dv2 (acet-geom-vector-scale dv2 x)
- p5 (acet-geom-vector-add p5 dv1)
- p6 (acet-geom-vector-add p6 dv2)
- );setq
- );progn 则
- );if
- (setq p1 (list (car p1) (cadr p1) 0.0)
- p2 (list (car p2) (cadr p2) 0.0)
- p5 (list (car p5) (cadr p5) 0.0)
- p6 (list (car p6) (cadr p6) 0.0)
- );setq
- (if lst
- (setq lst (list (trans p5 2 1)
- (trans p6 2 1)
- );list
- );setq
- (setq lst nil)
- );if
-
- lst
- );defun zoom_2_object
- (princ)
- ;;;
- ;;;
|