版权声明:本文为博主原创文章,转载请注明出处。https://blog.csdn.net/qq_33839952/article/details/94392966


在边界线中填充圆,由用户自己定义填充方式(横向等边三角/竖向等边三角/正方形等)、圆心距、半径,并将圆心位于边界线外的圆删除。


;;;程序目的:快速填充圆圈
;;;程序结构:由用户输入半径、圆心间距、排列方式等,
;;;快速填充圆。
;;; HF 2019/07/01 QQ1556899790
;;;可根据需要添加默认值。;;;程序开始:
(defun c:kshy();kshy for 快速画圆(alert "注意:尽量在空图纸上操作")(setq arg (getint "\n排布类型\n<0>等边三角形\n<1>正方形\n请选择:"));arg for arrangement(setq rad (getreal "\n输入半径:"));rad for radius(setq csp (getreal "\n输入圆心间距:"));csp for circle spacing(setq cpt (getpoint "\n选取起始圆心位置:"));cpt for center point(setq ept (getpoint "\n选取中线终点:"));ept for ending point(setq upt (getpoint "\n选取上边界点:"));upl for upper point(setq lpt (getpoint "\n选取下边界点:"));lpl for lower point(setq upline (car (entsel "\n选取上边界线:")))(setq lpline (car (entsel "\n选取下边界线:")))(cond((= arg 0) (etri));etri for equilateral triangle((= arg 1) (squa));squa for square)(delc);delc for delete circle, 去除圆心在边界以外的点。(alert "      **绘制结束**")
)
*******************************************************************
;子程序:等边三角形画圆
(defun etri()(setq cdi (getint "\n选择三角形边的方向\n<0>水平向<1>竖直向:"))(cond((= cdi 0) (vecp));vecp for vertical copy((= cdi 1) (hrcp));hrcp for horizontal copy)
)
********************
(defun vecp();在竖向。向上向下复制,以上下边界点y坐标为界限。(setq osmode_num (getvar "osmode"));记住捕捉设置,后面便于还原(setvar "osmode" 0);清空捕捉模式(setq xdis (*(sin(/(* 30 pi)180))csp));X方向变更间距(setq ydis (*(cos(/(* 30 pi)180))csp));y方向变更间距(setq upnum (atoi(rtos(/(-(cadr upt)(cadr cpt))ydis))));向上复制的次数(setq lonum (atoi(rtos(/(-(cadr cpt)(cadr lpt))ydis))));向下复制的次数(command "circle" cpt 0.0001)(setq a (entlast))(command "array" a "" "R" "" (atoi(rtos (/(-(car ept)(car cpt))csp)2 0)) csp "")(setq aa (cons 40 0.0001))(setq aaa (ssget "X" (list aa)))(command "copybase" cpt aaa "");完成以首行,起点圆心为基点的复制(setq i 1);复制过程中,y坐标始终加/减相同间距,但X要交替加减。;使用(setq i (* i -1)),对X交替加减。(setq npt (list (+(car cpt)(* xdis i))(+ (cadr cpt) ydis)))(repeat upnum(command "pasteclip" npt)(setq npt (list (+(car npt)(* xdis i))(+ (cadr npt) ydis)))(setq i (* i -1)))(setq i 1)(command "copybase" cpt aaa "");完成以首行,起点圆心为基点的复制(setq npt (list (+(car cpt)(* xdis i))(- (cadr cpt) ydis)))(repeat lonum(command "pasteclip" npt)(setq npt (list (+(car npt)(* xdis i))(- (cadr npt) ydis)))(setq i (* i -1)))(setvar "osmode" osmode_num);还原捕捉设置)
*******************
(defun hrcp();在横向复制,以中线起止点x坐标为界限。(setq osmode_num (getvar "osmode"));记住捕捉设置,后面便于还原(setvar "osmode" 0);清空捕捉模式(setq xdis (*(cos(/(* 30 pi)180))csp));x方向变更间距(setq ydis (* 0.5 csp));y方向变更间距(setq xnum (atoi(rtos (/(-(car ept)(car cpt))xdis)2 0)));横向复制的次数(setq uanum (atoi(rtos (/(-(cadr upt)(cadr cpt))csp)2 0)));向上阵列的次数(setq lanum (atoi(rtos (/(-(cadr cpt)(cadr lpt))csp)2 0)));向下阵列的次数(command "circle" cpt 0.0001)(setq a (entlast))(command "array" a "" "R" uanum "" csp "");向上阵列(command "array" a "" "R" lanum "" (* -1 csp) "");向下阵列(setq aa (cons 40 0.0001))(setq aaa (ssget "X" (list aa)));全选第一列绘制的圆(command "copybase" cpt aaa "");完成以首列,起点圆心为基点的复制(setq i 1)(setq npt (list (+(car cpt)xdis)(+ (cadr cpt)(* ydis i))));第一个粘贴的点(repeat xnum(command "pasteclip" npt)(setq npt (list (+(car npt)xdis)(+ (cadr npt)(* ydis i))))(setq i (* i -1)))(setvar "osmode" osmode_num);还原捕捉设置)
*********************************************************************
;子程序:正方形排布画圆;用横向复制而不是阵列,避免与环境变量MaxArray冲突。
(defun squa()(setq osmode_num (getvar "osmode"));记住捕捉设置,后面便于还原(setvar "osmode" 0);清空捕捉模式(setq xdis csp)(setq xnum (atoi(rtos (/(-(car ept)(car cpt))xdis)2 0)));横向复制的次数(command "circle" cpt 0.0001)(setq a (entlast))(command "array" a "" "R" uanum "" csp "");向上阵列(command "array" a "" "R" lanum "" (* -1 csp) "");向下阵列(setq aa (cons 40 0.0001))(setq aaa (ssget "X" (list aa)));全选第一列绘制的圆(command "copybase" cpt aaa "");完成以首列,起点圆心为基点的复制(setq i 1)(setq npt (list (+(car cpt)(* xdis i))(cadr cpt)));第一个粘贴的点(repeat (+ xnum 1)(command "pasteclip" npt)(setq npt (list (+(car cpt)(* xdis i))(cadr cpt)))(setq i (1+ i)))(setvar "osmode" osmode_num);还原捕捉设置)
*********************************************************************
;子程序:去掉边界线外的圆
;程序结构:利用围交wp,将选中的圆半径改为rad;再次使用ssget选中半径小的
;圆,删除。
(defun delc()(setq osmode_num (getvar "osmode"));记住捕捉设置,后面便于还原(setvar "osmode" 0);清空捕捉模式(setq ent (entget upline))(setq upts nil);循环次数为列表长度(setq i 0)(repeat (length ent);多段线的群码10对应节点坐标,从联合属性列表的第一个;元素开始,循环向后判断群码是否等于10,赋值给pts.;nth:the nth element of lst.(if (= (car (nth i ent)) 10)(setq upts (append upts (list (cdr (nth i ent))))))(setq i (1+ i)));获得上边界节点列表upts(setq ent (entget lpline))(setq lpts nil)(setq i 0)(repeat (length ent)(if (= (car (nth i ent)) 10)(setq lpts (append lpts (list (cdr (nth i ent))))))(setq i (1+ i)));获得下边界节点列表lpts(setq lpts (reverse lpts));反转lpts(setq pts (append upts lpts))(command "zoom" "e")(setq cc (ssget "wp" pts '((0 . "CIRCLE"))))(setq ccnum (sslength cc))(setq i 0)(repeat (- ccnum 1)(setq entname (ssname cc i))(setq entdata (entget entname))(setq entdata (subst (cons 40 rad) (assoc 40 entdata) entdata))(entmod entdata)(setq i (1+ i)))(setq ccdel (ssget "X" '((0 . "CIRCLE")(40 . 0.0001))))(command "erase" ccdel "")(setvar "osmode" osmode_num);还原捕捉设置)**********************************************************************
;;; 程序结束, kshy使用。
;;; ©2019 H.France. All Rights Reserved.

自己写的插件:快速填充圆相关推荐

  1. 为virtools写的插件进行一下总结

    在杭州森动工作一年快4个月了吧(也算公司成立没多久的前几个员工了,不过直到结束总共员工也没多少).主要工作就是为Virtools写写插件,如今森动要么注销公司,要么被盘下重新做(注销公司很麻烦),本人 ...

  2. 织梦插件-站长必备免费织梦插件快速收录

    今天博主来给大家分享:用免费织梦插件快速提升网站收录以及关键词排名,为了让完全不懂SEO的朋友快速上手,前期解说比较基础,讲解全套SEO的优化方式,附工具! 一.域名的选择选择域名非常重要,因为他是网 ...

  3. 合并单元格如何快速填充序列

    大家都有对单元格进行填充序号的经历,如果单元格规律一致我们可以很很快速的填充,可是如果是没有规律的合并单元格呢?下面就跟大家分享一下如何 1.如下图,序号列是一些没有规律的合并单元格与非合并单元格.现 ...

  4. 利用Idea中Gson插件快速编辑POJO类

    利用Idea中Gson插件快速编辑POJO类 (1)需求说明 现在有一个hashmap,想写一个POJO类实现它所有字段的get.set方法,当hashmap中字段较多的时候,过程会变成很繁琐的体力活 ...

  5. cad批量逐个填充lisp_快速填充的多选问题 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    本帖最后由 alexmai 于 2019-3-22 00:35 编辑 ----------------------------------------------------------------- ...

  6. SketchUp的二次开发探索 (二)菜单栏中放入自己写的插件

    在初识 SketchUp 的 Ruby Code Editor之后, 我们学会了6行代码绘制球体. 但是这不是一个 完整 的插件, 在使用的时候还需要打开 Ruby Code Editor, 粘贴我们 ...

  7. python写chrome插件_用VueJS写一个Chrome浏览器插件

    浏览器基本已经天下大统了,放眼望去都是Chromium的天下.那么,能写一个浏览器插件也算是一种回报率不错的技能. 基本知识 浏览器插件官方的说法叫扩展程序,允许你为浏览器增加各种功能,但不需要深入研 ...

  8. Excel技巧—快速填充

    快速填充 在处理表格时,给出了一列信息,想拆分成几列,每列对应部分信息.如给出的是学号和姓名,如何快速分为学号和姓名两列. 拆分 输入第一个学号,然后选中其余单元格按Ctrl+E(快速填充),再输入第 ...

  9. 解决excel中使用快速填充(CTRL+E)的结果为同一值的问题

    昨天,需要在一列数据中,往每个单元格的固定位置处加一个空格, 如下, 第一个格内输入,2 0,回车,然后自动定位到第二列的第二行,使用快速填充,结果如下,不符合预期 原因是,给出的模式不够多,exce ...

最新文章

  1. NYOJ 36 最长公共子序列
  2. CoreData 从入门到精通(四)并发操作
  3. Microsoft Forefront TMG(ISA2008)简体中文商业版(MBE)发布
  4. ASPNET Core 2.x中的Kestrel服务器
  5. java swing 多个线程,Swing与多线程
  6. Web设计-提交前的对话框
  7. 计算机408真题_2019年计算机统考408真题第8题及其解析
  8. 破解Access(*.mdb)目前所有版本的密码
  9. c语言编程计算税后收入,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  10. Solr Facet 统计查询
  11. Android Studio系统盘瘦身
  12. VSCode 单文件编译 与 多文件编译(windows)
  13. 高清架构整洁之道PDF下载
  14. 小程序开通直播的思路总结
  15. 录音文件怎么转文字 手机便签里的录音文字转换方法
  16. RHCE-8-管理变量和事实/任务控制
  17. FFmpeg支持QUIC
  18. Shiro--解决is not eligible for getting processed by all BeanPostProcessors
  19. [英文歌曲]斗士:Fighter
  20. 开源增强型zigbee协议栈

热门文章

  1. python实现成语背诵小软件
  2. markdown数学符号整理
  3. 记录解决点击事件触发两次情况
  4. Ubuntu加域后域账号登录账号串号
  5. 关于linux下的库文件
  6. 制作一个简单HTML传统-中秋节 6页 带视频网页(HTML+CSS)
  7. 免费空间的定义以及如何选择免费空间
  8. 在html中,书写多个连续的空格,但在页面中无效的问题
  9. 2022年洪山区光通信产业高级人才引进奖励项目申报条件和申报材料
  10. Linux网卡命名enp1s0说明