家园首页· 下载中心· 图纸中心· 文章中心· 教学中心· 晓东词典· 资源中心· FTP联盟· 校友录· 邮购服务
   论坛首页免费注册个人设置帮助退出论坛 爱心币规则  快速链接 游乐园  

  为改善网站速度,本站接受大家捐款,共建家园,点击查看汇款方法和捐款朋友名单...


晓东CAD家园 : Powered by vBulletin version 2.2.1 家园首页 >> 家园论坛 > …编程开发版块 > ※AutoLISP/VLISP 开发技术※ > [LISP程序]:结合trim和extend的有趣程序
  上一主题   下一主题
作者
主题 发布新主题    回复主题
snoopychen [查找更多关于snoopychen的帖子]积分28
超级会员


ID: No.8476
发贴数: 365

经验值: 82%
等级: 17 级

现金:633¥
存款:

积分: 28
注册日期: 2002.08.04
日均在线: 0.31 小时
来  自:
1楼楼主说:[LISP程序]:结合trim和extend的有趣程序

一个还算有趣的trim和extend的结合,不记得论坛是不是有写过
针对一个修剪边和一堆直线自动进行trim或者extend,相交的直线按照
修剪边两边的长度,取长者保留。
这个是今天在http://intervision.hjem.wanadoo.dk/看到的程序
作者原来程序中作为修剪边的对象只能是直线,(因为用的是纯lisp
的inter函数),为了修剪边可以复杂一些,我稍作修改,用了陌生人
长老的x_intlst实体交点子程序,不过现在r14就不可以用了。
这个程序应该可以继续改进的,对修剪对象扩展为其他类型,不过这时候
应该就得用到vlax-curve-getParamAtDist之类来判断线应该留下哪一边
之类了。

代码如下

;;; Touch.LSP                                              *
;;;
Small routine to align endpoints of lines to an edge.  *
;;;
The edge have to be a line.                            *
;;;
The routine works by calculating the point of inter-   *
;;;
section and change the nearest endpoint to that point  *
;;;
2001 Stig Madsen, no rights reserved                   *
;;;
modified by qjchen

(defun C:Ttt (/ cmd ent entl spt ept sset a lent lentl lspt lept lint)
  (
vl-load-com)
  (
setq cmd (getvar "CMDECHO"))
  (
setvar "CMDECHO" 0)
  (
command "UNDO" "Begin")
  (while (
not ent)
    (
setq ent (car (entsel "Select edge line: ")))
    (if
ent
      
(progn
    
(setq entl (entget ent))
      )
    )
  )
  (if
ent
    
(progn
      
(redraw ent 3)
      (
prompt "\nSelect lines to touch edge: ")
      (
setq sset (ssget '((0 . "LINE")))
        a 0
      )
      (if sset
    (repeat (sslength sset)
      (setq lentl (entget (setq lent (ssname sset a)))
        lspt (cdr (assoc 10 lentl))
        lept (cdr (assoc 11 lentl))
      )
      (setq entttt (ssname sset a))
      (setq lint (nth 0 (x_intlst ent entttt acExtendOtherEntity)))
      (if lint
        (progn

          (if (< (distance lint lspt) (distance lint lept))
        (entmod (subst
              (cons 10 lint)
              (assoc 10 lentl)
              lentl
            )
        )
        (entmod (subst
              (cons 11 lint)
              (assoc 11 lentl)
              lentl
            )
        )
          )
        )
      )
      (setq a (1+ a))
    )
    (princ "\nNo objects found")
      )
      (redraw ent 4)
    )
    (princ "\nNo edge selected")
  )
  (setvar "CMDECHO" cmd)
  (command "UNDO" "End")
  (princ)
)

;;; by xdcad 陌生人
(defun x_intlst (obj1 obj2 param / intlst1 intlst2 ptlst)

  (if (= '
ENAME (type obj1))
    (
setq obj1 (vlax-ename->vla-object obj1))
  )
  (if (= '
ENAME (type obj2))
    (setq obj2 (vlax-ename->vla-object obj2))
  )
  (setq intlst1 (vlax-variant-value (vla-intersectwith obj1 obj2 param)))
  (if (< 0 (vlax-safearray-get-u-bound intlst1 1))
    (progn
      (setq intlst2 (vlax-safearray->list intlst1))
      (while (> (length intlst2) 0)
    (setq ptlst (cons (list (car intlst2) (cadr intlst2) (caddr intlst2))
              ptlst
            )
          intlst2 (cdddr intlst2)
    )
      )
    )
  )
  ptlst
)



snoopychen 附带了这个的图片 (这个图片经过缩小处理,鼠标滚轮缩放图片或点击图片可以查看清晰效果) :

向版主反映该贴 | IP: 已记录



结构分析、CAD Autolisp技术、软件使用技巧
http://qjchen.yo2.cn

2005年11月17日 09:36
snoopychen 离线引用回复 点这里给 snoopychen 发送一条悄悄话 查找 snoopychen 的更多帖子 编辑/删除
狂刀 [查找更多关于狂刀的帖子]等级30
白银长老


ID: No.194606
发贴数: 1191

经验值: 10%
等级: 30 级

现金:1589¥
存款:

积分: 6
注册日期: 2004.11.19
日均在线: 0.29 小时
来  自:
2楼楼主说:

求实交点,如果有实交点,剪切端点近的一边
如果无实交点,延伸端点近的一边



向版主反映该贴 | IP: 已记录




删除多义线的指定param参数顶点
显示隐藏工具条开关程序
表格诸列中点的坐标值
取曲线上特定测量点或等分点
框选删除不等比块内实体的程序
ini格式文件读取函数
模拟特性匹配的选择方式,支持undo
自由剪切TRIM(一),多功能
自由剪切TRIM(二),方便快捷
member反效函数
定距离倒角
校正水平,垂直直线
删除文本中所有括号
按字母/数字分解字符串
全能更改字高程序
求曲线内部任意一点
超级反剪切
全能更改字高程序

2005年11月17日 10:09
狂刀 离线引用回复 点这里给 狂刀 发送一条悄悄话 查找 狂刀 的更多帖子 编辑/删除
zhuxiaoming [查找更多关于zhuxiaoming的帖子]
中级会员
ID:672942 发贴数: 118
经验值: 89%
等级: 9 级积分: 0
现金:102¥ 存款:0¥
注册日期: 2008.12.30
日均在线:
0.11 小时
来  自: 浙江杭州
3楼楼主说:

加载后使用时怎么提示No objects found



向版主反映该贴 | IP: 已记录


2010年03月15日 08:18
zhuxiaoming 离线引用回复 点这里给 zhuxiaoming 发送一条悄悄话 查找 zhuxiaoming 的更多帖子 编辑/删除
时区: GMT北京时间. 现在时间: 11:47. 发布新主题    回复主题 
  上一主题   下一主题
快速回复 [字数限制(为0不限制):0]
标题:
选项:
自动分析URL
Email 通知
显示签名

在新主题帖子中上传一个附件上传附件[最大: 1024000 字节:] 附件收爱心币!
有效文件扩展名: gif jpg dwf pdf txt zip jpeg lsp dcl doc c cpp swf rar 7z png
显示可打印版本 | 将本页发送给朋友 | 订阅该主题 | 添加到收藏夹

论坛跳转:
给这个主题评分:

论坛状态:
你不可以发布新主题
你不可以回复主题
你不可以上传附件
你不可以编辑自己的帖子
HTML代码 允许
vB代码 允许
表情符号 禁止
[IMG]代码 允许
 

< 管理员信箱 --辽ICP备05017898号 >
MSN:ad@xdcad.net 点击这里给我发消息 

本论坛属于个人性质的论坛,仅提供会员交流!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律有抵触的言论!否则后果自负