chengw 发表于 2011-11-1 16:52:28

求方位角

CAD图上有已知的直线(Line),求直线的方位角。。。
大家帮帮忙啊。。。

cushi 发表于 2011-11-1 17:25:21

本帖最后由 cushi 于 2011-11-1 17:25 编辑

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

chengw 发表于 2011-11-1 17:47:20

cushi 发表于 2011-11-1 17:25 static/image/common/back.gif
用下面的程序选取直线就出来角度
(* (/ (vla-get-angle (vlax-ename->vla-object (car (entsel)))) pi) 18 ...

谢谢你的回答。。但是我学的是autocad net开发,所以看不太懂。。能帮忙翻译下吗?

chengw 发表于 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

cabinsummer 发表于 2011-11-1 22:44:48

本帖最后由 cabinsummer 于 2011-11-1 22:45 编辑

chengw 发表于 2011-11-1 17:48 http://bbs.mjtd.com/static/image/common/back.gif
各位大侠帮忙翻译下。。

(* (/ (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)转换为角度

VBALISPER 发表于 2011-11-2 12:14:00

LISP就是精练啊,VBA要写一大堆代码,感叹颇多啊!!!

VBALISPER 发表于 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。

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

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



VBALISPER 发表于 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)) )

VBALISPER 发表于 2011-11-2 12:51:25

本帖最后由 VBALISPER 于 2011-11-2 12:53 编辑

cushi 发表于 2011-11-1 17:25 static/image/common/back.gif
用下面的程序选取直线就出来角度
(* (/ (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)
原理上有何区别

页: [1] 2 3
查看完整版本: 求方位角