明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5016|回复: 19

[源码] 才学LSP没多久,发一些自己写的lsp,高手不要笑话哈~

[复制链接]
发表于 2014-5-7 23:37:15 | 显示全部楼层 |阅读模式
;—————————判断多线段是否封闭————————
(defun c:JJ()
(setq n (car (entsel)))
(setq n1 (entget n)) ;碰选一多线段,获取元体资料串行
(setq p1 (assoc 70  n1))   ;获取多线段是否闭合标志串码
(setq d1 (assoc 10  n1))   ;获取多线段是开口坐标标志串码
(setq p2 (cdr p1 ))
(setq d2 (cdr d1 ))
(if (= P2 0)
    (progn
    (princ"\n亲爱的陛下!闭合状态:否" )(princ "    开口处坐标:")(princ d2)
    (command "donut" "0" "3" d2 "")
)
)
(if (= P2 1) (princ "\n亲爱的陛下!闭合状态:是" ))
(princ )
)

;————画研磨符号(五金模具设计类用的多)有瑕疵望高手来改进—————
(defun c:a3()
(princ"\n使用此命令建议关闭对象扑捉功能,否则容易出错")
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq P1 (getpoint "\n指定点1:"))
(setq p1x(car p1))
(setq p1y(cadr p1))
(setq p2(getpoint p1 "\n指定点2:"))
(setq p2x(car p2))
(setq p2y(cadr p2))
(setq mx (/ (+ p1x  p2x) 2))
(setq my (/ (+ p1y  p2y) 2))
(setq m (list mx  my))
(setq j (angle p1 p2))
(setq j1 (angtos j 0))
(setq h (* (sqrt 3) 2.5))
(setq a1 (list (- mx 2.5)  (- my h)))
(setq a2 (list (- mx 5) my))
(setq a3 (list (- mx 7.5)  (- my h)))
(setq a4 (list (+ mx 7.5)  (- my h)))
(setq a5 (list (+ mx 5) my))
(setq a6 (list (+ mx 2.5)  (- my h)))
(setq n1 (list (- mx 7.6) (- my 4.4)))
(setq n2 (list (+ mx 7.6) (+ my 0.1)))
(command "PLINE" m a1 a2 a3 a4 a5 a6 "C")
(setq n3 (ssget "w" n1 n2 ))
(command  "ROTATE" n3 "" m j1 )
(setvar "osmode" 4)
(COMMAND "CHPROP" "P" "" "C" "1" ""))

;—————————选颜色删图元—————
(defun c:eq()
(setq ss2 (ssadd))
(princ "\n点选参照图元:")
(setq ss1(cdr (assoc 62 (entget(car (entsel))))))
(princ "\n框选需要删除的图元:")
(setq ss (ssget)) ;框选对象
(setq n 0) ;变量n值设为实数0,n为选择集的起始值
(repeat (sslength ss)
(setq en (ssname ss n))  ;选择集中第n个对象的名称
(setq endata (entget en)) ;获取元体资料串行
(setq nn(assoc 62 endata));获取元体串码0 的列表
(setq p1 (cdr nn)) ;返回串码0中去掉了第一个元素的表
(if (=  p1 ss1)
(ssadd en ss2))
(setq n (1+ n)))
(command "ERASE" ss2 ""))


;—————————局部刷新—————
(defun c:rf()
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq b (getvar "viewsize")
         c (car (getvar "screensize"))
         d (cadr (getvar "screensize"))
         a (* b (/ c d))
         x (trans (getvar "viewctr") 1 2)
         g1 (trans (list (- (car x)  (/ a 2.0)) (- (cadr x) (/ b 2.0)) 0.0) 2 1)
         g2 (trans (list (+ (car x) (/ a 2.0)) (+ (cadr x) (/ b 2.0)) 0.0) 2 1)
   )
(setq ss(ssget "_C" g1 g2))
(command "ERASE" ss "" )
(command "u"  "" )
)

评分

参与人数 1明经币 +2 收起 理由
xyp1964 + 2 赞一个!

查看全部评分

发表于 2019-8-27 07:19:11 | 显示全部楼层

局部刷新功能挺是有用   谢谢分享
 楼主| 发表于 2014-5-7 23:39:42 | 显示全部楼层
刚学没多久,容易搞糊涂,就在后面加了好多的批注,,发帖时忘记删了
 楼主| 发表于 2014-5-7 23:47:50 | 显示全部楼层
另外请教一下下图的这种坐标标注方式如何写lsp?

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-5-8 00:00:46 | 显示全部楼层
各位大侠帮我看下下图这个中心线该怎么写lsp,谢谢了,电脑换64位了外挂半残废了,只能依靠lsp了

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-5-8 20:47:00 | 显示全部楼层
怎么么没有人帮我看下呢[em0]
发表于 2014-5-8 20:54:58 | 显示全部楼层
qinleilei 发表于 2014-5-8 00:00
各位大侠帮我看下下图这个中心线该怎么写lsp,谢谢了,电脑换64位了外挂半残废了,只能依靠lsp了

如果只是图中的样式的话,可以考虑提取图形的最小包围框的四个点,然后就可以计算得到中心线的定位点了。
包围框的函数论坛里应该有,可以找下
 楼主| 发表于 2014-5-8 20:59:26 | 显示全部楼层
lostbalance 发表于 2014-5-8 20:54
如果只是图中的样式的话,可以考虑提取图形的最小包围框的四个点,然后就可以计算得到中心线的定位点了。 ...

我也是这个思路,关键是不知道如何去提取最小包围框,很感谢你的解答,我去搜一下
发表于 2014-5-11 12:33:46 | 显示全部楼层
这个也算是新手的程序??有点厉害啊
发表于 2014-5-11 13:58:20 | 显示全部楼层
判断多线段是否封闭:70码为1或起点与终点坐标相等
发表于 2014-5-11 15:20:37 | 显示全部楼层
局部刷新请参考黄明儒大师的常用函数帖子,用entupd更快,你这里用erase+U,相当于对图元处理了两次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 15:34 , Processed in 0.202388 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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