乐筑天下

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

设置 dxf 50 w/ lisp

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-5-22 11:32:52 | 显示全部楼层 |阅读模式
有没有人知道如何用Frank的VLAX.CLS设置一个扭曲的视图,
因为我不知道lisp Ican'弄清楚。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-5-22 12:51:41 | 显示全部楼层
正如托尼. t .会说的,拥有一个可以被调用的lisp函数比试图用VL接口来做所有的事情更有意义。这是一个小函数,它可以满足你的需要,但是我不确定TwistAngle实际上做了什么......我可以用这个函数改变它,视图对话框显示它被改变了,但是恢复的实际视图和它开始时是一样的。
无论如何,你可以这样从VBA打电话给我:
  1. ''First 2 functions from Tony T's example sent to me
  2. Public vlApp As Object
  3. ' Initialize and/or return vl application object
  4. ' Note that we don't try to cache any other Vl
  5. ' objects, because they are all document-specific
  6. Public Function GetVlApp() As Object
  7.     If (vlApp Is Nothing) Then
  8.         Set vlApp = AcadApplication.GetInterfaceObject("Vl.Application.16")
  9.     End If
  10.     Set GetVlApp = vlApp
  11. End Function
  12. ' Call this to get a LISP function defined in the Active document
  13. ' (do not cache the result because it is document-specific)
  14. Public Function VlFunc(Name As String) As Object
  15.     Set VlFunc = GetVlApp.ActiveDocument.Functions.Item(Name)
  16. End Function
  17. ''This calls the setviewangle lisp function
  18. Sub testViewAngle()
  19. Dim oView As AcadView
  20. Dim dRot As Double
  21. Set oView = ThisDrawing.Views.Item("test")
  22. dRot = 1.57
  23.     VlFunc("setviewangle").Funcall oView.Handle, dRot
  24. End Sub

和lisp:
  1. (defun setviewangle (hndl ang / elist)
  2.   (setq elist (entget (handent hndl)))
  3.   (entmod (subst (cons 50 ang)(assoc 50 elist) elist))
  4.   )

HTH,
杰夫
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-5-22 16:06:47 | 显示全部楼层
Jeff我在lisp自动加载方面遇到了问题,我已经在我的acaddoc.lisp中添加了必要的内容,但是没有成功。我必须在每个新的绘图中加载它,否则我会找不到密钥。然后我试着在vlax类中使用它作为一个字符串,我不能完全正确。
Dim Vl As New VLAX
Dim sLisp As String
sLisp = "(setq elist(entget(handent " " " & oview . handle & " ")" & _
"(entmod(subst(cons 50 " " " & dRot & " ")(assoc 50 elist)elist)))"
Vl。EvalLispExpression sLisp
另外,我找到了一种更新视口的方法,似乎需要更新新的视口。以前我使用过thisdrawing.save,它可以工作,但有一些缺点(在refedit中不起作用)。
查看句柄,application.update照常不执行任何操作
移动到ps/ms会创建一个新的句柄(和视窗)
删除效果很好。this drawing . active viewport . delete
更新新的活动视口
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-5-23 16:02:41 | 显示全部楼层
Bryco,如果您将我发布的lisp放入您的acaddoc.lsp中,并且acaddoc.lsp位于搜索路径中,它应该会加载到每个图形中。如果不是,那就有问题了....
至于您尝试在VBA使用它,这里是正确的语法,但它仍然不工作。lisp变量“elist”设置正确,但是(entmod)失败了,我看不出它失败的任何原因。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-5-28 13:38:47 | 显示全部楼层
我在谷歌上搜索了大约一个小时的vl,读到了一些关于需要vl-load-com的内容。无论我把它放在哪里都没有用,所以也许你在启动时做了一些事情,允许vl调用lisp,或者像你说的有问题。
杰夫没有出现。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-5-28 15:11:54 | 显示全部楼层
大概是因为我是低能儿没贴吧....我真的不应该一边看比赛一边在这里发帖.....
  1. sLisp = "(setq elist (entget (handent """ & oView.handle & """)))" & _
  2.   "(entmod (subst (cons 50 " & dRot & ")(assoc 50 elist) elist))"

(VL-load-com)只需在每个Acad会话中调用一次。把它放在你的acad.lsp里,然后忘掉它。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 19:21 , Processed in 0.566203 second(s), 64 queries .

© 2020-2025 乐筑天下

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