- UID
- 472763
- 积分
- 30
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2006-7-27
- 最后登录
- 1970-1-1
|
发表于 2006-11-7 20:06:51
|
显示全部楼层
(DEFUN C:DOOR () (SETQ PT_BASE (GETPOINT "\nSelect door hinge point : ")
PT_TMP1 (GETPOINT "\nSelect door second point : ")
PT_SIDE (GETPOINT "\nSelect door open side : ")
ANGE_1 (ANGLE PT_BASE PT_TMP1) ANGE_2 (/ PI 2)
DIST_1 (DISTANCE PT_BASE PT_TMP1))
(SETQ M_OSM (GETvar "OSMODE")) (SETvar "OSMODE" 0)
(SETQ GOP_1 (SSGET PT_BASE) GOP_2 (SSGET PT_TMP1))
(SETQ ENT_1 (SSNAME GOP_1 0) ENT_2 (SSNAME GOP_2 0))
(IF (NOT (EQUAL ENT_1 ENT_2))
(PRINC "\n** Select Two object is different **") (PROGN
(COMMAND "BREAK" PT_BASE "F" PT_BASE PT_TMP1)
(SETQ PT_TMP2 (POLAR PT_BASE (+ ANGE_1 ANGE_2) 1000)
PT_TMP3 (POLAR PT_BASE (- ANGE_1 ANGE_2) 1000))
(IF (< (DISTANCE PT_SIDE PT_TMP2) (DISTANCE PT_SIDE PT_TMP3))
(SETQ ANGE_3 (+ ANGE_1 ANGE_2) ANGE_4 (+ ANGE_1 (/ PI 4)))
(SETQ ANGE_3 (- ANGE_1 ANGE_2) ANGE_4 (- ANGE_1 (/ PI 4))))
(SETQ PT_TMP2 (POLAR PT_BASE ANGE_3 DIST_1)
PT_TMP3 (POLAR PT_BASE ANGE_4 DIST_1))
(COMMAND "PLINE" PT_BASE PT_TMP2 "A" "S" PT_TMP3 PT_TMP1 "")
)) ;关闭PROGN及IF
(SETvar "OSMODE" M_OSM) (PRINC))
----- 程序说明 -----
第1行 : 设定函数名称;并以GETPOINT函数取得使用者选取点(门较点),存入变量PT_BASE
第2行 : 以GETPOINT函数取得使用者另一选取点(开门点),存入变数PT_TMP1
第3行 : 以GETPOINT函数取得使用者另一选取点(门口开启的方向),存入变数PT_SIDE
第4行 : 以ANGLE函数取得变量PT_BASE(门较点)至变量PT_TMP1(开门点)的角度,存入变数ANGE_1中;
另外将90度角的弪度值存入变数ANGE_2(弪度PI等于180度角,除2等于90度角的弪度)
第5行 : 以DISTANCE取得变量PT_BASE(门较点)至变量PT_TMP1(开门点)的长度(门的阔度),存入变数DIST_1
第6行 : 用GETvar取得系统变量OSMODE(锁点模式)存入变量M_OSM;并用SETvar将锁点模式设定为0
第7行 : 用SSGET函数取得坐标点PT_BASE及PT_TMP1所在的像素,分别存入选集(变量)GOP_1及GOP_2内
第8行 : 以SSNAME分别取出选集GOP_1及GOP_2内的第一个(亦是唯一的,其序号为0)像素的名称;
分别存入变数ENT_1及ENT_2
第9行 : 用EQUAL函数判断变量ENT_1及ENT_2是否相同(判断两选取坐标点是否在同一对象上)
第10行 : 若变量ENT_1及ENT_2不是相同的对象,显示讯息提示;若是相同的对象,则以PROGN包含以下各程序
第11行 : 用COMMAND函数执行BREAK指令,选取在变量PT_BASE(坐标点)上的对象,再以F响应选取FIRST
选项,并指定变量PT_BASE(坐标点)为第一截断点,变数PT_TMP1(坐标点)为第二截断点
第12行 : 用POLAR取得新坐标点(以PT_BASE为起点,方向为ANGE_1逆时针90度,距离1000)存入变数PT_TMP2
第13行 : 用POLAR取得新坐标点(以PT_BASE为起点,方向为ANGE_1顺时针90度,距离1000)存入变数PT_TMP3
第14行 : 分别以DISTANCE函数测得PT_SIDE(第3行的门口开启方向选取点)与两个新坐标点(第12,13行)的距离;
并以IF函数判断那一个新坐标点较接近(距离较短)变数PT_SIDE
第15行 : 若加90度角的新坐标点较接近变量PT_SIDE,即将角度变量ANGE_1,分别加90度及45度角,再存入变数
ANGE_3及ANGE_4中;否则执行第16行
第16行 : 若减90度角的新坐标点较接近变量PT_SIDE,即将角度变量ANGE_1,分别减90度及45度角,再存入变数
ANGE_3及ANGE_4中
第17行 : 用POLAR取得新坐标点,存入变量PT_TMP2
以PT_BASE为起点,方向为ANGE_3(角度为ANGE_1加或减90度角),距离为变数DIST_1(门口的阔度)
第18行 : 用POLAR取得新坐标点,存入变量PT_TMP3
以PT_BASE为起点,方向为ANGE_4(角度为ANGE_1加或减45度角),距离为变数DIST_1(门口的阔度)
第19行 : 以COMMAND函数执行PLINE指令,选取起点为变量PT_BASE,第二顶点为变量PT_TMP2(第17行设定);
响应A以选取弧段选项,再响应S选取弧段的第二点选项,并输入变量PT_TMP3作为弧段的第二点(第18行设定);
最后一点为变量PT_TMP1(第二行的开门点),最后以空字符串(等于按下ENTER键)结束PLINE指令
第21行 : 使用SETVER函数将系统变量OSMODE还原为变量M_OSM
----- 程序执行 -----
1. Select door hinge point : 在线段上选取一点 (为门较的一边;需配合锁点模式)
2. Select door second point : 在线段上选取二点 (以决定门的阔度及角度,
要注意所选的两点要在同一对象上;需配合锁点模式)
3. Select door open side : 选取第三点 (决定门的开启方向) |
|