乐筑天下

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

如何获得选定维度的扩展

[复制链接]

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-8-10 04:05:57 | 显示全部楼层 |阅读模式
我如何获得分机;从选定尺寸定义点X和Y
例如,第一个扩展;定义点:X= 0.0000;Y= 0.0000;Z= 0.0000第二次扩展;定义点:X= 2.0000;Y= 0.0000;Z= 0.0000尺寸线定义点:X= 2.0000;Y= 0.6359;Z= 0
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-8-10 04:15:30 | 显示全部楼层
您可以尝试如下所示的DXF值
  1. ;;;------------------------------------------------------------------
  2. ;;;------------------------------------------------------------------
  3. ;;;
  4. (defun c:dxflist (/ eko)
  5.   (setq eko (getvar "cmdecho"))
  6.   (setvar "cmdecho" 0)
  7.   (setq *lent*
  8.          (entget
  9.            (car (entsel "\nSelect entity to display its DXF value data: ")
  10.            )
  11.            '("*")
  12.          )
  13.   )
  14.   (textscr)
  15.   (list *lent*)
  16.   (foreach n *lent* (print n))
  17.   (setvar "cmdecho" eko)
  18.   (princ)
  19. )
  20. ;;;------------------------------------------------------------------
  21. ;;;------------------------------------------------------------------
  22. ;;;

回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-8-10 04:32:11 | 显示全部楼层
但是如何从vba中实现呢
我知道你可以得到;扩展;从对齐维度定义点,但不从旋转维度定义点
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-8-10 04:38:57 | 显示全部楼层
对不起,我没有'我注意到这是在VBA论坛上。。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-8-10 04:50:49 | 显示全部楼层

我相信对于旋转尺寸,这些点不会暴露在ActiveX中
编辑:我相信ActiveX中没有显示旋转尺寸的点。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-8-10 05:00:32 | 显示全部楼层
也就是说;真的,你说得对
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-8-10 10:17:47 | 显示全部楼层
Lisp就是这样
  1. 'SomeCallMeDave
  2. 'http://www.vbdesign.net/expresso/showthread.php?postid=83887#post83887
  3. 'Changed pAcadObj As AcadObject to pAcadObj As Object to access imagedef as well
  4. 'Modified by Jeff Mishler, March 2006, to get the Block table object, not Block_Record table object
  5. Public Function vbAssoc(pAcadObj, pDXFCode As Integer) As Variant
  6. Dim VLisp As Object
  7. Dim VLispFunc As Object
  8. Dim varRetVal As Variant
  9. Dim obj1 As Object
  10. Dim obj2 As Object
  11. Dim strHnd As String
  12. Dim strVer As String
  13. Dim lngCount As Long
  14. Dim i As Long
  15. Dim j As Long
  16. On Error GoTo vbAssocError
  17.    
  18. If Left(ThisDrawing.Application.Version, 2) = "16" Then
  19.   Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.16")
  20. Else
  21.   Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
  22. End If
  23. Set VLispFunc = VLisp.ActiveDocument.Functions
  24. If Not TypeOf pAcadObj Is AcadBlock Then
  25.     strHnd = pAcadObj.Handle
  26. Else
  27.     Dim lispStr As String
  28.     lispStr = "(cdr (assoc 5 (entget (tblobjname " & Chr(34) & "Block" & Chr(34) & Chr(34) & pAcadObj.Name & Chr(34) & "))))"
  29.     Set obj1 = VLispFunc.Item("read").Funcall(lispStr)
  30.     strHnd = VLispFunc.Item("eval").Funcall(obj1)
  31. End If
  32. Set obj1 = VLispFunc.Item("read").Funcall("pDXF")
  33.   varRetVal = VLispFunc.Item("set").Funcall(obj1, pDXFCode)
  34. Set obj1 = VLispFunc.Item("read").Funcall("pHandle")
  35.   varRetVal = VLispFunc.Item("set").Funcall(obj1, strHnd)
  36. Set obj1 = VLispFunc.Item("read").Funcall("(vl-princ-to-string (cdr (assoc pDXF (entget (handent pHandle)))))")
  37.   varRetVal = VLispFunc.Item("eval").Funcall(obj1)
  38. vbAssoc = varRetVal
  39. 'clean up the newly created LISP symbols
  40. Set obj1 = VLispFunc.Item("read").Funcall("(setq pDXF nil)")
  41.   varRetVal = VLispFunc.Item("eval").Funcall(obj1)
  42. Set obj1 = VLispFunc.Item("read").Funcall("(setq pHandle nil)")
  43.   varRetVal = VLispFunc.Item("eval").Funcall(obj1)
  44. 'release the objects or Autocad gets squirrely (no offense RR)
  45. Set obj2 = Nothing
  46. Set obj1 = Nothing
  47. Set VLispFunc = Nothing
  48. Set VLisp = Nothing
  49. Exit Function
  50. vbAssocError:
  51.   Set obj2 = Nothing
  52.   Set obj1 = Nothing
  53.   Set VLispFunc = Nothing
  54.   Set VLisp = Nothing
  55.   MsgBox "Error occurred " & Err.Description
  56. End Function
和一个例子
  1. Public Function DimRotation(objDim As AcadDimension, varPick As Variant)
  2. 'code(10)=cross point rhs of text,arrow2
  3. 'code(11)= text insertpt
  4. 'code(13) =Dimstartpt-extendline1
  5. 'code(14) =DimEndpt-extendline2
  6.     Dim dblRot As Double
  7.     Dim dblStartToVarPickAng As Double, dblEndAng As Double
  8.     Dim dblEndToVarPickAng As Double
  9.     Dim StartPt, EndPt, arrow2Pt
  10.     Dim varTest As Variant, Ppt, X(1)
  11.     With ThisDrawing.Utility
  12.    
  13.         'dblRot = vbAssoc(objDim, 50)
  14.            
  15.         varTest = vbAssoc(objDim, 10)
  16.         arrow2Pt = ParseDxfPoint(varTest)
  17.            
  18.         varTest = vbAssoc(objDim, 13)
  19.         StartPt = ParseDxfPoint(varTest)
  20.    
  21.         varTest = vbAssoc(objDim, 14)
  22.         EndPt = ParseDxfPoint(varTest)
  23.         
  24.         dblEndAng = .AngleFromXAxis(EndPt, arrow2Pt)
  25.                
  26.         X(1) = dblEndAng - 0.5 * Pi
  27.         
  28.         Dim dblDist As Double
  29.         dblDist = objDim.ExtensionLineExtend * objDim.ScaleFactor
  30.         Ppt = .PolarPoint(arrow2Pt, dblEndAng, dblDist)
  31.         
  32.         dblStartToVarPickAng = .AngleFromXAxis(StartPt, varPick)
  33.         If dblStartToVarPickAng > (2 * Pi) - 0.001 Then
  34.             dblStartToVarPickAng = dblStartToVarPickAng - 2 * Pi
  35.         End If
  36.         
  37.         dblEndToVarPickAng = .AngleFromXAxis(EndPt, varPick)
  38.         If dblEndToVarPickAng > (2 * Pi) - 0.001 Then
  39.               dblEndToVarPickAng = dblEndToVarPickAng - 2 * Pi
  40.         End If
  41.       
  42.         If Abs(dblStartToVarPickAng - dblEndAng) _
  43.             < Abs(dblEndToVarPickAng - dblEndAng) Then
  44.             
  45.             dblRot = dblEndAng + 0.5 * Pi * isLeft(EndPt, arrow2Pt, StartPt) 'function
  46.             Ppt = .PolarPoint(Ppt, dblRot, objDim.Measurement)
  47.         End If
  48.         
  49.         X(0) = Ppt
  50.         DimRotation = X
  51.         
  52.     End With
  53. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 03:17 , Processed in 0.677182 second(s), 66 queries .

© 2020-2025 乐筑天下

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