乐筑天下

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

[编程交流] 相交点

[复制链接]

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:45:36 | 显示全部楼层
  1. (vlax-invoke  'IntersectWith  acExtendBoth)
将返回点列表,而不是变量。
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:46:34 | 显示全部楼层
以我简单的方式来看,你可以复制对象,将其延伸到交点,然后将新的“复制”对象修剪回原始对象的原始端点。但我相信VLISP方法将更加有效。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:51:59 | 显示全部楼层
 
我几乎总是忽略使用“vla invoke”。。。。
 
好观点Alanjt
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:58:24 | 显示全部楼层
今天,我编写了以下代码来完成上述工作。
我使用
  1. (vlax-invoke  'IntersectWith  acExtendBoth)

以获取昆虫点。但有一个问题出现了。如果对象有两个相交点。很难判断
哪一个是我想要的。有什么想法吗??谢谢
 
 
  1. (setq insecpoint (vlax-invoke obj1 'IntersectWith obj2 acExtendBoth))

 
包含包含六个元素的数组(用于两点)。
 
(defun c:cornor\u of_obj(/os\u old cl\u old sel1 sel2 ent1 ent2 entny1 entny2 enttype1 enttype2
obj1 obj2 p1 p2 p3 p4 pt中心点)
(vl load com)
(defun*错误*(msg)
(setvar“cmdecho”os_old)
(setvar“clayer”cl_old)
(普林斯)
)
(如果(不是)(tblsearch“layer”“0虚线层"))
(命令“.layer”“\u new”“0虚线层“”颜色“2”0虚线层“”\u ltype“”虚线“”0虚线层" "")
(命令“_.layer”“thaw”“0虚线层“”0上的“”虚线层“解锁”0虚线层" "")
)
(setq os_old(getvar“cmdecho”))
(setq cl_old(getvar“clayer”))
(setvar“clayer”0虚线层")
(setvar“cmdecho”0)
(setq sel1(entsel“选择对象:”))
(setq ent1(car sel1))
(如果(/=nil ent1)
(程序
(setq entiny1(entget ent1)
enttype1(assoc 0 entiny1)
)
(如果(或(=“LINE”(cdr enttype1))(=“ARC”(cdr enttype1)))
(程序
(setq obj1(vlax ename->vla object ent1))
(setq p1(vlax safearray->列表(vlax变量值(vla get startpoint obj1)))
p2(vlax safearray->列表(vlax变量值(vla get endpoint obj1)))
)
(setq sel2(entsel“选择对象:”))
(setq ent2(car sel2))
(如果(/=nil ent2)
(程序
(setq entiny2(entget ent2)
enttype2(assoc 0 entiny2)
)
(如果(或(=“LINE”(cdr enttype2))(=“ARC”(cdr enttype2)))
(程序
(setq obj2(vlax ename->vla object ent2))
(setq p3(vlax safearray->列表(vlax变量值(vla get startpoint obj2)))
p4(vlax safearray->列表(vlax变量值(vla get endpoint obj2)))
)
;(setq insecpoint(vlax调用obj1’与obj2 acExtendBoth相交))
(setq insecpoint(vlax safearray->列表(vlax变量值(vla intersectwith obj1 obj2 acExtendBoth)))
(如果(/=零)
(程序
(setq d1(点p1的距离))
(setq d2(点p2的距离))
(如果(
(setq pt p1)
(setq pt p2)
)
;第1行
(cond((=“LINE”enttype1)
(命令“_.Line”insecpoint pt“”)
)
 
(=“ARC”enttype1)
(setq centerpt(vlax safearray->list(vlax variant value(vla get center ent1)))
(命令“_.arc”“\u c”centerpt insecpoint pt)
)
)
 
(如果(
(setq pt p3)
(setq pt p4)
)                                                                                       
;第2行
(cond((=“LINE”enttype2)
(命令“_.Line”insecpoint pt“”)
)
 
(=“ARC”enttype2)
(setq centerpt(vlax safearray->list(vlax variant value(vla get center ent1)))
(命令“_.arc”“\u c”centerpt insecpoint pt)
)
)                                                                                       
 
)
)
)
)
)
)
)
)
)
)
 
(setvar“cmdecho”os_old)
(setvar“clayer”cl_old)
(普林斯)
)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:33 , Processed in 0.363795 second(s), 58 queries .

© 2020-2025 乐筑天下

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