明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5964|回复: 20

求方位角

  [复制链接]
发表于 2011-11-1 16:52:28 | 显示全部楼层 |阅读模式
CAD图上有已知的直线(Line),求直线的方位角。。。
大家帮帮忙啊。。。
发表于 2011-11-1 17:25:21 | 显示全部楼层
本帖最后由 cushi 于 2011-11-1 17:25 编辑

用下面的程序选取直线就出来角度
(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180)

点评

(cvunit (vla-get-angle (vlax-ename->vla-object (car (entsel)))) "radian" "degree")  发表于 2011-11-1 22:40
 楼主| 发表于 2011-11-1 17:47:20 | 显示全部楼层
cushi 发表于 2011-11-1 17:25
用下面的程序选取直线就出来角度
(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 18 ...

谢谢你的回答。。但是我学的是autocad net开发,所以看不太懂。。能帮忙翻译下吗?
 楼主| 发表于 2011-11-1 17:48:03 | 显示全部楼层
各位大侠帮忙翻译下。。
发表于 2011-11-1 19:16:50 | 显示全部楼层
Dim db As Database = HostApplicationServices.WorkingDatabase
        Dim ed As Editor = AcadApp.DocumentManager.MdiActiveDocument.Editor
        Dim optSel As New PromptSelectionOptions
        optSel.MessageForAdding = "選取物件"
        Dim resSel As PromptSelectionResult = ed.GetSelection(optSel)
        If resSel.Status <> PromptStatus.OK Then
            Return
        Else
            Dim sSet As SelectionSet = resSel.Value
            Dim ids As ObjectId() = sSet.GetObjectIds()
            Using trans As Transaction = db.TransactionManager.StartTransaction()
                For Each sSetEntId As ObjectId In ids
                    Dim ent As Entity = trans.GetObject(sSetEntId, OpenMode.ForRead)
                    Dim ent_Name As String = ent.GetType().Name
                    If ent_Name = "Line" Then
                        Dim BD_Line As Line = trans.GetObject(sSetEntId, OpenMode.ForRead)
                        Dim Angle As Double = BD_Line.Angle
                    end if
                Next
                trans.Commit()
            End Using
        End If
发表于 2011-11-1 22:44:48 | 显示全部楼层
本帖最后由 cabinsummer 于 2011-11-1 22:45 编辑
chengw 发表于 2011-11-1 17:48
各位大侠帮忙翻译下。。


(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180)

从最里面的括号读起
(entsel)选择图元
(car (entsel))提取该图元名
(vlax-ename->vla-object (car (entsel)))转换为ObjectActiveX图元名
(vla-get-angle (vlax-ename->vla-object (car (entsel))))获取该图元的角度属性,单位为弧度
(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180)转换为角度

点评

讲解得太精辟,收藏了.  发表于 2011-11-2 12:18
发表于 2011-11-2 12:14:00 | 显示全部楼层
LISP就是精练啊,VBA要写一大堆代码,感叹颇多啊!!!
发表于 2011-11-2 12:16:59 | 显示全部楼层
本帖最后由 VBALISPER 于 2011-11-2 12:29 编辑

一点建议,这个量出来的角度不是传统意义上的方位角,是CAD的角度.传统的方位角,0度是在正北方.应该还要加上一个判断,如果<90度,=90-X,如果>90,=450-X.
方位角的反向延长线方向能不能加上去呢,比如方位为10度的线,另一端方位为10+180=190度.
260-180=80度.即如果<180,=180+X。如果>180,即=X-180。

偶是初学,还不会这个。麻烦会的朋友补充一下。谢谢。
我也研究一下,争取自己做出来。

另外,多段线的方位这个不能量,可能要复杂点吧。



发表于 2011-11-2 12:46:00 | 显示全部楼层
说干就干,写的这个出错了.没看出原因来.
(if (< (* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180) 90) (- 90 (* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180)) (- 450 (* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180)) )
发表于 2011-11-2 12:51:25 | 显示全部楼层
本帖最后由 VBALISPER 于 2011-11-2 12:53 编辑
cushi 发表于 2011-11-1 17:25
用下面的程序选取直线就出来角度
(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 18 ...

请问cabinsummer你写这句(cvunit (vla-get-angle (vlax-ename->vla-object (car (entsel)))) "radian" "degree")和他这句(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 180)
原理上有何区别

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 21:21 , Processed in 0.192967 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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