乐筑天下

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

[编程交流] 获取交点和dr

[复制链接]

3

主题

10

帖子

7

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 18:45:49 | 显示全部楼层 |阅读模式
大家好,
 
我正在使用autocad 2010,是autolisp的新手,希望你们能帮我一把。
 
如果我有一系列水平线和一条垂直线(如下面附上的第一张照片)。
 
如何生成autolisp命令,让我选择红线,然后选择所有水平线,然后它将绘制矩形,长度是用户输入,高度是黑线之间的距离。该程序还需要计算出红线和黑线的交点,以将矩形的角放置在交点处(间隙请参见图2)
 
谢谢你的提示
 
194550sgfdmyglfmqzcuoo.jpg
 
 
194552lrr55mgoba2n1gda.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 19:02:11 | 显示全部楼层
欢迎来到CADTutor。
 
试试这个程序,让我知道。
 
  1. Removed due to ignorance from the OP
回复

使用道具 举报

3

主题

10

帖子

7

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 19:17:48 | 显示全部楼层
对不起,朋友,论坛的通知被发送到我的垃圾邮件。如果你不介意的话,你能再次上传代码吗?我真的很抱歉,我不是有意忽视这个帖子的。
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:31:31 | 显示全部楼层
这可以通过使用ssget和围栏方法来完成,这将以正确的顺序选择交叉线,因此您可以构建矩形(setq ss(ssget“F”(list pt1 pt2)),pt1 pt2来自红线,目前需要一些时间繁忙。
 
  1. (defun c:rectangs ( / tpp1 pt1 pt2 intpt1 intpt2 intpt3 intpt4 ss)
  2. (setq width (getreal "enter width"))
  3. (setq obj (entsel "pick crossing line"))
  4. (setq obj2 (vlax-ename->vla-object (car obj))) ;convert pick line to vl object
  5. (setq tpp1 (entget (car obj) ) )
  6. (setq pt1 (cdr (assoc 10 tpp1) ) )
  7. (setq pt2 (cdr (assoc 11 tpp1) ) )
  8. (setq ss (ssget "F" (list pt1 pt2)))
  9. (setq x (- (sslength ss)1))
  10. (setq obj1 (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
  11. (setq intpt1 (vlax-invoke obj2 'intersectWith obj1 acExtendThisEntity))
  12. (repeat (sslength ss)
  13. (setq obj3 (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
  14. (setq intpt2 (vlax-invoke obj2 'intersectWith obj3 acExtendThisEntity))
  15. (setq intpt3 (polar intpt1 0.0 width))
  16. (setq intpt4 (polar intpt2 0.0 width))
  17. (command "pline" intpt1 intpt2 intpt3 intpt4 "C")
  18. (setq intpt1 intpt2)
  19. ) ; repeat
  20. )
回复

使用道具 举报

3

主题

10

帖子

7

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 19:36:14 | 显示全部楼层
 
嗨,比格尔,
 
谢谢你的代码。我只是想知道,使用(ssget“F”),它将考虑所有与垂直线相交的水平线。有没有办法调整代码,只允许您选择要在其中创建矩形的特定水平线?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:52:35 | 显示全部楼层
我以为你想做的都是,问题是,需要反复做拣两条线,这样矩形之间就可以画出拣对,中间也可以有一条线。两条线使用entsel的不同方法。也许选择第一个点,然后perp top pt,然后选择两条线?保存绘制直线。Ps我画了一条弯曲的线,它仍然有效!
 
  1. (defun c:rectangs2 ( / tpp1 pt1 pt2 intpt1 intpt2 intpt3 intpt4 ss)
  2. (if (not AH:getval) (load "getval"))
  3. (ah:getval "Enter width.." "     edit_width = 10;" "     edit_limit = 8;")
  4. (setq width (Atof item))
  5. (setq pt1 (getpoint "\nPick 1st point"))
  6. (setq pt2 (getpoint "\nPick 2nd point"))
  7. (command "line" pt1 pt2 "")
  8. (setq obj (entlast))
  9. (setq obj2 (vlax-ename->vla-object obj)) ;convert pick line to vl object
  10. (alert "Pick 2 lines press Enter to exit on 1st line")
  11. (while
  12. (setq obj1 (vlax-ename->vla-object (car (entsel "pick 1st line"))))
  13. (setq intpt1 (vlax-invoke obj2 'intersectWith obj1 acExtendThisEntity))
  14. (setq obj3 (vlax-ename->vla-object (car (entsel "pick 2nd line"))))
  15. (setq intpt2 (vlax-invoke obj2 'intersectWith obj3 acExtendThisEntity))
  16. (setq intpt3 (polar intpt1 0.0 width))
  17. (setq intpt4 (polar intpt2 0.0 width))
  18. (command "pline" intpt1 intpt2 intpt3 intpt4 "C")
  19. (vla-delete obj2)
  20. ) ; while
  21. )

 
你也需要这个
  1. ;; Input  Dialog box with variable title
  2. ;; By Ah June 2012
  3. ;; code (ah:getval title)
  4. (defun AH:Getval (title width limit / fo)
  5. (setq fname "C://acadtemp//getval.dcl")
  6. (setq fo (open fname "w"))
  7. (write-line "ddgetval : dialog {" fo)
  8. (write-line " : row {" fo)
  9. (write-line ": edit_box {" fo)
  10. (write-line (strcat "    key = "  (chr 34) "sizze" (chr 34) ";") fo)
  11. (write-line  (strcat " label = "  (chr 34) title (chr 34) ";"  )   fo)
  12. ; these can be replaced with shorter value etc
  13. ;(write-line "     edit_width = 18;" fo)
  14. ;(write-line "     edit_limit = 15;" fo)
  15. (write-line width fo)
  16. (write-line limit fo)
  17. (write-line "   is_enabled = true;" fo)        
  18. (write-line "    }" fo)
  19. (write-line "  }" fo)
  20. (write-line "ok_cancel;}" fo)
  21. (close fo)
  22. (setq dcl_id (load_dialog  "c:\\getval")) ; make this a directory of your choosing
  23. (if (not (new_dialog "ddgetval" dcl_id))
  24. (exit))
  25. (action_tile "sizze" "(setq item  $value)(done_dialog)")
  26. (mode_tile "sizze" 3)
  27. (start_dialog)
  28. ; returns the value of item
  29. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:32 , Processed in 0.406216 second(s), 67 queries .

© 2020-2025 乐筑天下

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