乐筑天下

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

[编程交流] 缩放多段线等高线

[复制链接]

16

主题

47

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 08:59:05 | 显示全部楼层 |阅读模式
我有一个很好的要求。我需要从地面坐标到网格坐标缩放一些多段线等高线。使用比例Com,这是可行的,但Z值也会被缩放。问题是,我只想缩放X和Y,而不是Z。
 
到目前为止,唯一的方法是创建一个块,缩放它,然后分解。这需要很多时间,在我看来这是不必要的。
 
这就是我所想的lisp例程,它可以做我需要的事情。
 
选择多段线(等高线)
将多边形缩放到某个因子。
在缩放之前,将Z值重置为原始值。
 
我希望这有意义。哈哈。
 
有人愿意解决这个问题吗?
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 09:05:17 | 显示全部楼层
 
如果单独缩放轮廓,则不会缩放Z值。
 
大多数人可能会在输入数据之前缩放坐标。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:07:41 | 显示全部楼层
查看vla scaleEntity函数。
回复

使用道具 举报

16

主题

47

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:12:23 | 显示全部楼层
eldon-scale命令均匀缩放多段线。它将比例应用于所有3个轴。给我的数据只是等高线。因此,我只能使用所给予的。
 
Render man-感谢开始。这个lisp可以只在x和y方向上缩放而不在Z方向上缩放吗?
回复

使用道具 举报

44

主题

542

帖子

502

银币

后起之秀

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

铜币
220
发表于 2022-7-6 09:13:48 | 显示全部楼层
 
在我看来,这样缩放轮廓不是一个好做法。
 
 
如果这可行,你只需要一次性完成,那么为什么不这样做呢?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:19:41 | 显示全部楼层
 
你在代码测试中得到了什么结果?
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 09:23:25 | 显示全部楼层
 
仅当缩放到0,0左右时。如果围绕各自的端点缩放每个等高线多段线,则Z值不变。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 09:24:07 | 显示全部楼层
  1. (defun c:scpl ( / pt elev bpt entpl scf )
  2. (setq pt (getpoint "\nPick base point in XY plane for scaling your pline : "))
  3. (setq entpl (car (entsel "\nPick pline you want to scale")))
  4. (setq elev (cdr (assoc 38 (entget entpl))))
  5. (setq bpt (list (car pt) (cadr pt) elev))
  6. (setq scf (getreal "\nInput scale factor with or without decimal precision : "))
  7. (vl-cmdf "_.scale" entpl "" bpt scf)
  8. (princ)
  9. )

 
M、 R。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:28:33 | 显示全部楼层
 
我希望用户不要错过。。。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:34:27 | 显示全部楼层
对Marko的代码进行了轻微修改(希望您不介意):
 
  1. (defun c:SCPL  () (c:ScalePlines))
  2. (defun c:ScalePlines  (/ *error* nomutt oldNomutt ss pt scale)
  3. (princ "\rSCALE MULTIPLE POLYLINES ")
  4. (vl-load-com)
  5. (defun *error*  (msg)
  6.    (and oldNomutt (setvar 'nomutt oldNomutt))
  7.    (if acDoc (vla-endundomark acDoc))
  8.    (cond ((not msg))                                                   ; Normal exit
  9.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  10.          ((princ (strcat "\n** Error: " msg " ** "))))                 ; Fatal error, display it
  11.    (princ))
  12. (defun nomutt (arg)
  13.    (cond (oldNomutt)
  14.          ((setq oldNomutt (getvar 'nomutt))))
  15.    (if arg
  16.      (setvar 'nomutt 1)
  17.      (setvar 'nomutt 0)))
  18. (prompt "\nSelect multiple polylines to scale: ")
  19. (if (and (nomutt T)
  20.           (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))
  21.           (nomutt nil)
  22.           (setq pt (getpoint "\nSpecify base point: "))
  23.           (setq scale (getreal "\nEnter scale factor: ")))
  24.    ((lambda (acDoc / elev)
  25.       (vla-startundomark acDoc)
  26.       (vlax-for x  (setq ss (vla-get-activeselectionset acDoc))
  27.         (setq elev (vla-get-elevation x))
  28.         (vla-scaleentity x (vlax-3d-point pt) scale)
  29.         (vla-put-elevation x elev))
  30.       (vla-delete ss)
  31.       (setvar 'nomutt oldNomutt)
  32.       (vla-endundomark acDoc))
  33.      (vla-get-activedocument (vlax-get-acad-object)))
  34.    (cond (pt (prompt "\n** Scale factor required ** "))
  35.          (ss (prompt "\n** Base point required ** "))
  36.          ((prompt "\n** Nothing selected ** "))))
  37. (princ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:30 , Processed in 0.861794 second(s), 72 queries .

© 2020-2025 乐筑天下

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