明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3040|回复: 15

vba/vb编写的标注道路桩号的源代码!

[复制链接]
发表于 2015-4-5 23:01:22 | 显示全部楼层 |阅读模式
本帖最后由 zzyong00 于 2015-4-5 23:08 编辑

在本论坛的lisp版,有些高手放出了标注桩号的一些lisp代码,但在vba/vb版,却一个也没有,客观上讲,这是vba的一些弱项导致的,在vba中,没有Curve类,也没有vlax-curve-get族函数,如下:
  1. vlax-curve-getPointAtDist
  2. vlax-curve-getPointAtParam ;
  3. vlax-curve-getDistAtPoint ;
  4. vlax-curve-getDistAtParam ;
  5. vlax-curve-getParamAtPoint ;;
  6. vlax-curve-getParamAtDist ;;
  7. vlax-curve-getStartParam ;;
  8. vlax-curve-getendParam ;;
  9. vlax-curve-getStartPoint ;;;
  10. vlax-curve-getEndPoint;;
  11. vlax-curve-getFirstDeriv;;
  12. vlax-curve-getSecondDeriv;;
  13. vlax-curve-getSecondDeriv


如果自己实现以上函数,达到Autodesk函数的水平,实在不容易(也不是不可能),幸好,我们有vb调用lisp的类VLAX.cls(BY Frank Oquendo),而且,这位大神Frank Oquendo,还实现了Curve.cls类,让我们后来人轻松了很多!在此,我向前辈致敬!
由于源码中用的很多函数或过程都在这个帖子:http://bbs.mjtd.com/forum.php?mo ... 2535&fromuid=332660
所以,还请各位移步!
看效果:

本帖子中包含更多资源

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

x

本帖被以下淘专辑推荐:

发表于 2015-4-5 23:30:45 | 显示全部楼层
http://bbs.mjtd.com/thread-107745-1-1.html
刚看了下 efan的是用Arx做得Com组件,,不过支持的版本不多
原则上用VBA可以直接调用Arx的函数,efan以前也做过很多研究
有时间的话 我试试用.Net做个Com库看看
 楼主| 发表于 2015-4-5 23:46:47 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-4-5 23:30
http://bbs.mjtd.com/thread-107745-1-1.html
刚看了下 efan的是用Arx做得Com组件,,不过支持的版本不多
...

我没有2013,我用2014 x64测试他的arx,好像输出一个时间,但对象不能创建成功,不知道他的arx设置有过期时间,还是的确无法调用!
期盼雪版的.Net版的Curve类com库出世!
 楼主| 发表于 2015-4-5 23:56:02 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-4-5 23:30
http://bbs.mjtd.com/thread-107745-1-1.html
刚看了下 efan的是用Arx做得Com组件,,不过支持的版本不多
...

刚才在2004下测试efan的arx是成功的,不过,efan封装的不全,没有vlax-curve-getFirstDeriv,vlax-curve-getSecondDeriv
发表于 2015-4-6 20:42:54 | 显示全部楼层
本帖最后由 雪山飞狐_lzh 于 2015-4-6 22:29 编辑



1.0测试版 解压上面文件后,把他们放到d:\TlsCad\Bin里面 本来写注册表可以直接做到程序里 但是测试版先随意了
运行1.reg注册
然后在cad里nerload安装。。。正式版上面的步骤会少掉
VBA引用TlsCad.Common.tlb



测试代码

  1. Sub tt()

  2. Dim cm As TlsCad_Common.CurveManager
  3. Set cm = Application.GetInterfaceObject("TlsCad.Common.CurveManager")

  4. Dim obj As AcadEntity, pnts(1)
  5. ThisDrawing.Utility.GetEntity obj, pnts(0)

  6. Dim cc As TlsCad_Common.Curve
  7. Set cc = cm.Add(obj.ObjectID)

  8. pnts(0) = cc.GetClosestPointTo(pnts(0), False)
  9. pnts(1) = ThisDrawing.Utility.GetPoint()
  10. pnts(1) = cc.GetClosestPointTo(pnts(1), False)

  11. cc.SplitByParams cc.GetParamsByPoints(pnts)
  12. obj.Delete
  13. cc.Dispose

  14. End Sub

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-4-6 21:22:06 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-4-6 20:42
1.0测试版 解压上面文件后,把他们放到d:\TlsCad\Bin里面 本来写注册表可以直接做到程序里 但是测试版先随 ...

版主你好,辛苦了!
我电脑里只有64位的Autocad,obj.ObjectID是longptr类型,与您tlb里定义的类型long不一致。
如果我把ObjectID用ObjectID32代替,就会出现以下问题:

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-4-6 21:24:59 | 显示全部楼层
用.net写的dll,是不是各cad版本都得分别编译?
发表于 2015-4-6 21:28:15 来自手机 | 显示全部楼层
没考虑64位的问题你把64位cad的mgd文件上传我看看
Acmgd.dll
Acdbmgd.dll
Actcmgd.dll
发表于 2015-4-6 21:30:42 来自手机 | 显示全部楼层
应该2008到2012 32位通用吧 64位没用过不知道 13以上高版本就要重编了吧
 楼主| 发表于 2015-4-6 21:35:30 | 显示全部楼层

我在autocad2008下也没用调用成功

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-22 21:25 , Processed in 0.193974 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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