乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: MickD

acad的向量/矩阵函数

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-7 09:11:29 | 显示全部楼层

It'这是我们在基本面向对象之前所拥有的
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-7 09:46:51 | 显示全部楼层
@MP,
我的两美分
我想有#039;这与您的解决方案相反。大多数Acad函数(如有)不't接受UDT#039;s、 例如,将WCS中的点转换为UCS坐标或vicaversa可能会出现问题
使用DoubleArray和变体赢得#039;我没有那个问题
哦,还有一个用于复制初始化索引数组的附加项……很难。如果可以,请使用'不要回避它
  1. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, Source As Any, ByVal numBytes As Long)
  2. Sub Test()
  3. Dim P1(2) As Double
  4. Dim P2(2) As Double
  5. 'P1(0) = 1: P1(1) = 2: P1(2) = 3
  6. CopyArray P1, P2
  7. MsgBox (P2(2))
  8. End Sub
  9. Sub CopyArray(Source() As Double, Target() As Double)
  10.     Dim NumOfBytes As Long
  11.    
  12.     On Error GoTo NoElements
  13.     NumOfBytes = (UBound(Source) + 1) * LenB(Source(0))
  14.     ReDim Target(UBound(Source))                              'no need for a diffrent number of items to be a
  15.                                                             'true copy and save checking if the target is large enough...
  16.    
  17.         
  18.     CopyMemory Target(0), Source(0), NumOfBytes
  19.    
  20. NoElements:
  21. MsgBox "Empty Source array in Sub CopySourceArray() at " & Format$(Now(), "hh:nn ss"), vbCritical + vbOKOnly + vbMsgBoxSetForeground, "Void Array."
  22. On Error GoTo 0
  23. Exit Sub
  24. End Sub
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-7 10:15:00 | 显示全部楼层
嗨,贝伦德
同意,AutoCAD不#039;t通常接受UDT
我不会'然而,不要仅仅因为这个原因就直接驳回他们。与许多封装的解决方案一样,在封面下使用的内容可能对调用方完全隐藏
开发者必须问他/她自己很多问题,比如…内在的还是基于Win32 API的技术?是否存在性能影响?是否存在潜在的迁移问题?给定的技术有多灵活?它是否与问题域和基本数据类型很好地一致?它是否避免变体(blech)?它很容易映射到其他语言吗?等等。我只是在准备思考的食物。这可能是,也可能不是米克提出解决方案的最有效方式。本人'我只是想通过确定一些选择来尽我的职责。我感谢你,因为你也在这样做
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-7 10:59:21 | 显示全部楼层
Mick的另一个例子是观察--
  1. Option Explicit
  2. Type TPoint
  3.     Coord(0 To 2) As Double
  4. End Type
  5. Sub AnotherDemo ( )
  6.     Dim P1 As TPoint
  7.    
  8.     P1.Coord(0) = 10
  9.     P1.Coord(1) = 20
  10.     Dim P2 As TPoint
  11.    
  12.     P2 = P1
  13.    
  14.     Debug.Print P2.Coord(0)
  15.     Debug.Print P2.Coord(1)
  16. End Sub
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-7 12:35:34 | 显示全部楼层
我经常使用一个变体来传递double,但有时它会稍微慢一点,因为可以使用ismissing来检测它是否被传递
以下子项显示变体的速度是原来的两倍
  1. Sub PassTheDoubly()
  2.     Dim P1(2) As Double
  3.     Dim P2(2) As Double
  4.     Dim V As Variant
  5.     Dim i As Long, j As Integer
  6.     Dim T As Single
  7.    
  8.     T = Timer
  9.     P1(0) = 23: P1(1) = 23: P1(2) = 23
  10.     For i = 0 To 1000000
  11.         For j = 0 To 2
  12.             P2(j) = P1(j)
  13.         Next j
  14.     Next i
  15.    
  16.     Debug.Print "double time=" & Timer - T
  17.    
  18.     T = Timer
  19.     For i = 0 To 1000000
  20.       V = P1
  21.     Next i
  22.      Debug.Print "Var time=" & Timer - T
  23.    
  24. End Sub
双倍时间=0.375
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 16:51 , Processed in 0.659114 second(s), 61 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表