明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: peraperson

[已解答] 一个关于角度的问题

[复制链接]
发表于 2014-2-19 10:23 | 显示全部楼层
块炸开就是多段线和文字了.....
发表于 2014-2-19 10:29 | 显示全部楼层

RE: 一个关于角度的问题

peraperson 发表于 2014-2-19 09:37
这个问题其实我之前问过 就是“如何获得矩形的中点” 当时得到的热心回复是
(setq angpt (mapcar 'cdr ( ...

矩形四个点,你给的代码第一句是获得矩形的坐标点表,第二句是用获得的点表的第一点和第三点求中点坐标,也就是对角线的中点,用的是坐标计算法,其中x是第一点坐标,y是第三点坐标,坐标相加,再除2,假如第一是(1 1)第三是(2 2),坐标相加得到(3 3),除2得到(1.5 1.5),
发表于 2014-2-19 12:33 | 显示全部楼层
给个思路,首先得对矩形点排序,保持1234点顺序,再确定angle 4 3 两点角度或angle1 2。

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-2-19 14:09 | 显示全部楼层
本帖最后由 peraperson 于 2014-2-19 14:54 编辑
edata 发表于 2014-2-19 12:33
给个思路,首先得对矩形点排序,保持1234点顺序,再确定angle 4 3 两点角度或angle1 2。

非常感谢 还特意做了图 太感动了
我写了一下 可以了
但是有个疑问 cad是如何排列点的顺序了 我特意在程序里加了
(command "circle" (car angpt) 100)
(command "circle" (cadr angpt) 200)
(Command "circle" (caddr angpt)  300)
代码测试
结果为什么会是这样的顺序呢?
这样子我想把1楼图的文字始终放在左上角应该如何实现?

本帖子中包含更多资源

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

x
发表于 2014-2-19 15:08 | 显示全部楼层
peraperson 发表于 2014-2-19 14:09
非常感谢 还特意做了图 太感动了  
我写了一下 可以了
但是有个疑问 cad是如何排列点的顺序了 我 ...

左上....是YMAX??概念不太清楚哟....
发表于 2014-2-19 15:17 | 显示全部楼层
而且矩形的方向什么概念?如果以长短边规定方向是可以判断的....总得有个标准...才好写代码....左上...如果是旋转45度的正方形...左上指哪个点....如果左上指的是YMAX,这个也简单....说清楚点,方便处理....
 楼主| 发表于 2014-2-19 15:38 | 显示全部楼层
q3_2006 发表于 2014-2-19 15:17
而且矩形的方向什么概念?如果以长短边规定方向是可以判断的....总得有个标准...才好写代码....左上...如果是 ...

谢谢回复
你说的是 我的表意不明
我做了一下下面这张图可能比较直观点 45度的话2个位置都可以
 楼主| 发表于 2014-2-19 15:39 | 显示全部楼层
q3_2006 发表于 2014-2-19 15:17
而且矩形的方向什么概念?如果以长短边规定方向是可以判断的....总得有个标准...才好写代码....左上...如果是 ...

谢谢回复
你说的是 我的表意不明
我做了一下下面这张图可能比较直观点 45度的话2个位置都可以


本帖子中包含更多资源

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

x
发表于 2014-2-19 17:20 | 显示全部楼层
peraperson 发表于 2014-2-19 15:39
谢谢回复
你说的是 我的表意不明
我做了一下下面这张图可能比较直观点 45度的话2个位置都可以
  1. (defun gxl-Num-TAng (ang sty / n)
  2.   (setq n (rem (+ (* 2 pi) ang) sty))
  3.   (if (equal n sty 1e-6)
  4.     0.0
  5.     n
  6.   )
  7. )
  8. (defun mkpl (lst / pt)
  9.         (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(62 . 4) '(100 . "AcDbPolyline") (cons 90 (length lst)) '(70 . 1))
  10.       (mapcar '(lambda (pt)(cons 10 pt)) lst )))
  11. )
  12. (defun mktext (str pt th)
  13.         (entmake (list '(0 . "TEXT") '(62 . 3) (cons 1 str) (cons 10 pt) (cons 40 th)))
  14. )
  15. (defun c:tt ( / ang1 ang2 e i p1 p2 p3 p4 pm pt pts sn ss x y)
  16.         (while (setq ss (ssget '((0 . "LWPOLYLINE"))))
  17.         (repeat (setq i (sslength ss))
  18.             (setq e (ssname ss (setq i (1- i)))
  19.                     pts (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget e)))
  20.                     pm (mapcar '(lambda (x y) (/ (+ x y) 2)) (car pts) (caddr pts))
  21.                     ang1 (gxl-Num-TAng (angle (car pts) (cadr pts)) pi)
  22.                     ang2 (gxl-Num-TAng (angle (cadr pts) (caddr pts)) pi)
  23.                     p1 (polar (polar pm pi 500) (* -0.5 pi) 500)
  24.                     p3 (polar (polar pm 0 500) (* 0.5 pi) 500)
  25.                     p2 (list (car p3) (cadr p1))
  26.                     p4 (list (car p1) (cadr p3))
  27.                     pt (polar p4 (* 0.5 pi) 50)
  28.                     sn (ssadd)
  29.             )
  30.             (mkpl (list p1 p2 p3 p4))
  31.             (ssadd (entlast) sn)
  32.             (mktext "PF1" pt 150)
  33.             (ssadd (entlast) sn)
  34.             (if (> ang1 ang2) (command "_rotate" sn "" pm (/ (* 180 ang2) pi))
  35.             (command "_rotate" sn "" pm (/ (* 180 ang1) pi))
  36.             )
  37.             )
  38.         )
  39. )
发表于 2014-2-19 18:41 | 显示全部楼层
我也来一个。
  1. (defun sk_makekx(en / ANG ANGPT DS HEIGHT MIDPT NPT P1 P2 P3 P4 PTXT1 X Y LST pt)
  2.   (setq angpt (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))))
  3.   (setq midpt (mapcar '(lambda (x y) (/ (+ x y) 2)) (car angpt) (caddr angpt)))
  4.   (setq ang(min (angle (car angpt)(cadr angpt))
  5.     (angle (cadr angpt)(caddr angpt))
  6.     (angle (caddr angpt)(cadddr angpt))
  7.     (angle (cadddr angpt)(car angpt))))
  8.   (setq height 250 ds 1000)
  9.   (setq npt(polar midpt (+ ang (* pi 0.5)) (* 0.5 ds)))
  10.   (setq p1(polar npt (+ ang (* pi 1.0)) (* 0.5 ds)))
  11.   (setq p2(polar p1 (+ ang (* pi 1.5)) ds))
  12.   (setq p3(polar p2 (+ ang (* pi 0.0)) ds))
  13.   (setq p4(polar p3 (+ ang (* pi 0.5)) ds))
  14.   (setq ptxt1(polar p1 (+ ang (* pi 0.5)) (/  height 4.8)))
  15.   (setq lst (list p1 p2 p3 p4))
  16.    (entmake (append(list '(0 . "LWPOLYLINE")
  17.         '(100 . "AcDbEntity")
  18.         '(100 . "AcDbPolyline")
  19.         (cons 62 4)
  20.         (cons 90 (length lst))
  21.         (cons 70 1))
  22.         (mapcar '(lambda (pt)(cons 10 pt)) lst )))   
  23.   (entmake (list '(0 . "TEXT")(cons 62 3) (cons 1 "PF1") (cons 10 ptxt1) (cons 40 height)(cons 50 ang)))
  24.   (princ)
  25. )
  26. (defun c:tt(/ ss en)
  27.   (if(setq ss(ssget '((0 . "LWPOLYLINE"))))
  28.     (while(setq en(ssname ss 0))
  29.       (sk_makekx en)
  30.       (setq ss(ssdel en ss))
  31.       ))
  32.     (princ)
  33.     )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 00:53 , Processed in 0.171721 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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