乐筑天下

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

[编程交流] 自定义转换和enti

[复制链接]
aps

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:24:35 | 显示全部楼层 |阅读模式
你好
 
首先,很抱歉我的英语很差。我是AutoLISP的初学者,我主要使用GIS软件和数据,但我必须解决以下问题。我收到了一个大的DWG文件,其中包含大约30000个具有各种实体类型和多个图层的实体。一切都在一个自定义的局部坐标系中,我必须将其转换为另一个坐标系。我只有转换方程,所以我根据在本论坛和其他论坛上找到的代码创建了第一个AutoLISP文件:
 
它主要做我想要的,但有3个问题:
 
1、不移动多线和区域实体类型的对象。
 
2.它仅转换一部分直线和三维面图元。例如:线图元的一个节点移动到新位置,另一个节点保持在原始位置,因此结果是一条长线,一个节点在正确位置,一个节点在旧位置。
 
3.它可以完美地处理大多数文本实体,但也有一些文本保留在其原始位置,我无法找出“工作”文本和“非工作”文本之间的区别。
 
如何解决上述问题,有什么建议吗?
谢谢你的帮助!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 22:34:43 | 显示全部楼层
对于MLINE???,区域和三维实体我帮不上忙,但我想对于所有其他类型,这个修复可以做到。。。
 
  1. (defun c:customtransform ( / ss i entitylist obj new j x y )
  2. (if (setq ss (ssget "_:L"))
  3.    (repeat (setq i (sslength ss))
  4.      (setq entitylist (entget (ssname ss (setq i (1- i)))))
  5.      (setq obj (ssname ss i))
  6.      (setq new nil)
  7.      (repeat (setq j (length entitylist))
  8.        (cond
  9.          ( (= 10 (car (nth (setq j (1- j)) entitylist)))
  10.            (setq x (cadr (nth j entitylist))
  11.                  y (caddr (nth j entitylist))
  12.            )
  13.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  14.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  15.            (setq new (cons (list 10 x y) new))
  16.          )
  17.          ( (= 11 (car (nth j entitylist)))
  18.            (setq x (cadr (nth j entitylist))
  19.                  y (caddr (nth j entitylist))
  20.            )
  21.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  22.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  23.            (setq new (cons (list 11 x y) new))
  24.          )
  25.          ( (= 12 (car (nth j entitylist)))
  26.            (setq x (cadr (nth j entitylist))
  27.                  y (caddr (nth j entitylist))
  28.            )
  29.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  30.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  31.            (setq new (cons (list 12 x y) new))
  32.          )
  33.          ( (= 13 (car (nth j entitylist)))
  34.            (setq x (cadr (nth j entitylist))
  35.                  y (caddr (nth j entitylist))
  36.            )
  37.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  38.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  39.            (setq new (cons (list 13 x y) new))
  40.          )
  41.          ( (= 14 (car (nth j entitylist)))
  42.            (setq x (cadr (nth j entitylist))
  43.                  y (caddr (nth j entitylist))
  44.            )
  45.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  46.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  47.            (setq new (cons (list 14 x y) new))
  48.          )
  49.          ( (= 15 (car (nth j entitylist)))
  50.            (setq x (cadr (nth j entitylist))
  51.                  y (caddr (nth j entitylist))
  52.            )
  53.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  54.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  55.            (setq new (cons (list 15 x y) new))
  56.          )
  57.          ( (= 16 (car (nth j entitylist)))
  58.            (setq x (cadr (nth j entitylist))
  59.                  y (caddr (nth j entitylist))
  60.            )
  61.            (setq y (+ (+ (+ 0 332134.109) (* 0.40008331 x)) (* 0.59595102 y)))
  62.            (setq x (+ (+ (+ 0 1087.012) (* 0.59595102 x)) (* -0.40008331 y)))
  63.            (setq new (cons (list 16 x y) new))
  64.          )
  65.          ( t
  66.            (setq new (cons (nth j entitylist) new))
  67.          )
  68.        )
  69.      )
  70.      (entdel obj)
  71.      (entmake new)
  72.    )
  73. )
  74. (princ)
  75. )
HTH,M.R。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 22:42:34 | 显示全部楼层
也许可以尝试这样做,将dwg作为块插入到另一个块中。您可以调整x和y比例0.40008 0.595等,然后进行移动。在拖动鼠标上按F8正交。输入3321434,然后再次输入y 1087,然后分解块并清除,以从dwg中删除块定义。
回复

使用道具 举报

aps

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:47:07 | 显示全部楼层
 
 
谢谢,但是当我尝试运行它时,我收到了一条错误消息:
 
错误:错误的参数值:非负:-1
 
这是什么意思?
 
仅在第一个条件和else条件下,其工作方式与之前相同:
  1. 2

 
但如果我添加第二个条件或任何其他条件,就会出现错误消息。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 22:52:52 | 显示全部楼层
那是因为我没有测试它。。。我已经更新了修复程序,现在应该可以正常工作了,但我认为比格尔的建议是我应该做的。。。当然,在整个DWG的块上应用代码,分解并清除该块。。。
 
M、 R。
回复

使用道具 举报

aps

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:59:26 | 显示全部楼层
 
谢谢你的想法,但更多具有此类内容的DWG很快就会出现,我想为我的同事提供一个简单的工具。
回复

使用道具 举报

aps

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:04:25 | 显示全部楼层
 
你能给我看看代码的更新版本吗?
 
非常感谢。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:06:43 | 显示全部楼层
 
http://www.cadtutor.net/forum/showthread.php?88736-自定义转换和实体类型&p=#2
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:12:51 | 显示全部楼层
2件事如果缩放和移动对于每个都不同,那么您需要更改Marko的代码,以允许用户输入这些值。
 
回到我的问题,你可以问有关规模和移动和自动化使用插入方法以及。只需打开新的dwg并运行lisp。
回复

使用道具 举报

aps

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:19:08 | 显示全部楼层
嗨,我的问题回来了。谢谢Marco和BIGAL的帮助!
除了椭圆和区域外,Marko的代码运行良好。因此,我考虑了块的想法。我用Lee Mac的多段线到块代码扩展了LISP文件,所以现在它将所有对象转换为单个块,然后将其转换为新的坐标系。我很高兴,因为分解转换后的块后,我得到了我想要的东西,但在数据验证过程中,我发现这种方法导致坐标不准确。
 
我通过手工计算验证了Marko的纯变换代码是非常精确的。但是,当我将对象转换为单个块(使用Lee Mac的方法或在AutoCAD中使用hand),然后在该块上运行转换例程时,就会出现不准确的情况。不准确度似乎是恒定的,在10到100厘米(4-39”)之间,取决于变换前选择的块的基点。
为什么会出现这种不准确的情况?我怎样才能摆脱它?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:31 , Processed in 0.510354 second(s), 72 queries .

© 2020-2025 乐筑天下

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