QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: koutx
收起左侧

[已解决] CAD二次开发对二维图某些数据的统计(请我爱谁家版主再指导)

[复制链接]
 楼主| 发表于 2009-3-15 20:13:43 | 显示全部楼层 来自: 中国北京
折腾了不知多少遍,也按版主推荐的搜了一些参考资料(Autocad_VBA初级教程、AutoCAD_VBA属性)等等就是没找到附录C,可无奈实在太菜,总也不能完全试通版主48楼这段程序。现在是内部点选没问题了,但是在中间筛选统计部分无论如何也想不出办法来。2 @) w& X( _# a& M1 P
For Each LP In SS '遍历选择集,检查多段线是否是矩形并统计结果
5 q% ]6 ?1 Q7 X* z2 c' A            LP.Highlight (False) '被高亮显示的多段线取消高亮
: t& z" m3 b# v6 R9 y* ~            '中间检查、统计部分省略
/ b  g3 ]6 V) j6 }             .......................
/ T  i; ^7 M/ Y- Z3 T9 o5 o                         ........................
' S' l. ]' O7 Y0 `6 V0 O                         ..........................
  ?% U! O4 X$ HNext
0 X6 l( m( o0 F7 E! f$ h在循环中间,怎么也试不通。用LP.Length可得到周长;用LP.Area可得到面积,可就是得不到长、宽。难道要把原先那判断水平线与垂直线交点的整段代码全搬过来吗?可又觉得光靠生硬的搬过来又不行,因为我把矩形数组那一段搬过来试了多少次都不成呀,把P1,P2,P3,P4那一段也搬过来又不知如何给P赋值。无奈知识太少怎么也解决不了啊,请版主百忙中再予指导。多谢了。因为总想多试几种方法比较比较。4 p. w9 j1 E& K, t* G! i
; t, r* K+ V  J" D& ]9 E5 P1 D" U
[ 本帖最后由 koutx 于 2009-3-15 20:15 编辑 ]
发表于 2009-3-15 21:17:24 | 显示全部楼层 来自: 中国
我连书名都告诉你了,为什么不用页面上面的“搜索”,用书名做关键词搜一下有关的帖子呢?
- T0 Q9 a: Q8 K) t0 i( U* V还是把链接给你吧) g( Q7 Z4 l3 r" w( Y
http://www.3dportal.cn/discuz/viewthread.php?tid=199860&page=1&fromuid=150055#pid960894
' G6 X1 P" Q& |# C; {' V5 \: N. y: n7 U0 J2 ]% e2 [( `
LWPOLYLINE(优化多段线)对象有下面两个属性和方法可以用来在本程序中判断是否矩形
% m' B4 }/ [2 _6 n一、Coordinates属性。可读写。读取时的语法是- `/ e" S9 Q7 d1 Y. a5 ?8 T
V=PL.Coordinates
( i# V1 ]  Q& i$ A( O+ P其中,V在使用前应声明为变体型变量(Variant),它返回一个双精度数组,包含优化多段线全部顶点的二维坐标。对于矩形,应该返回一个8元素的双精度数组,元素分别为第1个顶点X坐标、第1个顶点Y坐标、第2个顶点X坐标、第2个顶点Y坐标。。。。。。依此类推。
1 }% W& L: e3 o* M* [: q0 x$ ]二、GetBulge方法。只读,语法是! {( }! ^) D( k" p
D=PL.GetBulge(Index)7 K! J7 a: @+ T/ r# W, X
其中,Index是多段线顶点索引,第1个顶点索引是0,第2个是1。。。。依此类推。D是双精度变量(Double),它返回指定顶点与下一个顶点间的线的凸度,如果是0,则为直线;否则是圆弧,该值是该圆弧的圆周角的四分之一的正切值。假如是个逆时针的半圆弧,圆周角是180度,四分之一就是45度,45度的正切值是1,也就是说,如果返回值是1,就说明这段线是个逆时针半圆弧。+ n- L2 C0 r  i$ _* l7 X4 R: F

3 {& C7 `: r1 e8 e4 m0 O使用上面两个属性和方法,只要你的平面几何知识不是太差,应该能够在本程序中判断得到的多段线是否是矩形吧?
$ [6 W( x/ V* @2 G/ f& b要注意的是,由于计算机浮点运算精度的原因,即使我们的图画得很准确,计算结果也会与理论结果存在些差异,所以在条件判断时要宽容些,只要在一定的范围内就可以了,就像我在三楼的代码一样,要给出一个精度范围。
: y8 L4 C7 R% X% R1 g7 z" t7 m, N- i$ T1 o# a8 Z1 w% S
另外给你一个资料。CAD帮助文件中,开发人员帮助的《ActiveX and VBA Reference》对使用VBA的人来说非常重要,但它是英文版的,很多人看着不方便,下面的附件是中文翻译版本。7 ^1 j% I# B8 t4 e. Z& {. t! ~

, U! V" ^# I  a6 V: g[ 本帖最后由 woaishuijia 于 2009-3-15 21:32 编辑 ]

ActiveX 和 VBA 参考.rar

1.71 MB, 下载次数: 7

 楼主| 发表于 2009-3-17 14:34:55 | 显示全部楼层 来自: 中国北京
谢谢版主提供的资料,问题基本解决了。只是一个一个的点选有点过于麻烦了。
 楼主| 发表于 2009-4-11 12:19:44 | 显示全部楼层 来自: 中国北京
多谢版主详尽的指导和提供的学习资料,受益颇多。
1 _* c; E0 @; N这些天总是想在版主49楼的方法中再完善一下,可总不能实现,无奈再次请教:' T0 v8 f* G* V$ N8 I0 `/ {4 ]0 r: Y
问题见下面程序中括号内的标注:/ r9 c  q! U" g; ?3 d# M  I
------------------------------------------------------------------------------------------------------------------------5 S1 [- b  K: c4 w' ]' u9 Z; L
ACAD的VBA并没有提供“孤岛检测”的方法,不过可以照下面的调用图形界面的“边界”命令实现它。; x0 i0 A% A+ i& {* ~( k8 C
Dim I As Integer, SS As AcadSelectionSet, FT(0) As Integer, FD(0) As Variant, P As Variant, LP As AcadLWPolyline+ y! p$ D, N2 g
    With ThisDrawing( @; ?- t% ?% C2 K& A/ c$ F+ G
        On Error Resume Next
! q; ?/ |3 O+ k' ~        Set SS = .SelectionSets.Add("SS" )3 T2 |0 u* D+ W& s- j+ a9 O" x
        FD(0) = "lwpolyline"( A* e7 \- ]/ Z4 I; g$ k- A  K# q
        Do
0 t7 Z! A: E# p! N) i" @* G0 P            P = .Utility.GetPoint(, vbCrLf & "拾取内部点:")
9 w6 m5 r2 Q6 [0 v            If Err Then Exit Do' i" `# \+ W/ v1 @. p! e1 o
            .SendCommand "-boundary " & P(0) & "," & P(1) & "  "
2 r+ Z) }" H) m' V, r8 z            SS.Select acSelectionSetLast, , , FT, FD: j9 Q. ^: d/ M+ |, F+ M% L
            If SS.Count = I Then
; {) i, r9 o% J; ~0 _5 ^3 ?                .SendCommand "n "
1 h" {. g* R& b! X1 O, u                Exit Do  G. `1 f' q2 e  j- d
            Else
9 T$ v- Y! l4 h# @+ b6 ~3 S/ d                SS.Item(I).Highlight (True) '选择集的最后一个元素即新创建的多段线用高亮显示' R: S" h9 m; W3 G: ]$ O9 P4 e$ P. s
                  (请问在此处能实现将点击的图形,填充图案或填充底色的语句)0 U; e, q4 D6 N6 j" Q
                I = I + 1
5 l5 B6 s. l, ^: Y4 Z8 t0 ?            End If, g0 o! k& l& G. P5 G
        Loop
4 ~" P, j1 Q5 D& R7 y- y  l" t" e0 a7 y; b- ?' ?
[ 本帖最后由 koutx 于 2009-4-11 14:10 编辑 ]
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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