明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2440|回复: 13

[讨论] 悬赏62个币一起讨论:坛友chenbh2 2012年求助贴:道路交叉打断\\\\\\\\圆角lisp

[复制链接]
发表于 2018-11-1 09:10 | 显示全部楼层 |阅读模式
63明经币
本帖最后由 水吉空 于 2018-11-2 10:58 编辑


最近看到有个12年的求助贴,发现没解决,自己动手操作了下,发现搞不定
一、窗选线条;
二、计算交点;
三、交点打断;
四、删除窗内线条;
五、线条圆角;

原贴地址:http://bbs.mjtd.com/forum.php?mo ... 0%C2%B7%BD%BB%B2%E6
四线打断:实现到第四步删除窗内线条;第五步实现不了。
  1. (defun inter (ent01 ent02 / obj1 obj2)
  2. (setq    obj1(vlax-ename->vla-object ent01)
  3.     obj2(vlax-ename->vla-object ent02)
  4.   )
  5.   (vlax-invoke obj1 'IntersectWith obj2 acExtendNone)

  6. )
  7. (defun c:jtr (/ cmd ent1 ent2 ent3 ent4 os point1 point2 point3 point4 ss)
  8. (princ "\n请选择要修剪的4个相交物体(直线、圆弧或多段线)...")
  9. (setq ss(ssget '((0 . "LINE,ARC,LWPOLYLINE"))))
  10. (if(=(sslength ss) 4)
  11.    (setq ent1(ssname ss 0)
  12.       ent2(ssname ss 1)
  13.       ent3(ssname ss 2)
  14.       ent4(ssname ss 3)
  15.     )
  16.    (progn
  17.      (princ "\n选取错误,请重新选择4个相交物体!")
  18.      (vl-exit-with-error "")
  19.     )
  20.   )
  21. (setq cmd(getvar "cmdecho"))
  22. (setvar "CMDECHO" 0)
  23. (command "undo" "be")
  24. (setq os(getvar "osmode"))
  25. (setvar "osmode" 0)
  26. (setq point1 (inter ent1 ent2))
  27. (if(= point1 nil)
  28.    (progn
  29.      (setq point1 (inter ent1 ent3)
  30.         point2 (inter ent1 ent4)
  31.         point3 (inter ent2 ent3)
  32.         point4 (inter ent2 ent4)
  33.       )
  34.      (command "break" ent1 point1 point2)
  35.      (command "break" ent2 point3 point4)
  36.      (command "break" ent3 point1 point3)
  37.      (command "break" ent4 point2 point4)
  38.     )
  39.    (progn
  40.      (setq point2 (inter ent1 ent3))
  41.      (if(= point2 nil)
  42.    (progn
  43.      (setq    point2 (inter ent1 ent4)
  44.         point3 (inter ent3 ent2)
  45.         point4 (inter ent3 ent4)
  46.       )
  47.      (command "break" ent1 point1 point2)
  48.      (command "break" ent2 point1 point3)
  49.      (command "break" ent3 point3 point4)
  50.      (command "break" ent4 point2 point4)
  51.     )
  52.    (progn
  53.      (setq    point3 (inter ent4 ent2)
  54.         point4 (inter ent4 ent3)
  55.       )
  56.      (command "break" ent1 point1 point2)
  57.      (command "break" ent2 point1 point3)
  58.      (command "break" ent3 point2 point4)
  59.      (command "break" ent4 point3 point4)
  60.     )
  61.       )
  62.     )
  63.   )
  64. (setvar "osmode" os)
  65. (command "undo" "e")
  66. (setvar "cmdecho" cmd)
  67. (princ)
  68. )



附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

关键是要对直线进行分组、排序 楼主看看是否满足要求
发表于 2018-11-1 09:10 | 显示全部楼层
本帖最后由 vectra 于 2018-11-5 10:25 编辑

关键是要对直线进行分组、排序
楼主看看是否满足要求




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +1 金钱 +10 收起 理由
panliang9 + 1 赞一个!
水吉空 + 10 感谢大神又提供了几个非常好用的自定义函数.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2018-11-1 14:22 | 显示全部楼层
本帖最后由 水吉空 于 2018-11-6 16:54 编辑

  1. ;感谢版主[ZZXXQQ]踅摸的帮助,经过测试程序还是有问题,来不及研究,先放上来供大家讨论!

  2. (defun inter (ent01 ent02 / obj1 obj2)
  3.   (setq obj1 (vlax-ename->vla-object ent01)
  4.     obj2 (vlax-ename->vla-object ent02)
  5.   )
  6.   (vlax-invoke obj1 'IntersectWith obj2 acExtendNone)  
  7. )
  8. (defun midpt (p1 p2)
  9. (mapcar '(lambda (a b) (/ (+ a b) 2)) p1 p2)
  10. )
  11. (defun c:jtr ()
  12. (if (and (setq pt1 (getpoint "\n窗交选择4个相交物体: "))
  13.           (setq pt2 (getcorner pt1 "\n窗交另一点: "))) (progn
  14.   (setq ss(ssget "C" pt1 pt2 '((0 . "LINE,LWPOLYLINE"))))
  15.   (if(=(sslength ss) 4) (progn
  16.    (setq ent1(ssname ss 0)
  17.          ent2(ssname ss 1)
  18.          ent3(ssname ss 2)
  19.          ent4(ssname ss 3)
  20.    )
  21. ;   (setq cmd (getvar "cmdecho"))
  22. ;   (setvar "CMDECHO" 0)
  23.    (command "undo" "be")
  24.    (setq os(getvar "osmode"))
  25.    (setvar "osmode" 0)
  26.    (setq ss1 (ssadd))
  27.    (setq first (entlast))
  28.    (if(= (setq point1 (inter ent1 ent2)) nil) (progn
  29.     (setq point1 (inter ent1 ent3)
  30.           point2 (inter ent1 ent4)
  31.           point3 (inter ent2 ent3)
  32.           point4 (inter ent2 ent4)
  33.     )
  34.     (command "break" ent1 point1 point2)
  35.     (command "break" ent2 point3 point4)
  36.     (command "break" ent3 point1 point3)
  37.     (command "break" ent4 point2 point4)
  38.    ) (if(= (setq point2 (inter ent1 ent3)) nil) (progn
  39.      (setq point2 (inter ent1 ent4)
  40.            point3 (inter ent3 ent2)
  41.            point4 (inter ent3 ent4)
  42.      )
  43.      (command "break" ent1 point1 point2)
  44.      (command "break" ent2 point1 point3)
  45.      (command "break" ent3 point3 point4)
  46.      (command "break" ent4 point2 point4)
  47.     ) (progn
  48.      (setq point3 (inter ent4 ent2)
  49.            point4 (inter ent4 ent3)
  50.      )
  51.      (command "break" ent1 point1 point2)
  52.      (command "break" ent2 point1 point3)
  53.      (command "break" ent3 point2 point4)
  54.      (command "break" ent4 point3 point4)
  55.     ))
  56.    )
  57.    (setq pm (midpt pt1 pt2))
  58.    (setq pt3 (list (car pt1) (cadr pt2)))
  59.    (setq pt4 (list (car pt2) (cadr pt1)))
  60.    (setvar "FILLETRAD" 100)
  61.    (repeat (setq i 4)
  62.     (setq pt (eval(read(strcat "pt" (itoa i)))))
  63.     (setq ss (ssget "C" pt pm '((0 . "LINE,LWPOLYLINE"))))
  64.     (setq en1 (ssname ss 0) en2 (ssname ss 1))
  65.     (setq ent1 (entget en1))
  66.     (setq pm1 (midpt (cdr(assoc 10 ent1)) (cdr(assoc 11 ent1))))
  67.     (setq ent2 (entget en2))
  68.     (setq pm2 (midpt (cdr(assoc 10 ent2)) (cdr(assoc 11 ent2))))
  69.     (command "_.FILLET" pm1 pm2)
  70.     (setq i (1- i))
  71.    )
  72.    (command "UNDO" "E")
  73.   )
  74.    (princ "\n选取错误,请重新选择4个相交物体!")
  75.   )
  76. ))
  77. (princ)
  78. )

根据vectra大神提供的源码自己改了下,改为多段线然后想改为通用型的,搞了一天,只出了一个半成品,实在搞不动了。其他的很多问题还是没能解决,就贴个自己的半成品成果吧,希望有大神优化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2018-11-2 00:10 | 显示全部楼层
这奖励都没有大师出手???
回复

使用道具 举报

发表于 2018-11-2 08:09 | 显示全部楼层
大师都没起床,再等等吧
回复

使用道具 举报

发表于 2018-11-2 09:15 | 显示全部楼层
倒圆角就CAD本身的功能都不完美,要突破桌子公司比较难啊
回复

使用道具 举报

 楼主| 发表于 2018-11-2 09:18 | 显示全部楼层
ssyfeng 发表于 2018-11-2 09:15
倒圆角就CAD本身的功能都不完美,要突破桌子公司比较难啊

是啊,所以有的思路是直接画圆弧。
回复

使用道具 举报

发表于 2018-11-2 10:10 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2018-11-2 10:57 | 显示全部楼层
bluefcc1 发表于 2018-11-2 10:10
這一篇可參考
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=88723&highlight=%B5%B9%BD%C7

谢谢 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2018-11-4 13:27 | 显示全部楼层
道路的要求还比这个复杂一些,在非直角的交叉口,圆角的半径参数是不一样的!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 04:59 , Processed in 0.192371 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表