乐筑天下

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

[编程交流] 在AeccSurfa上调用方法

[复制链接]

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 22:23:28 | 显示全部楼层 |阅读模式
我希望有人能让我走上正确的方向。我想创建一个命令:
 
1.提示用户选择AECC曲面
 
2、提示用户选择行
 
3.调用IntersectPointWithSurface方法,使用直线的起点作为起点,直线的起点和终点作为方向向量。
 
4、返回点
 
我尝试过vlisp,但一直出现错误:
 
; 错误:发生未知异常
; 警告:未知异常时跳过了展开
 
我想在VBA中尝试一下,看看是否会出现同样的错误。我对VBA太陌生了,甚至都无法开始。任何帮助都将不胜感激。
 
当做
 
hippe013
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:39:37 | 显示全部楼层
两件事。。。。
 
你说你用Visual LISP试过这个。。。你能发代码吗?
 
至于VBA。。。跳过它,除非你已经熟练掌握了它,因为它不再受微软的支持。相反,考虑学习。NET(无论是VB.NET还是C#)。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:45:33 | 显示全部楼层
如果您坚持使用VBA,请考虑以下博客:
 
VBA相交点与曲面
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 22:50:35 | 显示全部楼层
我确实弄明白了。我将变体作为论据传递给该方法。它需要有一个点的列表形式。ie’(0)
我的工作代码如下:
 
 
  1. (defun c:day ()
  2. ;Please note that there is not any error trapping
  3. ;Load Visual Lisp Extensions
  4. (vl-load-com)
  5. ;Prompt User for the Line Object
  6. (setq line-obj (vlax-ename->vla-object (car (entsel "\nSelect Line Object: "))))
  7. ;Prompt User for the Surface Object
  8. (setq surface-obj (vlax-ename->vla-object (car (entsel "\nSelect Surface Object: "))))
  9. ;Define the Point to Vector function
  10. (defun pnt->vec (p1 p2 / vx vy vz)
  11.    (if (equal p1 p2)
  12.      (list 0 0 0)
  13.      (progn
  14. (setq dist (distance p1 p2))
  15.        (setq vx (/ (- (nth 0 p2)(nth 0 p1)) dist))
  16.        (setq vy (/ (- (nth 1 p2)(nth 1 p1)) dist))
  17.        (setq vz (/ (- (nth 2 p2)(nth 2 p1)) dist))
  18.        (list vx vy vz))
  19.      )
  20.    )
  21. ;Return the StartPoint of the Line
  22. (setq p1 (vlax-safearray->list (vlax-variant-value (vla-get-startpoint line-obj))))
  23. ;Return the Vector using the Start and End Point of the Line
  24. (setq vec
  25. (pnt->vec
  26.    (vlax-safearray->list (vlax-variant-value (vla-get-startpoint line-obj)))
  27.    (vlax-safearray->list (vlax-variant-value (vla-get-endpoint line-obj)))
  28.    )
  29. )
  30. ;Invoke the IntersectPointWithSurface Method
  31. (setq p (vlax-invoke surfobj 'IntersectPointWithSurface p1 vec))
  32. )

 
 
好啊因此,在做了一些进一步的测试后,我发现上述代码在Civil 3D 2011上同样有效。然后,我使用了该代码并在Civil 3D 2009上进行了尝试,该方法期望该争论是变体。我没有收到我第一次描述的解卷错误。很抱歉在VBA和中发布此代码。NET论坛,但第一次寻找VBA/。这个谜题的答案。我似乎在使用这段代码时没有得到一致的结果。
 
 
当做
 
Hippe013
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:01:48 | 显示全部楼层
我工作时有两种版本,所以我会在周一午休时再次查看。。。同时,要注意(vlax ename->vla object nil):
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 23:08:28 | 显示全部楼层
不确定,但经验表明,我不会在defun名称“pnt->vec”中加一个>,即使*似乎工作正常,通常某些键可以直接插入你的程序,解释器就是不喜欢它们。还有其他人有问题吗?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:23:11 | 显示全部楼层
我同意命令应该很容易输入,一般来说。。。使用时,我通常将“->”留给子函数,如我在这里所示:
 
http://www.cadtutor.net/forum/showthread.php?57570-Layer Creater Lisp例程问题&p=390543&viewfull=1#post390543
 
一个内置示例是vlax ename->vla object等。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 23:29:09 | 显示全部楼层
 
谢谢你调查此事!
 
我知道使用(vlax ename->vla object nil)不是一种好的做法。我的代码写得很快,只是为了便于阅读。我注意到代码中没有任何错误捕捉。我通常不会在自己使用的代码中放置错误捕捉。如果我为其他人写文章,我将放置所有必要的错误捕捉,因为该用户将不了解可能导致的潜在错误。我经常为这样一个特定的任务编写代码,然后它就会被扔进代码墓地。
 
至于在子程序名称中使用“->”。我不知道这会潜在地引起问题。我想,如果内置函数使用它们,我也可以。ie vlax safearray->列表或vlax ename->vla对象。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:20 , Processed in 0.532916 second(s), 68 queries .

© 2020-2025 乐筑天下

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