乐筑天下

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

[编程交流] 帮助:将缩放到的LISP

[复制链接]

48

主题

304

帖子

256

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
240
发表于 2022-7-5 20:01:42 | 显示全部楼层 |阅读模式
是否有人拥有一个LISP,可以根据其中一个打开的图形缩放到所有打开图形的特定位置?
 
意思
1) 我打开图纸1,图纸2。。。。。。。。。图纸100。
2) 在图1中,我缩放到了一个特定的位置。
从这里,我想激活一个LISP的图纸2到图纸100缩放到同一个位置。
 
此外,任何打开的后续图形也将缩放到同一位置,直到我停用LISP。
 
谢谢
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:05:25 | 显示全部楼层
提示:
'视图大小
'屏幕大小
vl传播
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
240
发表于 2022-7-5 20:10:58 | 显示全部楼层
 
谢谢将对此进行更多搜索。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:12:14 | 显示全部楼层
如果pBe可以为我们指出正确的方向,如何自动完成这项工作-使用(vla激活)。。。问题是,当新文档被激活时,CAD跳转到它并继续在启动的文档中(而不是在切换的新文档中)评估lisp。。。我唯一能写的是这行,但实际上如果你有100个DWG,你必须手动做100次。。。因此,如果有人知道我们在这里遗漏了什么,请向我们展示一些信息。。。
 
  1. (defun c:setcurrentviewtoalldwgs ( / v c uo ux uy vd pe )
  2. (setq v (getvar 'viewsize) c (getvar 'viewctr))
  3. (setq uo (trans '(0.0 0.0 0.0) 1 0))
  4. (setq ux (trans '(1.0 0.0 0.0) 1 0))
  5. (setq uy (trans '(0.0 1.0 0.0) 1 0))
  6. (if (eq (getvar 'cvport) 1)
  7.    (progn
  8.      (mapcar 'vl-propagate (list 'v 'c 'uo 'ux 'uy))
  9.      (setq fn (open "c:/processdoc.lsp" "w"))
  10.      (write-line "(vl-load-com)" fn)
  11.      (write-line "(setq d (vla-get-activedocument (vlax-get-acad-object)))" fn)
  12.      (write-line "(vla-regen d acactiveviewport)" fn)
  13.      (write-line "(if" fn)
  14.      (write-line "(not" fn)
  15.      (write-line "(and" fn)
  16.      (write-line "(equal uo '(0.0 0.0 0.0))" fn)
  17.      (write-line "(equal ux '(1.0 0.0 0.0))" fn)
  18.      (write-line "(equal uy '(0.0 1.0 0.0))" fn)
  19.      (write-line ")" fn)
  20.      (write-line ")" fn)
  21.      (write-line "(progn" fn)
  22.      (write-line "(setq ucs (vla-add (vla-get-usercoordinatesystems d) (vlax-3d-point uo) (vlax-3d-point ux) (vlax-3d-point uy) "{ UCS }"))" fn)
  23.      (write-line "(vla-put-activeucs d ucs)" fn)
  24.      (write-line "(command "_.UCS" "_W")" fn)
  25.      (write-line "(vla-delete ucs)" fn)
  26.      (write-line "(command "_.UCS" "_P")" fn)
  27.      (write-line ")" fn)
  28.      (write-line "(command "_.UCS" "_W")" fn)
  29.      (write-line ")" fn)
  30.      (write-line "(command "_.ZOOM" "_C" c v)" fn)
  31.      (write-line "(if ucs (setq ucs nil))" fn)
  32.      (write-line "(if d (setq d nil))" fn)
  33.      (write-line "(mapcar '(lambda ( x ) (set x nil)) (list 'v 'c 'uo 'ux 'uy))" fn)
  34.      (write-line "(princ)" fn)
  35.      (close fn)
  36.    )
  37.    (progn
  38.      (setq vd (trans (getvar 'viewdir) 1 0 t))
  39.      (setq pe (getvar 'perspective))
  40.      (mapcar 'vl-propagate (list 'v 'c 'uo 'ux 'uy 'vd 'pe))
  41.      (setq fn (open "c:/processdoc.lsp" "w"))
  42.      (write-line "(vl-load-com)" fn)
  43.      (write-line "(setq d (vla-get-activedocument (vlax-get-acad-object)))" fn)
  44.      (write-line "(command "_.DVIEW" "" "_PO" "0,0,0" vd "")" fn)
  45.      (write-line "(vla-regen d acactiveviewport)" fn)
  46.      (write-line "(if" fn)
  47.      (write-line "(not" fn)
  48.      (write-line "(and" fn)
  49.      (write-line "(equal uo '(0.0 0.0 0.0))" fn)
  50.      (write-line "(equal ux '(1.0 0.0 0.0))" fn)
  51.      (write-line "(equal uy '(0.0 1.0 0.0))" fn)
  52.      (write-line ")" fn)
  53.      (write-line ")" fn)
  54.      (write-line "(progn" fn)
  55.      (write-line "(setq ucs (vla-add (vla-get-usercoordinatesystems d) (vlax-3d-point uo) (vlax-3d-point ux) (vlax-3d-point uy) "{ UCS }"))" fn)
  56.      (write-line "(vla-put-activeucs d ucs)" fn)
  57.      (write-line "(command "_.UCS" "_W")" fn)
  58.      (write-line "(vla-delete ucs)" fn)
  59.      (write-line "(command "_.UCS" "_P")" fn)
  60.      (write-line ")" fn)
  61.      (write-line "(command "_.UCS" "_W")" fn)
  62.      (write-line ")" fn)
  63.      (write-line "(command "_.ZOOM" "_C" c v)" fn)
  64.      (write-line "(setvar 'perspective pe)" fn)
  65.      (write-line "(if ucs (setq ucs nil))" fn)
  66.      (write-line "(if d (setq d nil))" fn)
  67.      (write-line "(mapcar '(lambda ( x ) (set x nil)) (list 'v 'c 'uo 'ux 'uy 'vd 'pe))" fn)
  68.      (write-line "(command "_.-PURGE" "_B" "DVIEWBLOCK" "_N")" fn)
  69.      (write-line "(princ)" fn)
  70.      (close fn)
  71.    )
  72. )
  73. (prompt "\nSwitch to each opened DWG, and type (load "c:/processdoc.lsp") and when finished return to master DWG and type (vl-file-delete "c:/processdoc.lsp")")
  74. (textscr)
  75. (princ)
  76. )
  77. (defun c:scvtad nil (c:setcurrentviewtoalldwgs))
M.R。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:15:04 | 显示全部楼层
不太清楚OP是什么意思
 
 
如果您的意思是不打开图形文件?[ODBX;
 
我想到的是获得所需的坐标,并通过vl传播传递值,使用一个短代码,使用打开的图形中的前一个值。
 
 
@vernonlee公司
  1. (setq var "Banana Cake")
  2. (vl-propagate 'var)

 
这些值将在绘图任务中浮动,直到用户将这些值设置为零。将处理新图纸和新打开的图纸
var变量的值为“全局”
 
打开现有图形
命令:!风险值
“香蕉蛋糕”
 
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
240
发表于 2022-7-5 20:18:37 | 显示全部楼层
 
你好,pBe。
 
为了澄清这一情况:-
 
1) 打开dwg A、dwg B和dwg C
2) 在dwg A(活动dwg)中,我将缩放到左下角(在图纸空间中)
(此时,我将激活LISP,当我转到dwg B和dwg C时,它们的视图将缩放到左下角(在图纸空间中),就像dwg A一样。
 
忽略第3步。这只会让事情变得更复杂
因此,对于我的100幅画,我希望做的是:-
1) 打开20个图纸,
2) 在dwg 1(活动dwg)中,我只需缩放到该位置,然后激活LISP,其余19个dwg将跟随。
 
我只需要重复这个步骤5次&我已经画了100张了。
这比放大100倍要好,对吗?
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
240
发表于 2022-7-5 20:21:37 | 显示全部楼层
感谢marko_ribar提出的LISP。
 
我会试试的。如果这涵盖了第2步,那么我准备好了。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:24:46 | 显示全部楼层
这真的很容易vernonlee即使没有任何花哨的编码,告诉我,你要打开全部20个文件吗?
 
编辑:是的,最好试试Marko_ribar的代码,这可能很适合你的要求。我看到马尔科也考虑了UCS条件。我现在没有cad
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:28:43 | 显示全部楼层
pBe,是的,它可以工作,但您仍然需要手动切换到打开的DWG,并在每个不同的DWG中手动粘贴行:(load“c:/processdoc.lsp”)。。。所以如果有100个,我想这肯定不会节省时间。。。我们仍然需要将命令行传递给打开的DWG,并在之前以某种不同的方式激活它们-自动(可能我错了,但我认为这是不可能的-即使我们可以通过(vl传播)函数传递完整的函数,我们在切换DWG后如何执行它??)
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:31:57 | 显示全部楼层
一个简单的代码[加载/acaddoc.lsp或其他]
 
[未测试]
 
  1. (defun c:dew ()
  2.      (if (or OneCorner (setq OneCorner (getpoint "\nPick Lower left corner")))
  3.              (progn (command "_Zoom" "_Window" "_non" OneCorner "_non"
  4.                      (if OtherCorner OtherCorner
  5.                    (setq OtherCorner (getcorner OneCorner "\nSpecify opposite corner:"))))
  6.                      (vl-propagate 'OneCorner)
  7.                (vl-propagate 'OtherCorner))))
  8.      
  9. (Defun c:rdew ()
  10.      (setq OneCorner nil
  11.            OtherCorner nil)
  12.      (c:dew)
  13.      )
  14.      
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:12 , Processed in 0.368094 second(s), 72 queries .

© 2020-2025 乐筑天下

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