明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3625|回复: 11

[求助][0114]怎样判断选取的两线段是顺时针还是逆时针方向呢?

  [复制链接]
发表于 2006-1-14 09:10:00 | 显示全部楼层 |阅读模式

求助:[0114]怎样判断选取的两线段是顺时针还是逆时针方向呢?
附上图面
问题:
01.怎样判断选取的两线段是顺时针还是逆时针方向呢?
02.想依据得到的方向
填入再环形阵列中再顺时针及逆时针角度值
即下面程序中的 "顺逆时针方向+角度值?"

以下是目前写出来的程式,但尚不完整
(setq en1 (car (entsel "\n 选取一线段:")))
(setq bj (entlast))
(setq p1n10 (cdr (assoc 10 (entget en1))))
(setq p1n11 (cdr (assoc 11 (entget en1))))
(setq en2 (car (entsel "\n 选取另一线段:")))
(setq p2n10 (cdr (assoc 10 (entget en2))))
(setq p2n11 (cdr (assoc 11 (entget en2))))
(setq pt0 (inters p1n10 p1n11 p2n10 p2n11 nil))
(setq ard (- (* pi 2) (- (angle pt0 p1n11) (angle pt0 p2n11)) ))
(setq angen1 (angle pt0 p1n11))
(setq angen2 (angle pt0 p2n11))

(command "-array" en1 "" "p" pt0  ard "顺逆时针方向+角度值?" "y")

烦请各位高手可以帮忙解答一下
谢谢

本帖子中包含更多资源

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

x
 楼主| 发表于 2006-1-14 12:09:00 | 显示全部楼层

小弟想到可以这样判断:

(cond
((< angen1 angen2) (setq cworccw - ))
((> angen1 angen2) (setq cworccw + ))
;;;((= angen1 angen2) (PRINC "zero"))
;;;该怎样判断两线同样角度时?

)
;;判断顺时针或逆时针

但阵列这里就不知道了~"顺逆时针方向+角度值?"

(command "-array" en1 "" "p" pt0  ard "顺逆时针方向+角度值?" "y")

发表于 2006-1-14 13:06:00 | 显示全部楼层
用角度判断还必须考虑直线段起点、止点谁距交点最近,另外还必须考虑选择两直线段的先后顺序。
发表于 2006-1-14 13:59:00 | 显示全部楼层
使用附件中的函数snsj[调用方式为:(snsj 直线段1 直线段2)]可以进行判断,
顺时针返回"T";逆时针返回"nil";两直线段平行或重合返回"0"。

本帖子中包含更多资源

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

x
 楼主| 发表于 2006-1-14 15:25:00 | 显示全部楼层

谢谢楼主的程序
但小弟愚笨
想再请问一下
传回的 T = 顺时针
该怎样编写呢?
另外这个 T  又该怎样带入
阵列的角度中呢? " T 顺 NIL 逆时针方向+角度值?" "
(command "-array" en1 "" "p" pt0 ard "顺逆时针方向+角度值?" "y")

烦请可以再帮忙解答一下
谢谢~

 楼主| 发表于 2006-1-14 15:45:00 | 显示全部楼层

请问是这样下达命令吗?

(setq ob (snsj en1 en2))
(cond
((= ob t) (PRINC "顺时针"))
((= ob nil) (PRINC "逆时针"))
)

 楼主| 发表于 2006-1-16 06:57:00 | 显示全部楼层

函数snsj的内容可以提供一下吗

想了解一下是怎样过程.

另外关於array 指令中

,如角度相同,该怎样判断是顺向或逆向呢?

烦请可以再帮忙解答一下
谢谢~

发表于 2006-1-16 11:52:00 | 显示全部楼层

这个程序有几点不明白:

1.选择两条线为何目的,是不是作阵列方向参考用?

2.这句(setq ard (- (* pi 2) (- (angle pt0 p1n11) (angle pt0 p2n11)) ))结果肯定不是整数,而阵列数目需要输入一个整数的变量,所以这个"ard"的变量肯定用的不对

 楼主| 发表于 2006-1-16 17:24:00 | 显示全部楼层

感谢  ljpnb  您的解答
其实我做程序的问题
是要在我选的两线段中间做旋转阵列
但目前的问题
在于选取两线时的顺序位置上
会造成旋转阵列不在我要的位置上
另外若是两线段平行
该怎样检查以阻止程序中断进行

附图说明:
01.选取线段A与线段B为平行该怎样进行检查及中断
02.当选取的线段A,与另一线段为"逆时针"或是"顺时针"
该怎样再旋转阵列中判断呢?

以上就是我的程序问题

本帖子中包含更多资源

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

x
发表于 2006-1-17 12:22:00 | 显示全部楼层
其实不别搞得那么复杂,用下程序即解决问题
  1. ;请试用以下小程序
  2. ;因两条直线段的顺、逆时针是相对的,故要求输入阵列方向
  3. (defun c:cc()
  4.    (setq cm (getvar "cmdecho"))(setvar "cmdecho" 0)
  5.    (while (setq en1 (car (entsel "\n请选择直线段1:")))
  6.       (setq en2 (car (entsel "\n请选择直线段2:"))
  7.      num (getint "\n输入阵列中项目的数目<10>:")
  8.      nbz (getint "\n请指定阵列方向(1.逆时针/2.顺时针)<1>:")
  9.             db1 (entget en1)
  10.      p11 (cdr (assoc 10 db1)) p12 (cdr (assoc 11 db1))
  11.      db2 (entget en2)
  12.      p21 (cdr (assoc 10 db2)) p22 (cdr (assoc 11 db2))
  13.        )
  14.        (if (= num nil)(setq num 10))
  15.        (if (= nbz nil)(setq nbz 1))
  16.        (if (setq po (inters p11 p12 p21 p22 nil))
  17.    (progn
  18.      (setq da (- (angle po p21) (angle po p11)))
  19.      (if (< da 0)(setq da (+ da (* 2.0 pi))))
  20.      (if (/= nbz 1)
  21.          (setq da (strcat "-" (angtos (- (* 2.0 pi) da) 1 6)))
  22.          (setq da (angtos da 1 6))
  23.      )
  24.             (command "_array" en1 "" "p" po num da "y")
  25.    )
  26.    (if (= (abs (- (angle p21 p22) (angle p11 p12))) pi)
  27.        (alert "所选择的两条直线段共线!")
  28.        (alert "所选择的两条直线段平行!")
  29.    )
  30.        )
  31.    )
  32.    (setvar "cmdecho" cm)(princ)
  33. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-22 05:44 , Processed in 0.185541 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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