Author Topic: I want to draw my waveline continuously,PLS help  (Read 1272 times)

0 Members and 1 Guest are viewing this topic.

meja

  • Newt
  • Posts: 47
I want to draw my waveline continuously,PLS help
« on: June 30, 2023, 11:33:34 PM »
I made this code,but only one problems is below

when I draw following wave ,the start point isnt last endpoint

who can help,many thanks!

Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
  (defun *error*()
    (command "ucs" olducs "")
  )
  (if (not (tblsearch "layer" "water"))
    (entmake(list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 "water")'(62 . 1)'(70 . 0)'(6 . "CONTINUOUS")))
  )
  (defun lm-arcwith3p (point1 point2 / ang P1 p2 p3 p4 )
    (setq
      ang (angle point1 point2)

      P1  (polar point1 (- ang (* 0.25 pi))  28.28)
      P2  (polar p1 (+ (angle point1 p1) (* 0.1 pi)) 22.36)
      point2 (polar point1 ang 100)
      ;P3  (polar p4 (+ (angle p4 point2) (* 0.1 pi)) 22.36)
      p3 (polar p2 ang 20)
      P4  (polar point2 (+ ang (* 1.25 pi))  28.28)
      point3 (polar point1 (+ ang (* 0.5 pi)) 100)
     )
    ; (command ".ucs" point1 point2 point3)
       (command ".PLINE" point1 P1 p2 p3 p4 point2 "")
    ; (command ".ucs" "p" )
 
   
    (entlast)
  )
  (setq olducs (getvar "UCSORG"))
 ; (command "ucs" "w")
  (setvar "peditaccept" 1)
  (setvar "cmdecho" 0)
  (while
        (setq sp (getpoint "\nstart point:"))
       (setq ep (getpoint sp "\nend point:"))
      ;  (while ep       
       ;   (setq ep (getpoint sp "\n指定波浪线终点:"))       
       ;  )
        (setq nu (/ (fix(distance sp ep)) 100))
        (setq ss (ssadd))
   
    (setq xsp (car sp) xep (car ep))
    (if (> xsp xep)
      (progn
        (setq tmpsp sp)
        (setq sp ep)
        (setq ep tmpsp)
       
      )
    )
    (setq an (angle sp ep))
    (repeat nu
     
      (setq ss (ssadd (lm-arcwith3p sp (setq ep(polar sp an 100))) ss))
      (setq sp ep)
    )
    (command ".pedit" "m" ss "" "J" 0 "" )
  )
  (command "ucs" olducs "")
  (princ)
)
« Last Edit: July 01, 2023, 05:13:46 AM by meja »

masao

  • Newt
  • Posts: 97
Re: I want to draw my waveline in any UCS,PLS help!
« Reply #1 on: July 01, 2023, 02:21:34 AM »
I made this code,but two problems is below
1 I dont know how to trans UCS,so it has odd result
2 when I draw following wave ,the start point isnt last endpoint
who can help,many thanks!

Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
  (defun *error*()
    (command "ucs" olducs "")
  )
  (if (not (tblsearch "layer" "water"))
    (entmake(list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 "water")'(62 . 1)'(70 . 0)'(6 . "CONTINUOUS")))
  )
  (defun lm-arcwith3p (point1 point2 / rad1 rad2 r)
    (setq
      ang (angle point1 point2)
      P1  (polar(polar point1 ang 20)   (* -0.5 pi) 20)
      P2  (polar(polar point1 ang 40)   (* -0.5 pi) 30)
      P3  (polar(polar point1 ang 60)   (* -0.5 pi) 30)
      P4  (polar(polar point1 ang 80)   (* -0.5 pi) 20)
      point2 (polar point1 0 100)
     ; point3 (polar point1 (+ ang (* 0.5 pi)) 100)
      )
     ;  (command ".ucs" "3" "_NONE" point1 "_NONE" point2 "_NONE" point3)
      (command ".PLINE" point1 P1 p2 p3 p4 point2 "")
     ;  (command ".ucs" "w" )
   
    (entlast)
  )
  (setq olducs (getvar "UCSORG"))
  (command "ucs" "w")
  (setvar "peditaccept" 1)
  (setvar "cmdecho" 0)
  (while (setq sp (getpoint "\nstart point:"))
    (setq
      ep (getpoint sp "\nend point:")
      nu (/ (fix(distance sp ep)) 100)
      ss (ssadd)
    )
    (setq xsp (car sp) xep (car ep))
    (if (> xsp xep)
      (progn
        (setq tmpsp sp)
        (setq sp ep)
        (setq ep tmpsp)
       
      )
    )
    (setq an (angle sp ep))
    (repeat nu
     
      (setq ss (ssadd (lm-arcwith3p sp (setq ep(polar sp an 100))) ss))
      (setq sp ep)
    )
    (command ".pedit" "m" ss "" "J" 0 "" )
  )
  (command "ucs" olducs "")
  (princ)
)

Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
  (defun *error*()
    (command "ucs" olducs "")
  )
  (if (not (tblsearch "layer" "water"))
    (entmake(list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 "water")'(62 . 1)'(70 . 0)'(6 . "CONTINUOUS")))
  )
 
  (command "-layer" "set" "water" "")

  (defun lm-arcwith3p (point1 point2 / rad1 rad2 r)
    (setq
      ang (angle point1 point2)
      P1  (polar(polar point1 ang 20)   (+ (* -0.5 pi) ang) 20)
      P2  (polar(polar point1 ang 40)   (+ (* -0.5 pi) ang) 30)
      P3  (polar(polar point1 ang 60)   (+ (* -0.5 pi) ang) 30)
      P4  (polar(polar point1 ang 80)   (+ (* -0.5 pi) ang) 20)
      point2 (polar point1 (+ 0 ang) 100)
     ; point3 (polar point1 (+ ang (* 0.5 pi)) 100)
      )
     ;  (command ".ucs" "3" "_NONE" point1 "_NONE" point2 "_NONE" point3)
      (command ".PLINE" point1 P1 p2 p3 p4 point2 "")
     ;  (command ".ucs" "w" )
   
    (entlast)
  )
  (setq olducs (getvar "UCSORG"))
  (command "ucs" "w")
  (setvar "peditaccept" 1)
  (setvar "cmdecho" 0)
  (while (setq sp (getpoint "\nstart point:"))
    (setq
      ep (getpoint sp "\nend point:")
      nu (/ (fix(distance sp ep)) 100)
      ss (ssadd)
    )
    (setq xsp (car sp) xep (car ep))
    (if (> xsp xep)
      (progn
        (setq tmpsp sp)
        (setq sp ep)
        (setq ep tmpsp)
       
      )
    )
    (setq an (angle sp ep))
    (repeat nu
     
      (setq ss (ssadd (lm-arcwith3p sp (setq ep(polar sp an 100))) ss))
      (setq sp ep)
    )
    (command ".pedit" "m" ss "" "J" 0 "" )
  )
  (command "ucs" olducs "")
  (command "-layer" "set" "0" "")
  (princ)
)

try this
« Last Edit: July 01, 2023, 02:39:17 AM by masao »

meja

  • Newt
  • Posts: 47


Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
 
  (command "-layer" "set" "0" "")
  (princ)
)


[/quote]

你改了个寂寞,能不能看懂再来?

masao

  • Newt
  • Posts: 97


Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
 
  (command "-layer" "set" "0" "")
  (princ)
)



你改了个寂寞,能不能看懂再来?
[/quote]

what result? post a picture.

meja

  • Newt
  • Posts: 47


Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
 
  (command "-layer" "set" "0" "")
  (princ)
)




你改了个寂寞,能不能看懂再来?

what result? post a picture.
[/quote]

I update my code and resolve first problem,so only last problem,if you draw second wave ,the startpoint dont connect previous end point

masao

  • Newt
  • Posts: 97


Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
 
  (command "-layer" "set" "0" "")
  (princ)
)




你改了个寂寞,能不能看懂再来?

what result? post a picture.

I update my code and resolve first problem,so only last problem,if you draw second wave ,the startpoint dont connect previous end point
[/quote]

你的波浪設定尺寸是固定的,所以不可能連到結束點,如果要連到必須讓polar 移動距離用比例去設定才可能連到,如果不一定要連接到只要超過即可就讓repeat次數+1就好

是這個問題嗎?

還是你是要讓第2次畫的線跟前一次的作連接?
« Last Edit: July 01, 2023, 10:37:04 AM by masao »

masao

  • Newt
  • Posts: 97


Code: [Select]
(defun c:wa (/ *error* an cenpt dx ep lm-arcwith3p nu olducs sp ss)
 
  (command "-layer" "set" "0" "")
  (princ)
)

我是用pline畫的,可是遇到方向不同就會出現問題,因為要讓他連續劃線所以取消指令要按2次ESC


你改了个寂寞,能不能看懂再来?

what result? post a picture.

I update my code and resolve first problem,so only last problem,if you draw second wave ,the startpoint dont connect previous end point
[/quote]

Code: [Select]
(defun c:wa (/ *error* olducs osm sp ep nu xsp xep tmpsp ang p1 p2 p3 p4)
  (defun *error*()
    (command "ucs" olducs "")
    (setvar "osmode" osm)
  )
  (if (not (tblsearch "layer" "water"))
    (entmake(list'(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 "water")'(62 . 1)'(70 . 0)'(6 . "CONTINUOUS")))
  )

  (setq olducs (getvar "UCSORG"))

  (setq osm (getvar "osmode"))

  (setvar "peditaccept" 1)
  (setvar "cmdecho" 0)

(setvar "osmode" 1)

       (setq sp (getpoint "\nstart point:"))
       (setq ep (getpoint sp "\nend point:"))

(setvar "osmode" 0)

        (setq nu (/ (fix(distance sp ep)) 100))
   
    (setq xsp (car sp) xep (car ep))
    (if (> xsp xep)
      (progn
        (setq tmpsp sp)
        (setq sp ep)
        (setq ep tmpsp)
       
      );progn
    );if

(setq
      ang (angle sp ep)

      P1  (polar sp (- ang (* 0.25 pi))  28.28)
      P2  (polar p1 (+ (angle sp p1) (* 0.1 pi)) 22.36)
      ep (polar sp ang 100)
 
      p3 (polar p2 ang 20)
      P4  (polar ep (+ ang (* 1.25 pi))  28.28)
)

    (command ".PLINE" sp P1 p2 p3 p4 ep)
   
    (repeat nu

    (setq sp ep)

(setq

      P1  (polar sp (- ang (* 0.25 pi))  28.28)
      P2  (polar p1 (+ (angle sp p1) (* 0.1 pi)) 22.36)
      ep (polar sp ang 100)
 
      p3 (polar p2 ang 20)
      P4  (polar ep (+ ang (* 1.25 pi))  28.28)
)
     
    (command sp P1 p2 p3 p4 ep)

    );repeat

  (while

(setvar "osmode" 1)

       (setq sp (getpoint "\nstart point:"))
       (setq ep (getpoint sp "\nend point:"))

(setvar "osmode" 0)

        (setq nu (/ (fix(distance sp ep)) 100))
   
    (setq xsp (car sp) xep (car ep))
    (if (> xsp xep)
      (progn
        (setq tmpsp sp)
        (setq sp ep)
        (setq ep tmpsp)
       
      );progn
    );if

(setq
      ang (angle sp ep)

      P1  (polar sp (- ang (* 0.25 pi))  28.28)
      P2  (polar p1 (+ (angle sp p1) (* 0.1 pi)) 22.36)
      ep (polar sp ang 100)
 
      p3 (polar p2 ang 20)
      P4  (polar ep (+ ang (* 1.25 pi))  28.28)
      point3 (polar sp (+ ang (* 0.5 pi)) 100)
)

    (command sp P1 p2 p3 p4 ep)
   
    (repeat nu

    (setq sp ep)

(setq

      P1  (polar sp (- ang (* 0.25 pi))  28.28)
      P2  (polar p1 (+ (angle sp p1) (* 0.1 pi)) 22.36)
      ep (polar sp ang 100)
 
      p3 (polar p2 ang 20)
      P4  (polar ep (+ ang (* 1.25 pi))  28.28)
      point3 (polar sp (+ ang (* 0.5 pi)) 100)
)
     
    (command sp P1 p2 p3 p4 ep)

    );repeat

);while
   
  (command "ucs" olducs "")
  (princ)
)

我是用pline畫的,可是遇到方向不同就會出現問題,因為要讓他連續劃線所以取消指令要按2次ESC,給你參考
« Last Edit: July 01, 2023, 12:44:21 PM by masao »

BIGAL

  • Swamp Rat
  • Posts: 1429
  • 40 + years of using Autocad
Re: I want to draw my waveline continuously,PLS help
« Reply #7 on: July 01, 2023, 08:51:25 PM »
Maybe use a linetype ?


A man who never made a mistake never made anything

meja

  • Newt
  • Posts: 47
Re: I want to draw my waveline continuously,PLS help
« Reply #8 on: July 02, 2023, 02:11:51 AM »
Maybe use a linetype ?


LINETYPE IS ONLY ONE OF MY CHOICE

ribarm

  • Gator
  • Posts: 3306
  • Marko Ribar, architect
Re: I want to draw my waveline continuously,PLS help
« Reply #9 on: July 02, 2023, 03:32:30 AM »
I don't know, have you tried built-in REVCLOUD command?
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

meja

  • Newt
  • Posts: 47
Quote
你的波浪設定尺寸是固定的,所以不可能連到結束點,如果要連到必須讓polar 移動距離用比例去設定才可能連到,如果不一定要連接到只要超過即可就讓repeat次數+1就好

是這個問題嗎?

還是你是要讓第2次畫的線跟前一次的作連接?

我的想法来自于这个代码by kent cooper

https://www.theswamp.org/index.php?topic=54495.msg590060#msg590060

但是我水平有限,源程序仍然不能处理90度的转角的

我的程序的bug在于我有一个方向判断,因为水面的方向一直向上的,和保温层不同,