DS-precast 发表于 2022-7-6 22:26:10

vlax曲线的vba等效值-

大家好
 
我试图编写一个vba例程,该例程允许我通过指定三个点来获得多段线形状的起始宽度和长度。多段线通常由正交直线组成(但并不总是如此)
 
点1和2是第一条边的起点和终点,从中可以得到第一条边的起始宽度和角度。点3是另一侧的任意点。间隔的长度是点3和第一条边(连接点1和2的线)之间的垂直距离。
 
我已经使用vlax curve getClosestPointTo编写了一个(粗糙的)LISP例程,但现在我想编写一个vba例程来实现同样的功能。
 
例行程序的目的是协助制作预制楼板布置图。多段线形状将是建筑图形中的间隔;宽度将提供预制梁的长度;长度将提供填充地板的长度。
 
有谁能帮我或给我指出正确的方向吗?
 
非常感谢
 
 
 
;; dtr - degrees to radians
;; rtd - radians to degrees

(defun dtr (a)
(* pi (/ a 180.0))
)

(defun rtd (a)
(/ (* a 180.0 pi))
)

(defun C:bay (/ pt1 pt2 pt3 pt4)
(setq OrigCmdEcho (getvar "CMDECHO")); gets CMDECHO value
(setvar "CMDECHO" 0); sets to 0 - wont echo on command line
(vl-load-com)
(setq pt1 (getpoint "\Enter Point 1 : "))
(setq pt2 (getpoint pt1 "\nEnter point 2 : "))
(setq myline (command "_line" pt1 pt2 ""));draws 1st line
(setq mylinename (entlast));obtain entity name of myline
(setq pt3 (getpoint pt2 "\nEnter Point 3 : ")); get point on opposite side of rectangle
(setq Span (distance pt1 pt2)); sets Span = length of myline
(setq ang1 (angle pt1 pt2)); sets ang1 equal to line angle
(setq mylinenamevla (vlax-ename->vla-object mylinename)); converts to vla object
(setq pt4 (vlax-curve-getClosestPointTo mylinenamevla pt3 T)); gets perpendicular point
(setq perpline (command "_line" pt3 pt4 "")); draws perpendicular line
(setq perplinename (entlast));obtain entity name of perpline
(setq bayl (distance pt3 pt4)); sets bay length to length of perpline
(princ "\nSpan is : ")(princ Span)
(princ "\nBay length is : ")(princ bayl)
(command "_erase" mylinename "")
(command "_erase" perplinename "")
(setvar "CMDECHO" OrigCmdEcho); puts back to original value
(princ)
)

BIGAL 发表于 2022-7-6 22:43:27

我运行了代码,不确定你要把我带到哪里,我只需要为每个基本形状做一个lisp,让L X W等指向它,然后你用Region&Massprop得到它的属性,这提供了你需要的东西,比如质心和面积。对于一个普通的直肠来说,代码有点冗长。甚至画在一个角度上。
 
很确定他们的一些倾斜面板的东西在这里的Cadtutor搜索它。
 
----------------   REGIONS   ----------------
Area:                  11871.234
Perimeter:               549.003
Bounding box:         X: 291.749--467.573
                     Y: 191.899--340.565
Centroid:             X: 383.674
                     Y: 257.132
Moments of inertia:   X: 794650878.004
                     Y: 1770166566.666
Product of inertia:XY: 1174021820.406
Radii of gyration:    X: 258.726
                     Y: 386.153
Principal moments and X-Y directions about centroid:
                     I: 9154728.825 along
                     J: 23258071.958 along [-0.208 0.978]

DS-precast 发表于 2022-7-6 22:52:06

嗨,比格尔,非常感谢你的回复。
 
Region&Massprop并不是我真正想要的。
 
也许我可以重新定义一下我的问题。这是用VBA编写的大型项目的一小部分。
 
我想做的是点击屏幕上的三个点。这些点形成三角形(如果它们不在直线上)。点1和2之间的一条线构成三角形的“底”。我可以提取三角形“基线”的长度和角度。
 
然后我想找到从点3到三角形“底”的垂直距离(三角形的高度)。
 
我在LISP中使用vlax curve GetClosestPointTo实现了这一点,但我想知道VBA中是否有类似或等效的命令。
 
换句话说,如何使用VBA实现与LISP例程相同的结果。
 
希望这能澄清。

fixo 发表于 2022-7-6 23:05:27

在论坛上搜索Curve。cls和Vlax。cls将vlax函数用于VBA

DS-precast 发表于 2022-7-6 23:09:30

非常感谢fixo。
 
我用Vlax下载了你的文件。dvb从另一个线程,我相信它给了我所有我需要破解这个螺母。
 
我还没有在VBA编程中遇到类模块,所以我希望它也能提供一个机会来提高我的编程能力。
 
同时,为了其他用户的利益,我基于三角形几何(Heron公式-来自维基百科)编写了几行代码,以获得三角形的高度。这是一个解决方案,但可能没有那么优雅。
 
再次感谢。

SEANT 发表于 2022-7-6 23:22:36

不幸的是,我无法访问带有VBA的系统。
 
我们只是在谈论2D吗;该Excel电子表格演示了一种相当温和的计算方法。3D兼容性会稍微复杂一些,但仍然不算太差。
间隔长度。拉链

DS-precast 发表于 2022-7-6 23:35:21

谢谢你的回复。它用于二维点,而不是三维点。你的公式提供了另一个有趣的选择。
 
非常感谢。
页: [1]
查看完整版本: vlax曲线的vba等效值-