明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 6

[求助]请问大家我这段程序哪里有问题?

[复制链接]
发表于 2005-5-16 14:03:00 | 显示全部楼层 |阅读模式
[求助]请问大家我这段程序哪里有问题? PtPick = ThisDrawing.Utility.GetPoint(, "请输入要插入的点:")
Textdwx.text = PtPick(0)
Textdwy.text = PtPick(1)
Textdwz.text = PtPick(2) dwx = Val(Textdwx.text)
dwy = Val(Textdwy.text)
dwz = Val(Textdwz.text) dim ptTo(0 To 2) As Double ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz+k 我主要是想问问大家ptTo(2) = dwz+k这句话是不是有问题,当dwz为0时画出的图没的问题,但是只要dwz不为0时,就有问题了 在编程的时候我都考虑了起始点(dwx,dwy,dwz)的坐标的,应该思想没的做,主要是不是语法有错误
发表于 2005-5-16 14:07:00 | 显示全部楼层
1 dwz为0出了什么问题


2 需要完整代码
 楼主| 发表于 2005-5-16 14:16:00 | 显示全部楼层
下面就是绘制螺母的程序,dwz为不为0时,画出的图形只有个六棱柱,倒角倒不出来,但是dwz为0时,画出的图形就是对的 Public Function LMH(d, d1, Da, Dw, e, s, m, p, bl As Double, dwx, dwy, dwz As Double) '变量说明:D为螺母公称直径,Da为螺母内部倒角直径,Dw为螺母与螺栓联结时靠螺栓端的螺母外部倒角直径
'e为螺母的外径,s为螺母与螺栓联结时背靠螺栓端的螺母外部倒角直径
'm为螺母的厚度
'p为内螺纹的螺距
'bl为绘图比例 Dim objBoltT As Acad3DSolid, objCone As Acad3DSolid, objCylinder As Acad3DSolid
Dim xc As Integer
Dim yu

zh = Int(m / p)
yu = m - zh * p
xc = 2 * (2 * Int(m / p) + 1) - 3

Da = bl * Da '设置尺寸符合绘图比例
d = bl * d
Dw = bl * Dw
d1 = bl * d1
m = bl * m
e = bl * e
s = bl * s
p = bl * p
yu = yu * bl

'创建六边形
Dim objPline As AcadLWPolyline
Dim ptCen(0 To 2) As Double
ptCen(0) = dwx: ptCen(1) = dwy: ptCen(2) = dwz
Set objPline = AddPolygon(ptCen, 6, e / 2) ' (中心,边数,边长)

'创建六棱柱
Dim objRegion As AcadRegion
Set objRegion = PlToRegion(objPline)
Set objBoltT = ThisDrawing.ModelSpace.AddExtrudedSolid(objRegion, m, 0)
objRegion.Delete
' Dim ptTemp(0 To 2) As Double
' ptTemp(0) = 20: ptTemp(1) = 0: ptTemp(2) = 0
' objBoltT.Rotate3D ptCen, ptTemp, -PI / 2
' ThisDrawing.ModelSpace.AddLine ptCen, ptTemp

'创建圆锥体(原点是形体的中心,而不是底面的中心)
Dim ptTo(0 To 2) As Double
ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + (Tan(30 * 3.14 / 180) * Dw * 0.5 + m) * 0.5
Set objCone = ThisDrawing.ModelSpace.AddCone(ptCen, Dw * 0.5 + m / Tan(30 * 3.14 / 180), Tan(30 * 3.14 / 180) * Dw * 0.5 + m) '(中心,半径,高度)
objCone.Move ptCen, ptTo '确保三个实体的正确位置

'创建圆柱体
ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + m
Set objCylinder = ThisDrawing.ModelSpace.AddCylinder(ptCen, e, 2 * m)
objCylinder.Move ptCen, ptTo

'布尔运算的第一步:圆柱体减去圆锥体
objCylinder.Boolean acSubtraction, objCone
ptTo(0) = dwx + 0: ptTo(1) = dwy - 10: ptTo(2) = dwz + 0
objCylinder.Rotate3D ptTo, ptCen, PI
ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + m
objCylinder.Move ptCen, ptTo
'布尔运算的第二步:六棱柱减去上一步得到的对象
objBoltT.Boolean acSubtraction, objCylinder

'创建圆锥体(原点是形体的中心,而不是底面的中心)

ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + (Tan(30 * 3.14 / 180) * s * 0.5 + m) * 0.5
Set objCone = ThisDrawing.ModelSpace.AddCone(ptCen, s * 0.5 + m / Tan(30 * 3.14 / 180), Tan(30 * 3.14 / 180) * s * 0.5 + m) '(中心,半径,高度)
objCone.Move ptCen, ptTo '确保三个实体的正确位置

'创建圆柱体
ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + m
Set objCylinder = ThisDrawing.ModelSpace.AddCylinder(ptCen, e, 2 * m)
objCylinder.Move ptCen, ptTo

'布尔运算的第一步:圆柱体减去圆锥体
objCylinder.Boolean acSubtraction, objCone

'布尔运算的第二步:六棱柱减去上一步得到的对象
objBoltT.Boolean acSubtraction, objCylinder

'创建圆锥体(原点是形体的中心,而不是底面的中心)*******倒角 ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + (d / 2) * 0.5
Set objCone = ThisDrawing.ModelSpace.AddCone(ptCen, d / 2, d / 2) '(中心,半径,高度)
objCone.Move ptCen, ptTo '确保三个实体的正确位置
'布尔运算
objBoltT.Boolean acSubtraction, objCone '创建圆锥体(原点是形体的中心,而不是底面的中心)*******倒角 ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + (Da / 2) * 0.5
Set objCone = ThisDrawing.ModelSpace.AddCone(ptCen, Da / 2, Da / 2) '(中心,半径,高度)
objCone.Move ptCen, ptTo '确保三个实体的正确位置
ptTo(0) = dwx: ptTo(1) = dwy - 10: ptTo(2) = dwz
objCone.Rotate3D ptTo, ptCen, PI
ptTo(0) = dwx: ptTo(1) = dwy: ptTo(2) = dwz + m
objCone.Move ptCen, ptTo
'布尔运算
objBoltT.Boolean acSubtraction, objCone End Function
发表于 2005-5-16 17:44:00 | 显示全部楼层
晕,有很多函数你没放出来,根本没法调试,不过从参数上看你是不是在 Public function LMH(d, d1, Da, Dw, e, s, m, p, bl As Double, dwx, dwy, dwz As Double)中的d,d1等参数你都声明为了Variant然后所导致的错误。
 楼主| 发表于 2005-5-17 09:47:00 | 显示全部楼层
首先感谢楼上的师兄,由于程序本身有点多,不方便全部打出来,看了看你给的解释。 d, d1, Da, Dw, e, s, m, p, bl 这些参数我都是声明为的double型呀 只有PtPick数组,也就是拾取点的时候哪个数祖,才定义为的variant型 很有可能就是这里出了问题,但是不晓得具体是哪里 ptTo(2) = dwz + (d / 2) * 0.5
是不是dwz不能直接在后面加(d / 2) * 0.5哦 应该就是这里出了问题
发表于 2005-5-17 11:49:00 | 显示全部楼层
Public function LMH(d, d1, Da, Dw, e, s, m, p, bl As Double, dwx, dwy, dwz As Double)这样声明就是只有bl和dwz成了Double型,其他都默认为Variant,VB和Delphi是不一样地。 ptTo(2) = dwz + (d / 2) * 0.5
没有除数为0的情况不会有问题。
 楼主| 发表于 2005-5-17 14:04:00 | 显示全部楼层



多谢了哈


我试试看哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 16:52 , Processed in 0.171903 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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