乐筑天下

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

[综合讨论] 插入块的点

[复制链接]

4

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-8 12:57:08 | 显示全部楼层 |阅读模式
早上好
 
我已经在论坛上查看了是否有关于这个的现有线程,但我还没有找到。
 
我有一个关于AutoCAD的小问题。是否可以轻松地为类型的每个块设置一个点。例如,我在“WPI 26”层上有一些名为“WPI2 601”的块。有没有办法选择所有这些类型的块,并为每个块在块的坐标处放置一个点。。。
 
我有许多不同的块和许多块(还有许多文件),所以我不能手动执行。这将花费太多时间。。。我可以忘记其中的一些。
 
谢谢你的帮助,
拉米斯
回复

使用道具 举报

18

主题

434

帖子

422

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
94
发表于 2022-7-8 13:06:45 | 显示全部楼层
说点什么?你会如何使用这些信息?一个文本文件包含一个列表,其中包含图形中每个块的名称、ins点和图层,怎么样?它可以用Lisp完成。也可以设置为批量处理目录中的所有图形。您可以在Excel中打开该文件,并根据需要对其重新排序。这对你有帮助吗?
回复

使用道具 举报

4

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-8 13:19:18 | 显示全部楼层
AutoCAD将被放入软件中,以将信息转换为其他格式。但要使转换良好,必须将点对象设置为dxf文件上的点。块不对流。但在我的文件中,这些对象是用块绘制的,以便有一个更容易理解的图表。这就是为什么我要选择每种类型的块,为它们设置一个转换点。我可能会尝试用lisp来做这件事,但我不太熟悉那种语言。。。我只使用AutoCAD来准备和重新组织dxf文件,以获得最佳转换,最大限度地转换对象,从而最大限度地减少工作量,然后。。。
我不知道我的解释和我的英语是否清楚。。。
回复

使用道具 举报

30

主题

71

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
152
发表于 2022-7-8 13:25:42 | 显示全部楼层
我有lisp可能会帮助你,但它会把坐标点在表中,并将开始点没有
e、 g N e
P1 3232132159986555566
P2 3266665832 996586223
用TH开始lisp
设置为最终。lsp
回复

使用道具 举报

4

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-8 13:32:25 | 显示全部楼层
谢谢你的lisp函数。但这个功能似乎是手动完成的。我正在寻找一种方法来自动做到这一点。。。我认为我必须过滤所有相同类型的块来选择它们,然后在它们的坐标处画一个点。
 
我这里有一个lisp函数,应该可以工作,但我不知道如何正确选择块。
问题来自这一行(setq ss(ssget’((0。“BLOCK”)(8。“WPI26”)),其中选择称为零。但当我点击一个块时,它是这个层WPI26出现,块的名称是WPI2 601。。。
 
(定义c:bck2pt()
(princ“\n选择块:”)
(setq ss(ssget’((0。“块”)(8。“WPI26”)))
(setq项目0)
(重复(sslength ss)
(setq Ename(ssname ss项目))
(setq CtrPt(cdr(assoc 10(entget Ename)))
(命令“_点”CtrPt)
(setq项(+1项))
)
(普林斯)
)
回复

使用道具 举报

7

主题

708

帖子

701

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-8 13:41:31 | 显示全部楼层
这里有一种不用口齿不清的方法。
 
用点创建块。然后使用“blockreplace”。然后可以通过分解这些块将其“转换”为点。
回复

使用道具 举报

4

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-8 13:49:25 | 显示全部楼层
我认为对我来说,使用lisp会更容易,因为我在文件上还有其他事情要做,所以我会将其包含到脚本中。。。
我可以选择要使用的类型块
(setq ss(ssget“_x”'((0。“插入”)(8。“WPI26”)))
在这里,选择不是空的。。。
但是当我用
(setq ss(ssget’((0。“插入”)(8。“WPI26”)))
据说“错误:错误参数类型:lselsetp nil”
 
此lisp函数最初用于在圆心绘制点,使用命令选择圆
(setq ss(ssget’((0。“圆”)(40.7.5)))
 
可能在lisp函数的其余部分中需要更改某些内容,以获取块的坐标。。。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-8 13:56:48 | 显示全部楼层
试试这个:
 
  1. (defun c:b2p(/ sBl cLay bSet)
  2. (if(and
  3.    (setq sBl(entsel "\nPick sample block > "))
  4.    (setq cLay(cdr(assoc 8(entget(car sBl)))))
  5.    (setq bSet(ssget "_X" (list '(0 . "INSERT")(cons 8 cLay))))
  6.    ); end and
  7.   (progn
  8.     (princ(strcat "\n"(itoa(sslength bSet)) " blocks found. "))
  9.     (sssetfirst nil bSet)
  10.     (initget 1 "Yes No")
  11.     (setq cAns(getkword "\nAdd points? [Yes/No]: "))
  12.     (if(= "Yes" cAns)
  13.       (mapcar '(lambda(x)(command "_.point"
  14.                            (cdr(assoc 10(entget x)))))
  15.        (vl-remove-if 'listp
  16.          (mapcar 'cadr(ssnamex bSet))))
  17.       ); end if
  18.     ); end progn
  19.   ); end if
  20. (princ)
  21. ); end of c:b2p
回复

使用道具 举报

30

主题

71

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
152
发表于 2022-7-8 14:03:45 | 显示全部楼层
干得好干得好
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-1-31 11:20 , Processed in 0.157706 second(s), 70 queries .

© 2020-2025 乐筑天下

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