明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1490|回复: 2

精确填充,根据高飞鸟大师代码而来

  [复制链接]
发表于 2021-7-17 02:37 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2021-7-17 06:19 编辑

对于填充,如何精确,不出错,是个头疼的事,本坛高飞鸟大师的几句代码,启发多多,为此,我写了几句,原帖地址:
http://bbs.mjtd.com/forum.php?mo ... %CC%EE%B3%E4&page=1

  • ;;读取填充文件patfile(全路径),hname图案定义的第二行---(一级)-----
  • (defun tcxsecon (patfile hname / ret str 1st str1)
  •   (setq ret t)
  •   (while (and ret (setq str (read-line patfile)))                  ;读填充文件
  •     (setq 1st (substr str 1 1))                                    ;每一行的第一个字母
  •     (if (and (= 1st "*") (wcmatch str (strcat "*" hname "*")))     ;如果是图案名字行 ,且是当前填充图案名                  
  •       (setq str1 (read-line patfile) ret nil)                      ;读下面一行
  •     )
  •   )
  •   str1
  • )
  • ;;;取*.pat  hname 线簇的距离---------(一级)-------------
  • ;;hpat *.pat文件名   hname 图案文件名
  • ;;例 (dishname "acad.pat" "SWAMP")
  • (defun dishname (hpat hname / patfile measure str1 delta-y)
  •   (if (/= (setq patfile (open (strcat sl-path0 "\\填充\\" hpat ".pat") "r")) nil) ;;sl-path0   为三领设计的,安装路径变量
  •     (setq str1 (tcxsecon patfile hname))
  •     (if (/= (setq patfile (open (strcat sl-path0 "\\acadiso.pat") "r")) nil)   ;填充的公制与英制
  •       (if (= (setq str1 (tcxsecon patfile hname))  nil)
  •         (progn
  •           (setq patfile (open (strcat sl-path0 "\\acad.pat") "r"))
  •           (setq str1 (tcxsecon patfile hname))
  •         )  
  •       )  
  •     )
  •   )
  •   (close patfile)  
  •   (if str1
  •     (progn
  •       (setq delta-y (abs (atof (nth 4 (slparse str1 ","))))) ;第5个值为线簇的距离
  •       (if (or (= delta-y 0) (= delta-y nil))
  •         (setq delta-y (* 20.0 slbl)) ;;如果,那么设置为全局比例的 20倍
  •       )
  •     )
  •     (setq delta-y (* 20.0 slbl))
  •   )
  •   delta-y ;;填充图案的 间距设置
  • )
  • ;;设置填充比例 tcbl --------(一级)----
  • ;;bjname 填充边界实体名 hpat *.pat文件名 hname 图案文件名
  • (defun sltcbl (bjname hpat hname / ptlis dis tcbl)
  •   (setq ptlis (ebox4 bjname))
  •   (setq dis (* 0.1 (distance (car ptlis) (cadddr ptlis)))) ;;设置边界内10根线
  •   (setq tcbl (/ dis (dishname hpat hname)))
  •   (setvar "hpscale" tcbl)                              
  • )

 楼主| 发表于 2021-7-17 02:40 | 显示全部楼层
本帖最后由 尘缘一生 于 2021-7-17 02:46 编辑

  • ;;字符串转表-----支持汉字---------(一级)------------------
  • ;;sstring 字符串   sstr 分割符号
  • (defun slParse (sstring sstr / string_list n1 n2 str_1 m2)
  •   (setq string_list '())
  •   (setq n1 (strlen sstring))
  •   (setq n2 (strlen sstr))
  •   (while (setq m2 (vl-string-search sstr sstring))
  •     (setq str_1 (substr sstring 1 m2))
  •     (setq sstring (substr sstring (+ 1 m2 n2)))
  •     (if (/= str_1 "")
  •       (setq string_list (cons str_1 string_list))
  •     )
  •   )
  •   (if (/= sstring "")
  •     (setq string_list (cons sstring string_list))
  •   )
  •   (reverse string_list)
  • )

ebox4为实体四点包容,这个函数就不用发了吧,因为,我整合太多,实在无法发出来。
深化下去,可以做到准确填充,期待大家写成更好代码,输入间距,解决,贴瓷砖等准确问题。。。。。。

发表于 2022-9-30 08:13 | 显示全部楼层
学习了支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-17 20:50 , Processed in 0.146980 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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