乐筑天下

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

[编程交流] 在相交处插入块

[复制链接]

27

主题

72

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-5 16:16:02 | 显示全部楼层 |阅读模式
我想使用lisp在选定圆和多段线的交点上插入一个块。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:28:26 | 显示全部楼层
简单的答案是Vla intersectwith,搜索或查找帮助这是一个非常容易使用的命令。有几个问题是圆是否两次穿过普林线。类似于这个例子
 
  1. (setvar "osmode" 512)  ; nearest make sure on line
  2. (setq pickobj (entsel "\nPick arc :"))
  3. (setq obj1 (vlax-ename->vla-object (car pickobj)))
  4. (setq pickobj1 (entsel "\nPick 1st line :"))
  5. (setq obj2 (vlax-ename->vla-object (car pickobj1)))
  6. (setq intpt1 (vlax-invoke obj2 'intersectWith obj1 acExtendThisEntity))
回复

使用道具 举报

20

主题

70

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 16:39:50 | 显示全部楼层
你能上传一个绘图样本吗?
回复

使用道具 举报

0

主题

5

帖子

5

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 16:53:06 | 显示全部楼层
(定义C:INTLINES(/SS1 PT ptl oldos)
(提示“\n运行以演示GET\u ALL\u INTERS\u IN\u SS函数。”)
(setq SS1(ssget);(ssget“_X”);(get\u all\u lines\u as\u SS)
PTS(get\u all\u inters\u in\u ss SS1)
)
(setq ptl(长度PTS)PTS(deldup PTS));重复-不应该有
(如果(>ptl(长度PTS))(princ(strcat“\n”(itoa(-length PTS)ptl))“删除重复项”))
(vla startundomark(vla get activedocument(vlax get acad object)))
(setvar“CMDECHO”0)
(setq oldos(getvar“OSMODE”)(setvar“OSMODE”0)
(foreach PT PTS;;循环通过点列表
(命令“_POINT”PT));;创建点对象(也可以在此处使用插入、圆等)
(setvar“PDMODE”34);;显示点以便查看
(命令“_REGEN”)
(setvar“OSMODE”oldos)
(vla endundomark(vla get activedocument(vlax get acad object)))
(princ(strcat(itoa(长度PTS))“找到交点”)
(普林斯)
)
回复

使用道具 举报

0

主题

5

帖子

5

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 17:05:31 | 显示全部楼层
用这个
 
 
 
(vl load com)
;;-----------------------------------------------
;; CDNC5-02。LSP
;; 比尔·克莱默
;; (CAD Studio的修改和增强,http://www.cadstudio.cz , 2010-2014)
;;
;; ILSIMPLEMODE=T仅适用于单交叉点(大坐标问题)
;;
;; 在中查找对象之间的所有交点
;; 选择集SS。
;;
;; ---------------------------------------------- 开始清单1
;;
(defun get\u all\u inters\u in\u SS(SS/
SSL;不锈钢长度
PTS;返回列表
aObj1;对象1
aObj2;对象2
N1;回路计数器
N2;回路计数器
IPT;相交
C1 C2 C3
)
 
(定义iL->L(IPT/Pts);转换坐标列表->点列表
(while(>(长度iPts)0)
(setq Pts(cons)(列表(车载IPT))
(cadr IPT)
(caddr IPT)
Pts)
IPT(cdddr IPT)))
Pts
)
(默认iL2->L(IPT/Pts);转换坐标列表->点列表2D
(while(>(长度iPts)0)
(setq Pts(cons)(列表(车载IPT))
(cadr IPT)
'0.0)
Pts)
IPT(cddr IPT)))
Pts
)
 
(defun DelDup(长x宽);删除重复项
(当l
(setq x(汽车l)
l(vl删除x(cdr l))
r(cons x r)
)
)
(倒车档r)
)
 
 
(setq N1 0;外环索引
SSL(sslength SS))
; 外环,从第一个到第二个到最后一个
(虽然(
; 获取对象1,转换为VLA对象类型
(setq aObj1(ssname SS N1)
aObj1(vlax ename->vla对象aObj1)
N2(1+N1));内环索引
; 自相交:
(if(vlax-property-available-p aObj1’坐标)(progn;它是曲线吗?LWPOLY
(setq C1(iL2->L(vlax get aObj1’坐标)))
(setq C2(iL->L(vlax调用aObj1’与aObj1 0相交))
(setq C3(vl remove if’(λ(x)(成员x C1))C2))
;(打印C1)(打印C2)(打印C3)
(如果C3(foreach x C3(setq Pts(cons x Pts)));添加self
))
(if(=(vlax get aObj1’ObjectName)“AcDbSpline”)(progn;SPLINE
(setq C1(iL->L(vlax调用aObj1’与aObj1 0相交))
;(打印C1)
(如果C1(foreach x C1(setq Pts(cons x Pts)));添加self
))
; 内部循环,遍历其余对象
(虽然(
; 获取对象2,转换为VLA对象
(setq aObj2(ssname SS N2)
aObj2(vlax ename->vla对象aObj2)
; 查找对象的交点
IPT(vla与aObj1相交
aObj2 0)
; 变量结果
IPT(vlax变量值IPT))
; 变量数组有值?
(if(>(vlax-safearray-get-u-bound iPts 1)
0)
(progn;数组保存值,将其转换为
(setq IPT;到列表。
(vlax safearray->列出IPT)
;循环列表构造点
;(setq Pts(iL->L IPT));必须是全局的
;(if(>(length iPts)3)(PRINT iPts))---列出重复的交点-红色/绿色案例给出两个交点!
(while(>(长度iPts)0)
(setq Pts(cons)(列表(车载IPT))
(cadr IPT)
(caddr IPT)
Pts)
IPT(cdddr IPT))
(如果ILSIMPLEMODE(setq iPts nil));ILSIMPLEMODE-仅取第一个十字路口
)
))
(setq N2(1+N2));内环端
(setq N1(1+N1));外环端
Pts);返回找到的点列表
;;-----------------------------------------------   结束清单1
;;
;; 下载版本的剩余代码行,用于演示和测试清单1中的实用程序。
;;
;; 过程-创建具有相交线和多段线的图形。
;;           加载功能集
;;           运行命令函数INTLINES
;;           交点用当前图层上的点对象标记
;;
(定义C:INTLINES(/SS1 PT ptl oldos)
(提示“\n运行以演示GET\u ALL\u INTERS\u IN\u SS函数。”)
(setq SS1(ssget);(ssget“_X”);(get\u all\u lines\u as\u SS)
PTS(get\u all\u inters\u in\u ss SS1)
)
(setq ptl(长度PTS)PTS(deldup PTS));重复-不应该有
(如果(>ptl(长度PTS))(princ(strcat“\n”(itoa(-length PTS)ptl))“删除重复项”))
(vla startundomark(vla get activedocument(vlax get acad object)))
(setvar“CMDECHO”0)
(setq oldos(getvar“OSMODE”)(setvar“OSMODE”0)
(foreach PT PTS;;循环通过点列表
(命令“_POINT”PT));;创建点对象(也可以在此处使用插入、圆等)
(setvar“PDMODE”34);;显示点以便您可以看到它们
(命令“_REGEN”)
(setvar“OSMODE”oldos)
(vla endundomark(vla get activedocument(vlax get acad object)))
(princ(strcat(itoa(长度PTS))“找到交点”)
(普林斯)
)
;;
;;-----------------------------------------------
;;  获取
;;  绘制并作为选择集返回。
;;
(defun get\u all\u line\u as\u SS()
(ssget“_X”'((0。“直线,LWPOLYLINE”)))
;;
 
(princ“\n(get\u all\u inters\u in\u SS)函数和intline命令已加载。”)
(prin1)
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 17:06:52 | 显示全部楼层
请阅读代码发布指南,并编辑代码以包含在代码标签中。[NOPARSE]
  1. Your Code Here[/NOPARSE]
=
  1. Your Code Here
回复

使用道具 举报

0

主题

5

帖子

5

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 17:24:38 | 显示全部楼层
##########
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 16:58 , Processed in 0.464848 second(s), 66 queries .

© 2020-2025 乐筑天下

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