明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2852|回复: 22

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

[复制链接]
发表于 2014-2-18 16:43 | 显示全部楼层 |阅读模式
如图,我希望通过框选绿色的矩形来生成蓝色的矩形(比如1000*1000)和绿色文字 要求绿色和蓝色的矩形中心对齐 角度一致
我会写左边的 但是右边倾斜的不会写
有人可以帮忙写一下或者指点一下吗

本帖子中包含更多资源

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

x
发表于 2014-2-18 17:34 来自手机 | 显示全部楼层
添加或修改组码50
发表于 2014-2-18 17:44 | 显示全部楼层
实在不行你可以把两个对象生成了之后  把他放在一个选择集里
再用COMMAND来的转一下角度就好了
新手只能帮你到这了
发表于 2014-2-18 18:13 | 显示全部楼层
要看你实现左边的代码,这样简单。
发表于 2014-2-18 18:44 | 显示全部楼层
绿色矩形是块吗??
发表于 2014-2-18 19:58 | 显示全部楼层
本帖最后由 q3_2006 于 2014-2-18 20:02 编辑

(defun gxl-getboxCenter  (e1 / obj minpoint maxpoint)
  (if (= 'ENAME (type e1))
    (setq obj (vlax-ename->vla-object e1))
    (setq obj e1)
  )
  (vla-GetBoundingBox obj 'minpoint 'maxpoint)
  (setq minpoint (vlax-safearray->list minpoint))
  (setq maxpoint (vlax-safearray->list maxpoint))
  (mapcar '* '(0.5 0.5 0.5) (mapcar '+ minpoint maxpoint))
)
(defun c:tt ( / ang1 ang2 bn e i pts ss x)
(setq bn (getstring "\n输入块名:"))
(while (setq ss (ssget '((0 . "LWPOLYLINE"))))
  (repeat (setq i (sslength ss))
            (setq e (ssname ss (setq i (1- i)))
             pts (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e)))
             ang1 (angle (car pts) (cadr pts))
             ang2 (angle (cadr pts) (caddr pts))
            )
            (if (> ang1 ang2)
             (entmake (list '(0 . "INSERT") (cons 2 bn) (cons 10 (gxl-getboxCenter e)) (cons 50 ang2)))
             (entmake (list '(0 . "INSERT") (cons 2 bn) (cons 10 (gxl-getboxCenter e)) (cons 50 ang1)))
            )
        )
)
)
 楼主| 发表于 2014-2-19 09:18 | 显示全部楼层
本帖最后由 peraperson 于 2014-2-19 09:45 编辑
q3_2006 发表于 2014-2-18 19:58
(defun gxl-getboxCenter  (e1 / obj minpoint maxpoint)
  (if (= 'ENAME (type e1))
    (setq obj (vl ...

谢谢回复 试了一下 貌似不行 款选完后没反应 提示 “Specify opposite corner: 1 found”
请问(car pts) 得到的是所有角点的x坐标而(cadr pts)得到的是是所有角点的x坐标相加除以2和y坐标相加除以2吗?
如果是的话那(angle (car pts) (cadr pts))的写法又成立吗?

 楼主| 发表于 2014-2-19 09:32 | 显示全部楼层
自贡黄明儒 发表于 2014-2-18 17:34
添加或修改组码50

谢谢 不好意思忘了说 蓝色和绿色的都是多段线不是快 主要的问题在于如何提取绿色矩形的倾斜角度
 楼主| 发表于 2014-2-19 09:37 | 显示全部楼层
本帖最后由 peraperson 于 2014-2-19 09:44 编辑
edata 发表于 2014-2-18 18:13
要看你实现左边的代码,这样简单。

这个问题其实我之前问过 就是“如何获得矩形的中点” 当时得到的热心回复是
(setq angpt (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))))                     
(setq midpt (mapcar '(lambda (x y) (/ (+ x y) 2)) (car angpt) (caddr angpt)))      
就一直用了 一直没深究 现在想知道角度如何获得
其实对 (car angpt) (caddr angpt) 得到的是什么不是很明白 是所有角点的x坐标相加除以2和y坐标相加除以2吗?如何是的话那角度怎么写呢?
 楼主| 发表于 2014-2-19 09:38 | 显示全部楼层
ysq101 发表于 2014-2-18 17:44
实在不行你可以把两个对象生成了之后  把他放在一个选择集里
再用COMMAND来的转一下角度就好了
新手只能帮 ...

主要是角度不知道怎么获取
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 02:12 , Processed in 0.161538 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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