乐筑天下

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

[编程交流] 从已知点进入

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 11:17:13 | 显示全部楼层 |阅读模式
我相信这很简单,但无法实现。
 
我有一条折线,它将其分解,现在想在同一个拾取点选择新线,而不是拾取两次。在接下来的例行工作中需要一条线路。
 
Entsel可以使用一个点,但我不能让它使用返回的第一个Entsel点、字符串列表等
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:24:24 | 显示全部楼层
使用ENTLAST语句选择它-分解后,该行成为数据库中的最后一个实体。如果多段线仅由一条线完成,则效果良好。
对于多段多段线,可以记录分解前最后一个图元的名称,并在分解后解析新添加的项目,以找到最接近选择点的项目。
 
当做
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:27:24 | 显示全部楼层
或者可以使用:
 
  1. (ssget MySelectionPoint)

 
当做
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:34:12 | 显示全部楼层
另一种方法:
 
  1. (defun EntnextToEnd ( ent )
  2. (if (setq ent (entnext ent))
  3.    (cons ent (EntnextToEnd ent))))
  4. (defun c:test (/ ent eLast ss )
  5. (if (setq ent (car (entsel)))
  6.    (progn
  7.      (setq eLast (entlast))
  8.      (command "_.explode" ent)
  9.      (setq ss (ssadd))
  10.      (mapcar
  11.        (function
  12.          (lambda ( e )
  13.            (ssadd e ss))) (EntnexttoEnd eLast))
  14.      (sssetfirst nil ss)))
  15. (princ))
回复

使用道具 举报

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 11:34:27 | 显示全部楼层

就连我也有同样的问题。
我想选择两条线,并再次使用这些相同的拾取点。它可以是entsel和getpoint的组合,也可以是entsel和getpoint的组合。这怎么可能实现?
请帮忙
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:42:50 | 显示全部楼层
您可以将拾取的点存储为变量,getpoint显然会返回拾取的点,而entsel返回一个两元素列表:
 
  1. (<entityname> (x y z))

 
第二个元素是拾取点-但是请记住,拾取点是拾取框的中心,它不一定位于拾取的对象上。
 
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:46:03 | 显示全部楼层
 
该点也可以是“(0.0.0)如果用户最后发出“L”。
 
如。
  1. Command: (entsel)
  2. Select object: l
  3. (<Entity name: 77831480> (0.0 0.0 0.0))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 11:51:11 | 显示全部楼层
在我看来,SSGET工作时,entsel似乎不允许自动选取点。
 
关于拾取上面的两条线不是问题,只需entsel并生成两个变量或ssget两个对象,就可以计算出线的中间点(ssget no pick point)。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:52:18 | 显示全部楼层
  1. (setq p (getpoint))
  2. (setq ss (ssget p))
  3. (setq e (ssname ss 0))


  1. (nentselp (getpoint))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 11:56:02 | 显示全部楼层
嗨,伙计们,你们不讨厌当一些事情不起作用,你们看不到它的时候吗。
 
这是代码的一部分
 
  1. (setq obj (entsel  "\nPick back of kerb line"))
  2. (setvar "osmode" 0)
  3. (setq objtype (cdr (assoc 0 (entget (car obj)))))
  4. (IF (or (= objtype "POLYLINE")(= objtype "LWPOLYLINE"))
  5. (progn
  6. (setq objpt (cadr obj))
  7. (princ "\nNow exploding polyline that was picked :")
  8. (command "explode" obj "")
  9. (setq ss (ssget objpt))
  10. (setq obj2 (entget (ssname ss 0)))
  11. )
  12. (setq obj2 (entget (car obj)))   ; else is line
  13. )

 
obj2在任何一种情况下都可以正常工作
 
再往前走,需要休息
(命令“break”pt15 pt16)
如果原始代码是一个ployline,然后分解,那么这不起作用,但是如果原始代码是一行,那么它可以完美地工作,如果我在命令提示符下运行此中断代码,它可以工作吗?
 
如果有任何想法,我们将不胜感激。其他人只要看一眼,就会立刻找到原因。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:55 , Processed in 1.021855 second(s), 72 queries .

© 2020-2025 乐筑天下

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