乐筑天下

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

[编程交流] 重画多段线

[复制链接]

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:16:12 | 显示全部楼层 |阅读模式
  1. (defun c:redrawpl ()
  2. (setq sset (ssget "x" '(0 . "lwpolyline") (cons 67 (logand (1+ (getvar "TILEMODE"))1)) ))
  3.    (setq ctr 0)
  4.    (repeat (sslength sset)
  5.     (setq item (ssname sset ctr))
  6.       (vl-cmdf "_isolateobjects" item "")
  7.        (setq ron (vlax-ename->vla-object item))
  8.          (setq olayer (vla-get-layer ron))
  9.          (command "-layer" "set" olayer "" )
  10.          (setq p1 (pline-centroid item))
  11.          (vl-cmdf "_.-boundary" "_A" "_O" "polyline" "_I" "_N" ""  p1 "")
  12.         (vl-cmdf "_unisolateobjects" "")
  13.         (vla-delete ron)
  14.          (command "_change" (entlast) "" "p" "la" "layer1" "")
  15.         (setq ctr (1+ ctr))
  16.    )
  17. )

 
我正试图用上述方法重新绘制所有多段线。为了避免创建错误的多段线,我使用isolateobjects的功能来关闭其他对象。然后,它将基于保留的多段线创建新的多段线。但我发现当我使用这种方法应用于绘图时,里面有很多物体,速度很慢。此外,某些多段线无法使用此方法创建。还有其他好的方法来创建多段线吗?
 
非常感谢。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 09:35:38 | 显示全部楼层
请看一下ENTMAKE函数作为替代解决方案。
 
或者,可以尝试禁用OSMODE系统变量,而不是隔离实体-不要忘记稍后恢复它。
 
  1. (setq PrevOsnapMode (getvar "OSMODE"))   ;retain current state
  2. (setvar "OSMODE" 0)                      ;disable auto OSNAP
  3. [color=blue]; your procesing here[/color]
  4. (setvar "OSMODE" PrevOsnapMode)          ;restore previous state

 
Regrads,
米尔恰
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:36:50 | 显示全部楼层
谢谢你的快速回复!你能教我怎么写这个测试条件吗。
 
  1. (defun c:creg ()
  2. (setq a (car (entsel)))  
  3. (command "region" a "")
  4. ;[color=blue]if convert to region is failed then explode it and then rejoin by pedit
  5. [/color] (while
  6. (setq ent (vlax-ename->vla-object a))
  7.   (vla-explode ent)
  8.     (command "_.pedit" "_m"
  9. (ssget "_p") "" "_y" "_j" 0.0 "")
  10.      )
  11. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 09:49:45 | 显示全部楼层
将图形中最后一个可用图元(尝试创建区域之前)与发出区域命令后的最后一个图元进行比较如何?如果向区域的转换成功,这些应该是不同的。
 
  1. (setq LastItem (entlast))   ;retain last item in drawing
  2. [color=green](setq a (car (entsel)))  [/color]
  3. [color=green](command "_REGION" a "")[/color]    ;attempt to create a region
  4. (setq DrawItem (entlast))   ;list again last item in drawing
  5. (if (not (equal LastItem DrawItem))   ;compare above entities
  6. (prompt "\The region was created!")
  7. (prompt "\The region wasn't created!")
  8. )

 
当做
米尔恰
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 10:04:12 | 显示全部楼层
谢谢你Mircea,我正在尝试使用这种方法创建区域,但没有成功。
 
  1. (defun c:creg ()
  2. (setq a (car (entsel)))  
  3. (setq lastitem (entlast ))
  4. (command "region" a "")
  5. (setq drawitem (entlast))
  6. (if (not (equal lastitem drawitem))
  7.   (prompt "The region was created")
  8.   (progn
  9.   (setq ent (vlax-ename->vla-object a))
  10.     (vla-explode ent)
  11.      (command "_.pedit" "_m"
  12.   (ssget "_p") "" "_y" "_j" 0.0 "")
  13.   )
  14.   (command "region" (entlast))
  15.    )
  16. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:13:43 | 显示全部楼层
尝试通过ENTNEXT解析新创建的实体(来自爆炸命令),该实体从爆炸前绘制的最后一个实体开始;使用SSADD创建新的选择集。
 
当做
米尔恰
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 10:16:20 | 显示全部楼层
再次感谢!我会按照这个方向完成这个项目。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 02:51 , Processed in 0.330887 second(s), 66 queries .

© 2020-2025 乐筑天下

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