明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 醒玉

求断线程序!!!

  [复制链接]
发表于 2006-3-28 19:46:00 | 显示全部楼层
本帖最后由 作者 于 2006-4-12 22:00:39 编辑

  1. (defun c:test ()
  2.   (setvar "cmdecho" 0)
  3.   (setq dd (getdist (strcat "\n请输入要断开的长度<"
  4.        (rtos (getvar "userr1"))
  5.        ">:"
  6.       )
  7.     )
  8.   )
  9.   (if dd
  10.     (setvar "userr1" dd)
  11.     (setq dd (getvar "userr1"))
  12.   )
  13.   (if (setq ent (car (entsel "\n请一条基准线:")))
  14.     (progn
  15.       (setq dxf (entget ent))
  16.       (setq p1 (cdr (assoc 10 dxf))
  17.      p2 (cdr (assoc 11 dxf))
  18.       )
  19.       (grdraw p1 p2 1)
  20.       (princ "\n选择要被打断的多条直线:")
  21.       (if (setq ss (ssget '((0 . "LINE"))))
  22. (progn
  23.    (setq i -1)
  24.    (command "undo" "be")
  25.    (while (setq ent1 (ssname ss (setq i (1+ i))))
  26.      (setq dxf1 (entget ent1))
  27.      (setq p3  (cdr (assoc 10 dxf1))
  28.     p4  (cdr (assoc 11 dxf1))
  29.     ang (angle p3 p4)
  30.      )
  31.      (if (setq inter-p (inters p1 p2 p3 p4))
  32.        (progn
  33.   (setq p5 (polar inter-p ang (/ dd 2.0))
  34.         p6 (polar inter-p (+ ang pi) (/ dd 2.0))
  35.   )
  36.   (command "break" ent1 "none" p5 "none" p6)
  37.        )
  38.      )
  39.    )
  40. )
  41.       )
  42.       (grdraw p1 p2 0)
  43.       (command "undo" "E")
  44.     )
  45.     (princ "\n没有选择基准线,请重新选择!")
  46.   )
  47.   (setvar "cmdecho" 1)
  48.   (princ)
  49. )
 楼主| 发表于 2006-4-12 17:05:00 | 显示全部楼层

楼上的大哥,好像上面的程序使用出现了点问题,显示如下:

命令: BR
请输入要断开的长度<3>:
请一条基准线:
选择要被打断的多条直线:
选择对象:
undo 输入要放弃的操作数目或 [自动(A)/控制(C)/开始(BE)/结束(E)/标记(M)/后退(B)]
<1>: be
命令: ; 错误: 参数类型错误: lselsetp nil

发表于 2006-4-12 22:01:00 | 显示全部楼层
那是空选的关系,11楼的程序已经修改过了,再试试
发表于 2006-4-13 08:31:00 | 显示全部楼层
即然是“许多条线与单条线a相交”,单条线a的两端点就是栏选的第一个点和第二点,选中单条线a,就没有什么必要再出现“F”选项了,根据你的要求,将程序调整为如下即可:
  1. ;;请试用以下程序
  2. ;;by yshf
  3. (defun c:cc ()
  4.    (setq cm (getvar "cmdecho") om (getvar "osmode"))
  5.    (setvar "osmode" 0)
  6.    (command "_undo" "be")
  7.    (setq  dd (getdist (strcat "\n请输入要断开的长度<"
  8.          (rtos (getvar "userr1")) ">:"
  9.         )
  10.       )
  11.    )
  12.    (if dd (setvar "userr1" dd)(setq dd (getvar "userr1")))
  13.    (while (setq ent (car (entsel "\n请一条基准线:")))
  14.       (setq dxf (entget ent)
  15.      p1  (cdr (assoc 10 dxf))
  16.      p2  (cdr (assoc 11 dxf))
  17.       )
  18.       (if (setq ssa (ssdel ent (ssget "f" (list p1 p2) '((0 . "LINE")))))
  19.    (progn
  20.              (setq i 0  n (sslength ssa))
  21.       (repeat n
  22.          (setq en2 (ssname ssa i)
  23.         dxf (entget en2)
  24.         p3  (cdr (assoc 10 dxf))
  25.         p4  (cdr (assoc 11 dxf))
  26.         pt  (inters p1 p2 p3 p4)
  27.   )
  28.                 (command "_circle" pt (/ dd 2.0))(setq en1 (entlast))
  29.                 (command "_trim" (entlast) "" (list en2 pt) "")
  30.                 (entdel en1)
  31.                 (setq i (1+ i))
  32.       )
  33.    )
  34.       )
  35.    )
  36.    (command "_undo" "e")
  37.    (setvar "osmode" om)(setvar "cmdecho" cm)(princ)
  38. )
其实上次程序中已给了主要算法,本次仅是增加了选择集,并对选择集中的图元按已给算法进行处理。
 楼主| 发表于 2006-4-13 09:41:00 | 显示全部楼层
唉,高手实在太多,只叹小弟手太嫰,提不动刀啊!!!
 楼主| 发表于 2006-4-15 08:35:00 | 显示全部楼层
好像几个程序在使用过程中和对象捕捉有冲突的地方,不知道用过的朋友有没有同感……
发表于 2006-11-3 19:56:00 | 显示全部楼层
; 错误: 参数类型错误: 二维/三维点: nil
发表于 2007-1-17 17:12:00 | 显示全部楼层
请问如果是PLINE线该如何处理?
发表于 2007-1-19 21:17:00 | 显示全部楼层
我已经能用PLINE线打断了,但没有实现打断选中的线。高手请不吝赐教!
发表于 2010-2-6 13:33:00 | 显示全部楼层
哪有单点断线的程序和外挂????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-28 07:22 , Processed in 0.162645 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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