乐筑天下

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

[编程交流] 正在处理的选择集

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 15:10:35 | 显示全部楼层 |阅读模式
我似乎无法以任何方式传递每个多段线的选择集,以将点放置在每个多段线的中点?
这让我抓狂,我试图修改原始代码来选择列表并以这种方式处理,但它仍然不起作用
 
  1. (defun c:MidPoly ( / ent ename entl en oname param len hLen MidPt OS )
  2. (vl-load-com)
  3. (setq ent (entsel "\nSelect polyline:"))
  4.    (if ent
  5.        (progn
  6.            (setq    ename (car ent)
  7.                    entl (entget ename)
  8.                    en (cdr (assoc 0 entl))
  9.            )
  10.            (if (member en (list "POLYLINE" "LWPOLYLINE"))
  11.                (progn
  12.                    (setq    oname (vlax-ename->vla-object ename)
  13.                            param (vlax-curve-getEndParam oname)
  14.                            len (vlax-curve-getDistAtParam oname param)
  15.                            hLen (* 0.5 len)
  16.                            MidPt (vlax-curve-getPointAtDist oname hLen)
  17.                    )
  18.                    (vlax-release-object oname)
  19.                    (setq OS (getvar "OSMODE"))
  20.                    (setvar "OSMODE" 0)
  21.                    (command "._Point" MidPt)
  22.                    (princ "\nPoint object created at mid-point:")(princ MidPt)
  23.                    (setvar "OSMODE" OS)
  24.                )
  25.                (princ "\nYou must pick a polyline object only.")
  26.                
  27.            )
  28.        )
  29.    )
  30. (prin1)
  31. )
  32. (defun c:test1 ( / e i s x )
  33.    (if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
  34.        (progn
  35.            (setq i (1- (sslength s)))
  36.            (while (<= 0 i)
  37.                (setq e (ssname s i)
  38.                      x (cdr (assoc 0 (entget e)))
  39.                      i (1- i)
  40.                )
  41.                (command "(c:MIDPOLY)" e)
  42.                (print x)
  43.            )
  44.        )
  45.    )
  46.    (princ)
  47. )
  48. (defun c:test2 ( / e i s x )
  49.    (if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
  50.        (progn
  51.            (setq i 0)
  52.            (repeat (sslength s)
  53.                (setq e (ssname s i)
  54.                      x (cdr (assoc 0 (entget e)))
  55.                      i (1+ i)
  56.                )
  57.                (command "(c:MIDPOLY)" e)
  58.                (print x)
  59.            )
  60.        )
  61.    )
  62.    (princ)
  63. )
  64. (defun c:test3 ( / s )
  65.    (if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
  66.        (foreach e (ssnamex s)
  67.            (if (= 'ename (type (cadr e)))
  68.                (command "(c:MIDPOLY)" (cdr (assoc 0 (entget (cadr e)))))
  69.            )
  70.        )
  71.    )
  72.    (princ)
  73. )
  74. (defun c:test4 ( / e s )
  75.    (if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
  76.        (while (setq e (ssname s 0))
  77.            (print (cdr (assoc 0 (entget e))))
  78.            (setq x (cdr (assoc 0 (entget e))))
  79.            (command "(c:MIDPOLY)" e)
  80.            (ssdel e s)
  81.        )
  82.    )
  83.    (princ)
  84. )

 
例子:
  1. (defun c:MIDLINE ( / ent nPt p2 p1 )
  2.    (if (setq ent (car (entsel "\nSelect line:")))
  3.        (progn
  4.            (setq    p1 (cdr (assoc 10 (entget ent)))
  5.                    p2 (cdr (assoc 11 (entget ent)))
  6.            )
  7.            (setq npt (Line-centroid p1 p2))
  8.            (setq OS (getvar "OSMODE"))
  9.            (setvar "OSMODE" 0)
  10.            (command "._Point" nPt)
  11.            (princ "\nPoint object created at mid-point:")(princ nPt)
  12.            (setvar "OSMODE" OS)
  13.        )
  14.    )
  15. )
  16. (defun Line-centroid (p1 p2)
  17. (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
  18. )

 
vlax曲线函数可用于直线、多段线、圆弧、样条曲线等。。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:25:54 | 显示全部楼层
请参阅下面的代码以获取指导。这是非常基本的,但做你想要的,但你可能需要充实它。
 
 
[code];;此lisp将用于:;;线LW多段线(曲线或直线);;3D多段线(曲线或直线);;样条;;(vl load com)(defun c:midpts(/*error*c\u doc ms ss l\u obj m\u dist i\u pt n\u obj)(defun*error*(msg)(if(和c\u doc(=8(logand 8(getvar’Undocl))(vla ENDUMORK c\u doc))(if(not(wcmatch(strcase msg)“*BREAK*,*CANCEL*,*EXIT*”)(princ(strcat“\n错误:“msg”occurred”))(普林斯))_end_*error*_defun(setq c_doc(vla get activedocument(vlax get acad object))ms(vla get modelspace c_doc));end_setq(if(and c_doc(=8(logand 8(getvar'UNDOCTL)))(vla endundomark c_doc))(vla startundomark c_doc)(提示“\n选择直线|多段线|样条曲线|弧:”)(setq ss(ssget“:L”((0。“直线,LWPOLYLINE,POLYLINE,样条曲线,弧”)));
回复

使用道具 举报

0

主题

946

帖子

978

银币

限制会员

铜币
-3
发表于 2022-7-5 15:42:01 | 显示全部楼层
http://forums.augi.com/showthread.php?171946-处理-a-选择-set-of-LightWeight-Polylines-to-provide-middpoints&p=#2
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 15:59:39 | 显示全部楼层
谢谢德拉诺
这段代码工作得最好,也帮助我进一步开发了lisp文件(一般来说,编程中断了3年)
 
 
感谢大家的快速反应和指点。
 
 
 
 
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:23:43 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:04 , Processed in 3.437226 second(s), 62 queries .

© 2020-2025 乐筑天下

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