乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 85|回复: 6

[编程交流] 画云笔记,为什么有

[复制链接]

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 22:15:47 | 显示全部楼层 |阅读模式
  1. (defun C:TEST (/ DDJD1 DDJD2 DDJD3 E OLDCEC OLDCEL OLDLAYER OSM1 RETURN# SCA)
  2. (defun *error* (msg)
  3.    (vl-bt)
  4.    (cond (*DOC* (_EndUndo *DOC*)))  
  5.    (while (not (equal (getvar "cmdnames") "")) (command nil))
  6.    (setvar "nomutt" 0)
  7.    (cond (oldCel (setvar 'CELTYPE oldCel)))
  8.    (cond (oldCec (setvar 'CECOLOR oldCec)))
  9.    (cond (oldLayer (setvar 'Clayer oldLayer)))
  10.    (cond (osm1 (setvar "osmode" osm1)))
  11.    (princ "\n ERROR!")
  12.    (princ)
  13. )
  14. (defun GETDATA ()
  15.    (setq DDJD1 (get_tile "DDJD1"))
  16.    (cond ((equal (setq DDJD2 (get_tile "DDJD2")) "") (setq DDJD2 "Modify")))
  17.    (setq DDJD3 (get_tile "DDJD3"))
  18.    (setenv "HuangMR\\XDYX" DDJD1)
  19.    (setenv "HuangMR\\XDYXNum" DDJD3)
  20. )
  21. (defun SETDATA (/ NAME)
  22.    (setq name (getenv "HuangMR\\XDYX"))
  23.    (cond ((not name) (setq name "Huangmingru")))
  24.    (Set_tile "DDJD1" name)
  25.    (setq name (getenv "HuangMR\\XDYXNum"))
  26.    (cond ((not name) (setq name "1")))
  27.    (Set_tile "DDJD3" name)
  28. )
  29. (defun HHXDdia (/ DCLID FN FNAME LIN)
  30.    (setq fname (vl-filename-mktemp nil nil ".dcl"))
  31.    (setq fn (open fname "w"))
  32.    (write-line "HHXDYX : dialog {label = "Draw the cloud note-Huangmingru";" fn)
  33.    (write-line " :row{" fn)
  34.    (write-line        "  : edit_box {label = "Name";key = "DDJD1";value = "Huangmingru";}"
  35.                fn
  36.    )
  37.    (write-line "  :spacer { }:spacer { }:spacer { }:spacer { }:spacer { }" fn)
  38.    (write-line        "  : edit_box {label = "Edition ";key = "DDJD3";value = "1";}"
  39.                fn
  40.    )
  41.    (write-line "  }" fn)
  42.    (write-line        " : edit_box {label = "Explanation";key = "DDJD2";value = "Modify";}"
  43.                fn
  44.    )
  45.    (write-line " ok_cancel;" fn)
  46.    (write-line "}" fn)
  47.    (close fn)
  48.    (setq fn (open fname "r"))
  49.    (setq dclid (load_dialog fname))
  50.    (while (or (eq (substr (setq lin
  51.                                  (vl-string-right-trim        "" fn)"
  52.                                                        (vl-string-left-trim "(write-line "" (read-line fn))
  53.                                  )
  54.                           )
  55.                           1
  56.                           2
  57.                   )
  58.                   "//"
  59.               )
  60.               (eq (substr lin 1 (vl-string-search " " lin)) "")
  61.               (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9) " : dialog"))
  62.           )
  63.    )
  64.    (new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
  65.    (setdata)
  66.    (action_tile "accept" "(getdata)(done_dialog 1)")
  67.    (action_tile "cancel" "(done_dialog 0)")
  68.    (setq return# (start_dialog))
  69.    (unload_dialog dclid)
  70.    (close fn)
  71.    (vl-file-delete fname)
  72.    (princ)
  73. )
  74. (vl-load-com)
  75. (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  76. (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  77. (_StartUndo *DOC*)
  78. (setq oldLayer (getvar "Clayer"))
  79. (cond        ((not (tblsearch "layer" "defpoints")) (command "_.layer" "_M" "defpoints" ""))
  80.        (T (setvar 'Clayer "defpoints"))
  81. )
  82. (setq oldCec (getvar "CECOLOR"))
  83. (setvar 'CECOLOR "1")
  84. (setq SCA (* (getvar "DIMSCALE") 10))
  85. (princ "\nDraw a close curve ")
  86. (cond        ((setq e (HH:XD:Pline))
  87.         (command "_.revcloud" "_A" SCA "" "_o" e "")
  88.         (setq e (entlast))
  89.         (HHXDdia)
  90.         (cond
  91.           ((equal return# 1)
  92.            (setq oldCel (getvar 'CELTYPE))
  93.            (setq DDJD3 (strcat "△Modify" DDJD3 "times"))
  94.            (cond ((not (tblsearch "LTYPE" DDJD3)) (HHXD:makelt DDJD3)))
  95.            (setvar 'CELTYPE DDJD3)
  96.            (princ "\nNotes position ")
  97.            (VL-CATCH-ALL-APPLY 'HH:TextPlace (list e DDJD1 DDJD2))
  98.            (cond (oldCel (setvar 'CELTYPE oldCel)))
  99.           )
  100.         )
  101.        )
  102. )  
  103. (cond (oldCec (setvar 'CECOLOR oldCec)))
  104. (cond (oldLayer (setvar 'Clayer oldLayer)))
  105. (_EndUndo *DOC*)
  106. (gc)
  107. (princ)
  108. )
  109. (defun _StartUndo (*DOC*)
  110. (_EndUndo *DOC*)
  111. (vla-StartUndoMark *DOC*)
  112. )
  113. (defun _EndUndo        (*DOC*)
  114. (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  115.    (vla-EndUndoMark *DOC*)
  116. )
  117. )
  118. (defun HH:STRING:LEN (sty str h scl)
  119. (and (or (not sty)
  120.    (= sty "")
  121.    (not (tblsearch "style" sty))
  122.       )
  123.       (setq sty (getvar "textstyle"))
  124. )
  125. (abs
  126.    (car
  127.      (apply 'mapcar
  128.      (cons '-
  129.     (textbox (list (cons 1 str) (cons 7 sty) (cons 40 h) (cons 41 scl))
  130.      )
  131.      )
  132.    )
  133. )
  134. )
  135. )
  136. (defun HH:isClosed (obj)
  137. (or (vlax-curve-isclosed e)
  138.      (equal (vlax-curve-getstartpoint e)
  139.             (vlax-curve-getendpoint e)
  140.             1e-5
  141.      )
  142. )
  143. )
  144. (defun HH:MakeClosed (en / OBJ)
  145. (cond        ((equal (type en) 'ENAME) (setq obj (vlax-ename->vla-object en)))
  146.        (T (setq obj en))
  147. )
  148. ;;(if (equal (vlax-get obj 'Closed) 0) (vlax-put obj 'Closed -1))
  149. ;;(equal (vlax-get-property obj 'closed) :vlax-false)
  150. ;;(vlax-put-property obj 'closed :vlax-true)
  151. (cond ((not (vlax-curve-isclosed obj)) (vla-put-closed obj :vlax-true)))
  152. )
  153. (defun HH:command (commandstr / E E0)
  154. (setq e0 (entlast))
  155. (apply 'command (list (strcat "_." commandstr)))
  156. (while (equal (getvar "cmdnames") commandstr) (command pause))
  157. (setq e (entlast))
  158. (cond ((not (equal e0 e)) e))
  159. )
  160. (defun HH:XD:Pline (/ E EN)
  161. (cond
  162.    ((setq e (HH:command "PLINE"))         
  163.     (setq en (entget e))
  164.     (cond
  165.       ((> (cdr (assoc 90 en)) 2) (cond ((not (HH:isClosed e)) (HH:MakeClosed e))))
  166.       (T (entdel e))
  167.     )
  168.     e
  169.    )
  170. )
  171. )
  172. (defun EntmakeLMTEXT (str pt Textheigh)
  173. (entmakeX
  174.    (list '(0 . "TEXT")
  175.          (cons 1 str)
  176.          (cons 10 pt)
  177.          (cons 40 Textheigh)
  178.          (cons 11 pt)
  179.          '(73 . 2)
  180.    )
  181. )
  182. )
  183. (defun EntmakeMtext (str pt Textheigh)
  184. (entmakeX
  185.    (list '(0 . "MTEXT")
  186.          '(100 . "AcDbEntity")
  187.          '(100 . "AcDbMText")
  188.          ;;'(7 . "Standard")
  189.          (cons 1 str)
  190.          (cons 10 pt)
  191.          (cons 40 Textheigh)
  192.    )
  193. )
  194. )
  195. (defun HH:TextPlace (e DDJD1 DDJD2 / CODE DATE EN ENTDAT ENTM ENTNAME LST LST0 P P0 P1 PS PS1 PTS STR TEXTHEIGH X Y)
  196. (setq Lst0 (parse3 (strcat "Notes:" DDJD2) "[\\u4E00-\\u9FA5]|[^\\u4E00-\\u9FA5/ ]|[\\s]+"));;
  197. (SETQ Textheigh (* (GETVAR "DIMTXT") (GETVAR "DIMSCALE")))
  198. (while (and (setq code (grread T ) (= (car code) 5) (setq p (cadr code)))
  199.    (setq p0 (vlax-curve-getClosestPointTo e p))
  200.    (redraw)
  201.    (grdraw p p0 1)
  202. )
  203. (cond        (p
  204.         (EntmakeLine p p0)
  205.         (while        (and (setq code (grread T ) (= (car code) 5) (setq p1 (cadr code)))
  206.           (setq pts (list p (list (car p) (cadr p1)) p1 (list (car p1) (cadr p)) p))
  207.           (redraw)
  208.           (mapcar '(lambda (x y) (grdraw x y 1)) pts (cdr pts))
  209.           (setq Y (max (cadr p) (cadr p1)))
  210.           (setq x (min (car p) (car p1)))
  211.           (setq ps (list (+ x Textheigh) (- Y Textheigh Textheigh)))
  212.           (cond ((not (equal p p1))                  
  213.                  (setq Lst (MtextDivde p p1 Lst0 Textheigh))
  214.                  (setq str (lst->str1 Lst "\\P"))
  215.                  (setq en (entget EntM))
  216.                  (entmod (subst (cons 1 str) (assoc 1 en) en))
  217.                  (command "_.move" Entdat EntName EntM "" "non" ps1 "non" ps)
  218.                  (setq ps1 ps)
  219.                 )
  220.                 (T
  221.                  (setq date (menucmd "M=$(edtime,$(getvar,date),YYYY.MO.DD)"))
  222.                  (setq date (strcat "Time:" date))
  223.                  (setq ps1 ps)
  224.                  (setq Entdat (EntmakeLMTEXT date ps1 Textheigh))
  225.                  (setq ps (mapcar '- ps (list 0 (* Textheigh 2))))
  226.                  (setq EntName (EntmakeLMTEXT (strcat "Name:" DDJD1) ps Textheigh))
  227.                  (setq ps (mapcar '- ps (list 0 (* Textheigh 1.5))))
  228.                  (setq EntM (EntmakeMtext (strcat "Notes:" DDJD2) ps Textheigh))
  229.                 )
  230.           )
  231.         )
  232.        )
  233. )
  234. (cond ((and p p1) (command "_.rectang" "non" p "non" p1)))
  235. )
  236. (defun MtextDivde (p p1 L Textheigh / L1 LST SCOR STR1 STR2 W W0 X)
  237. (setq Lst L)
  238. (setq w (abs (- (car p) (car p1))))
  239. (setq w (abs (- w Textheigh Textheigh)))
  240. (while (setq L1 (car Lst))
  241.    (setq Lst (cdr Lst))
  242.    (setq str1 (cons L1 str1))
  243.    (setq str2 (apply 'strcat str1))
  244.    (setq W0 (abs (car (apply 'mapcar (cons '- (HH:String:Len "" str2 Textheigh 1))))))
  245.    (cond ((> w0 w)
  246.           (setq scor (cons str1 scor))
  247.           (setq str1 nil)
  248.          )
  249.    )
  250. )
  251. (cond (str1 (setq scor (cons str1 scor))))
  252. (reverse (mapcar '(lambda (x) (reverse x)) scor))
  253. )
  254. (defun lst->str1 (lst del / A)
  255. (if (cdr lst)
  256.    (strcat (apply 'strcat (car lst)) del (lst->str1 (cdr lst) del))
  257.    (apply 'strcat (car lst))
  258. )
  259. )
  260. (defun HHXD:makelt (str / EXPRT FILE FN TEXTHEIGH W0 Y)
  261. (SETQ Textheigh (* (GETVAR "DIMTXT") (GETVAR "DIMSCALE") 0.5))
  262. (setq W0 (abs (car (apply 'mapcar (cons '- (HH:String:Len "" str Textheigh 1))))))
  263. (setq w0 (VL-PRINC-TO-STRING w0))
  264. (setq Y (VL-PRINC-TO-STRING (* -0.5 Textheigh)))
  265. (setq Textheigh (VL-PRINC-TO-STRING Textheigh))  
  266. (setq File (vl-filename-mktemp nil nil ".lin"))
  267. (setq fn (open file "w"))
  268. (setq exprt (getvar 'expert))
  269. (write-line (strcat "*" str ", ---" str "---") fn)
  270. (write-line (strcat "A," w0 ",-0.01,[" (VL-PRIN1-TO-STRING str)
  271.                      ",STANDARD,S=" Textheigh ",R=0.0,X=-0.0,Y=" Y "],"
  272.                      (VL-PRINC-TO-STRING (* -1 (strlen str)))
  273.              )
  274.              fn
  275. )
  276. (close fn)
  277. (setvar 'expert 5)
  278. (command ".-linetype" "load" "*" file "")
  279. (setvar 'expert exprt)
  280. (cond (file (vl-file-delete file)))
  281. )
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 22:29:56 | 显示全部楼层
  1. (defun HH:STRING:LEN (sty str h scl)
  2. (and (or (not sty)
  3.    (= sty "")
  4.    (not (tblsearch "style" sty))
  5.       )
  6.       (setq sty (getvar "textstyle"))
  7. )
  8. (abs
  9.    (car
  10.      (apply 'mapcar
  11.      (cons '-
  12.     (textbox (list (cons 1 str) (cons 7 sty) (cons 40 h) (cons 41 scl))
  13.      )
  14.      )
  15.    )
  16. )
  17. )
  18. )

 
这个函数?犯错误
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:35:56 | 显示全部楼层
AFAIK函数mapcar参数必须是listp或consp
HH:String:Len返回numberp
  1. (setq W0 [color="red"](abs (car (apply 'mapcar (cons '-[/color] (HH:String:Len "" str2 Textheigh 1))))))
  1. (apply 'mapcar (cons '- [color="red"]{must be lists}[/color] ))

我建议省略映射两次,所以只需这样做
  1. (setq W0 (HH:String:Len "" str2 Textheigh 1))

 
我建议使用setbulge方法,但不确定是否比revcloud更快?
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 22:49:33 | 显示全部楼层
 
改变
  1. (setq W0 (abs (car (apply 'mapcar (cons '- (HH:String:Len "" str2 Textheigh 1))))))


  1. (setq W0 (HH:String:Len "" str2 Textheigh 1))

 
我测试过,但没有成功
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 22:56:08 | 显示全部楼层
需要帮助!请看一看!谢谢
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:12:13 | 显示全部楼层
嗨,艾伯托,
您只需要按照第#3篇中的建议,为每个子函数进行2次替换
  1. HHXD:makelt
  2. MtextDivde

 
此外,您没有包括所有子功能(缺失?)
所以我假设这些子函数可以工作。
请查看HH:TextPlace
  1. parse3
  2. EntmakeLine

 
也可能是包含“/\:;”的无效名称"?*|,=`"
(setvar“CELTYPE”?..);拒绝
HHXDdia内部
  1. (setq DDJD3 (strcat "[color="red"]?[/color]Modify" DDJD3 "times"))
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 23:21:27 | 显示全部楼层
 
================================================
非常感谢你,我的朋友hanhphuc
一些功能缺失,
  1. (defun XD::String:RegExpS (pat str key / end keys matches x)
  2. (if (not *xxvbsexp)
  3.    (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
  4. )
  5. (vlax-put *xxvbsexp 'Pattern pat)
  6. (if (not key)
  7.    (setq key "")
  8. )
  9. (setq key (strcase key))
  10. (setq        keys '(("I" "IgnoreCase")
  11.        ("G" "Global")
  12.        ("M" "Multiline")
  13.       )
  14. )
  15. (mapcar
  16.    '(lambda (x)
  17.       (if (wcmatch key (strcat "*" (car x) "*"))
  18. (vlax-put *xxvbsexp (read (cadr x)) 0)
  19. (vlax-put *xxvbsexp (read (cadr x)) -1)
  20.       )
  21.     )
  22.    keys
  23. )
  24. (setq matches (vlax-invoke *xxvbsexp 'Execute str))
  25. (vlax-for x matches (setq end (cons (vla-get-value x) end)))
  26. (reverse end)
  27. )
  28. ;;========================================================
  29. (defun parse3 (str delim)
  30. (xd::string:regexps delim str "")
  31. )

 
  1. (defun EntmakeLine (pt1 pt2)
  2. (entmake (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt2)))
  3. )

 
  1. (defun HH:String:Len (sty str h scl)
  2. (if (or (not sty)
  3.          (= sty "")
  4.          (not (tblsearch "style" sty))
  5.      )
  6.    (setq sty (getvar "textstyle"))
  7. )
  8. (textbox (list (cons 1 str) (cons 7 sty) (cons 40 h) (cons 41 scl)))
  9. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 06:16 , Processed in 0.406590 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表