明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 954|回复: 8

[源码] 若干年前编的波纹线程序,想要支持UCS和连续运行,不知道如何改了

[复制链接]
发表于 2023-6-30 20:39:55 | 显示全部楼层 |阅读模式
本帖最后由 meja 于 2023-6-30 21:14 编辑

若干年前画水面线用的,不过只能画水平的,今年突然想要改成任意方向都可以,而且要连续输入,突然不会了,求大神帮忙!
  1. ;;学习 ssadd函数 2011.6
  2. (defun newerr (NE)
  3.    (if (/= NE "Function cancelled")
  4.       (princ (strcat "\nError: " NE))
  5.    )
  6.    (setvar "OSMODE" OM)
  7.    (setvar "CMDECHO" CE)
  8.    (setvar "BLIPMODE" BM)
  9.    (setvar "orthomode" orth)
  10.    (princ)
  11. )
  12. (defun c:water
  13.    (/ SP EP HT OM CE BM DX AN NX NU AX PX
  14.          P1 P2 P3 P4 P5 XSP XEP XT tmpep tmpsp ST EN)
  15.    (if (not (tblsearch "LAYER" "water"))
  16.    (command "layer" "m" "water" "c" "1" "" ""))
  17.    (command "layer" "s" "water" "")
  18.    (setvar "ucsfollow" 0)
  19.    (setq OM (getvar "OSMODE"))
  20.    (setq CE (getvar "CMDECHO"))
  21.    (setq BM (getvar "BLIPMODE"))
  22.    (setq orth (getvar "orthomode"))
  23.    (setvar "CMDECHO" 0)
  24.    (setvar "BLIPMODE" 0)
  25.    (setvar "orthomode" 1)
  26.    (setvar "OSMODE" 1)
  27. (while    ; 加入循环
  28.    (setq SP (getpoint "\nPick start point of water: "))
  29.    (setvar "OSMODE" 0)
  30.    (setq EP (getpoint SP "\nPick end point of water: "))
  31.     (setq ST SP)
  32.     (setq EN (polar SP (ANGLE SP EP) (DISTANCE SP EP)))
  33.    (setq XSP (car SP) XEP (car EP))
  34.    (if (> XSP XEP)
  35.        (progn
  36.        (setq tmpsp SP)
  37.        (setq tmpep (list(car EP) (cadr SP)))
  38.        (setq SP tmpep)
  39.        (setq EP tmpsp)
  40.        )
  41.       )
  42.      (setq DX (distance SP EP)
  43.       AN (angle SP EP)
  44.       NU (/ DX 100)
  45.       AX (+ AN (/ pi 2))
  46.       P1 (list (+ 20 (car SP)) (- (cadr SP) 20))
  47.       P2 (list (+ 40 (car SP)) (- (cadr SP) 30))
  48.       P3 (list (+ 60 (car SP)) (- (cadr SP) 30))
  49.       P4 (list (+ 80 (car SP)) (- (cadr SP) 20))
  50.       P5 (polar SP 0 100)
  51.       ss (ssadd)                                ;;2011.6.27
  52.       )
  53.       (repeat (fix NU)
  54.       (command ".PLINE" SP P1 P2 P3 P4 P5 "")
  55.       (setq ss (ssadd (entlast) ss)) ;;2011.6
  56.       (setq SP P5
  57.       P1 (list (+ 20 (car SP)) (- (cadr SP) 20))
  58.       P2 (list (+ 40 (car SP)) (- (cadr SP) 30))
  59.       P3 (list (+ 60 (car SP)) (- (cadr SP) 30))
  60.       P4 (list (+ 80 (car SP)) (- (cadr SP) 20))
  61.       P5 (polar SP 0 100)      
  62.       )
  63.    )
  64.    (setq ss (ssadd (entlast) ss))               ;;2011.6.27
  65.    (command ".pedit" "m" ss "" "J" 0 "" )
  66.    )           ;ebd while 结束循环
  67.    (setvar "OSMODE" OM)
  68.    (setvar "CMDECHO" CE)
  69.    (setvar "BLIPMODE" BM)
  70.    (setvar "orthomode" orth)
  71.    (princ)
  72. );end


发表于 2023-6-30 21:03:14 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-6-30 21:08 编辑

英文提示 错误的代码根本不能运行 无意义的代码段  有AI的风格
 楼主| 发表于 2023-6-30 21:16:05 | 显示全部楼层
飞雪神光 发表于 2023-6-30 21:03
英文提示 错误的代码根本不能运行 无意义的代码段  有AI的风格

我把我写的无法运行的UCS代码删除了,你再看看。这个代码一定可以运行的!!!
发表于 2023-6-30 21:38:01 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-6-30 21:43 编辑

  1. (defun c:water (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
  2.   (defun *error*()
  3.     (command "ucs" olducs "")
  4.   )
  5.   (if (not (tblsearch "layer" "water"))
  6.     (entmake(list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 "water")'(62 . 1)'(70 . 0)'(6 . "CONTINUOUS")))
  7.   )
  8.   (defun lm-arcwith3p (center point1 point2 / rad1 rad2 r)
  9.     (setq rad1 (angle center point1))
  10.     (setq rad2 (angle center point2))
  11.     (setq r (distance center point1))
  12.     (entmake (list '(0 . "ARC")
  13.                '(100 . "AcDbEntity")
  14.                '(67 . 0)
  15.                '(100 . "AcDbCircle")
  16.                '(8 . "water")
  17.                (cons 10 center)
  18.                (cons 40 r)
  19.                '(100 . "AcDbArc")
  20.                (cons 50 rad1)
  21.                (cons 51 rad2)
  22.              )
  23.     )
  24.     (entlast)
  25.   )
  26.   (setq olducs (getvar "UCSORG"))
  27.   (command "ucs" "w")
  28.   (setvar "peditaccept" 1)
  29.   (setvar "cmdecho" 0)
  30.   (while (setq sp (getpoint "\n指定波浪线起点:"))
  31.     (setq
  32.       ep (getpoint sp "\n指定波浪线终点:")
  33.       nu (/ (fix(distance sp ep)) 100)
  34.       ss (ssadd)
  35.     )
  36.     (setq xsp (car sp) xep (car ep))
  37.     (if (> xsp xep)
  38.       (progn
  39.         (setq tmpsp sp)
  40.         (setq sp ep)
  41.         (setq ep tmpsp)
  42.         
  43.       )
  44.     )
  45.     (setq an (angle sp ep))
  46.     (repeat nu
  47.       (setq cenpt(polar (polar sp an 50) (+ an (* pi 0.5)) 25))
  48.       (setq ss (ssadd (lm-arcwith3p cenpt sp (setq ep(polar sp an 100))) ss))
  49.       (setq sp ep)
  50.     )
  51.     (command ".pedit" "m" ss "" "J" 0 "" )
  52.   )
  53.   (command "ucs" olducs "")
  54.   (princ)
  55. )
 楼主| 发表于 2023-6-30 23:31:26 | 显示全部楼层

感谢你的指点,仍然存在两个问题
第一,我的原设想是用三段线取代圆弧,不然开始就可以使用圆弧代替
第二,如果连续画线,第二次的起点应该为上次的终点
发表于 2023-6-30 23:58:17 | 显示全部楼层
那你自己改一改就好了
 楼主| 发表于 2023-7-1 00:28:42 | 显示全部楼层
飞雪神光 发表于 2023-6-30 23:58
那你自己改一改就好了

第一条我可以试试,但是第二条我还真不知道怎么进入循环
发表于 2023-7-1 10:35:04 | 显示全部楼层
meja 发表于 2023-7-1 00:28
第一条我可以试试,但是第二条我还真不知道怎么进入循环

  1. (setq sp (getpoint "\n指定波浪线起点:"))
  2. (setq ep (getpoint sp "\n指定波浪线终点:"))       
  3. (while ep
  4.        
  5.        
  6.         (setq ep (getpoint sp "\n指定波浪线终点:"))       
  7. )
 楼主| 发表于 2023-7-1 12:36:48 | 显示全部楼层
本帖最后由 meja 于 2023-7-1 17:26 编辑
  1. (setq sp (getpoint "\n指定波浪线起点:"))     
  2. (while ep        
  3.         (setq ep (getpoint sp "\n指定波浪线终点:"))        
  4. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 23:57 , Processed in 0.186959 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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