乐筑天下

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

[编程交流] 查找中点btw 2用户点

[复制链接]

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:47:30 | 显示全部楼层 |阅读模式
我需要创建一个例程,允许用户选择两个点(通过交点),然后它会自动将文本(用户输入)放置在这两个点之间的中点。
 
到目前为止,我已经:
 
 
  1. (defun c:textplacer ()
  2. (command "_textstyle" "standard")
  3. (command "_textsize" "6.0")
  4. (command "_osnap" "Intersection")
  5. (setq pt1 (getpoint "\nSelect First Point:"));gets the first user point
  6. (setq pt2 (getpoint "\nSelect Second Point in POG Direction:"));gets the second user point
  7. (setq pt3 (abs (- (car pt1)(car pt2))));gets the middle point btw pt1 and pt2
  8. ;need the rest here
  9. );end function

 
甚至不确定pt3是否真的达到了中点。。。我在这里已经深不可测了。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:56:43 | 显示全部楼层
请检查是否已有名为M2P的内置命令修饰符。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:03:22 | 显示全部楼层
如果要使用上述AutoLISP例程,则:
  1. (setq pt3 (list (/ (- (car  pt2) (car  pt1)) 2)
  2.                (/ (- (cadr pt2) (cadr pt1)) 2)))

 
顺便说一句,请编辑您的帖子并添加代码标签。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:12:17 | 显示全部楼层
或者,可以尝试:
  1. (command "_TEXT" "_M2P" pause pause 6.0 0.0 "???")
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 08:14:44 | 显示全部楼层
非常感谢你。我以前没有找到M2P命令。
然而,我想我可能会同意你的第一个代码建议,因为我还必须在第一点和第二点插入一个块。
 
再次感谢!
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:21:55 | 显示全部楼层
不客气!谢谢你修复了第一个帖子。
如果你的代码遇到了更多的问题,只要把它贴在这里,就会有人查看。
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 08:30:15 | 显示全部楼层
我添加了这段代码,它似乎将文本沿着x轴放置在0,0附近,而不是实际上在pt1和pt2之间。。。我还没聪明到弄明白为什么!
 
  1. (setq pt1 (getpoint "\nSelect First Point:"));gets the first user point
  2. (setq pt2 (getpoint "\nSelect Second Point in POG Direction:"));gets the second user point
  3. (setq pt3 (list (/ (- (car  pt2) (car  pt1)) 2)
  4.                (/ (- (cadr pt2) (cadr pt1)) 2)));gets middle point
  5. (command "_text" "j" "tc" pt3 "6.0" "0.0" "test");supposed to place text at this middle point
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:36:35 | 显示全部楼层
 
嗨,巴德,
 
放置中的错误是因为提供给命令的点受对象捕捉设置的影响。
 
为了避免这种情况,可以使用“非”(无)对象捕捉修改器忽略对象捕捉设置。
 
考虑以下代码:
 
在上述代码中,我还允许空用户输入,缩短了计算中点的方法,并考虑了具有预定义文本高度的文本样式,其中没有高度提示。
 
但是,我还建议您考虑使用entmake函数来完成此任务:
 
使用entmake比命令快得多,并且没有任何提示(因此无需更改CMDECHO),此外,entmake不受对象捕捉的影响,所有文本属性都可以通过提供的DXF列表设置。但是,请注意,上面的示例没有考虑UCS设置中的更改。
 
我使用的DXF值的参考可以在这里找到。
 
我希望这有帮助,
 
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 08:41:39 | 显示全部楼层
哇,太快了,而且很有效!非常感谢你。我从未使用过entmake函数,但我可以看出它可能会更有用,或者至少更干净。
 
当我继续这个项目时,我可能会回来要求更多的东西,但我会尽量自己做,这样我就可以学习了。
 
再次感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:53:59 | 显示全部楼层
不客气,巴德
 
除了速度明显更快之外,与使用命令调用相比,entmake/entmakex还有几个优点(其中一些我已经提到了,但为了完整性,将重新迭代):
 
[列表]
  • entmake(x)比使用命令调用快得多,因为此函数直接修改图形数据库。
    [/列表]
     
    [列表]
  • 程序在多个AutoCAD版本中更可靠,因为entmake(x)不依赖命令的提示顺序,在新版本的AutoCAD中可能会发生更改。
    [/列表]
     
    [列表]
  • entmake(x)不受对象捕捉的影响,因此无需更改OSMODE系统变量,因此,如果程序遇到错误,则需要使用*error*处理程序重置对象捕捉设置。
    [/列表]
     
    [列表]
  • entmake(x)不回显任何提示,因此无需更改CMDECHO系统变量。
    [/列表]
     
    [列表]
  • 一个实体的所有属性都可以在对entmake(x)或entmod的一次调用中设置或修改。相同的过程需要在Visual LISP ActiveX中单独设置每个属性,或使用多个命令。
    [/列表]
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-9 22:02 , Processed in 0.515404 second(s), 72 queries .

    © 2020-2025 乐筑天下

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