乐筑天下

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

[编程交流] Lisp-将pt1切换到pt2-

[复制链接]

9

主题

33

帖子

23

银币

初来乍到

Rank: 1

铜币
47
发表于 2022-7-6 17:12:10 | 显示全部楼层 |阅读模式
你好
 
我正在寻找一个lisp能够切换pt1到pt2从一行
有一个条件。。。仅当Y轴上的pt2>pt1时。
 
pt1=良好
l
l
l
l
pt2=良好
 
pt2=坏
l
l
l
l
pt1=坏
 
知道吗?
非常感谢。
回复

使用道具 举报

9

主题

33

帖子

23

银币

初来乍到

Rank: 1

铜币
47
发表于 2022-7-6 17:22:31 | 显示全部楼层
我真的很想知道是否可能请
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 17:26:29 | 显示全部楼层
你考虑到了吗?
 
  1. (defun c:test(/ pt1 pt2)
  2. (and
  3.    (setq pt1(getpoint "\nSpecify pt1: "))
  4.    (setq pt2(getpoint "\nSpecify pt2: "))
  5.    (>(cadr pt2)(cadr pt1))
  6.    (vl-cmdf "_.line" pt1 pt2 "")
  7.    ); end and
  8. (princ)
  9. ); end of c:test
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:35:22 | 显示全部楼层
以下是线路:
 
  1. (defun c:linewiz ()
  2.    (vl-load-com)
  3.    (defun MkLine (p1 p2 lw_lay)
  4. (entmakex (list        (cons 0 "LINE")
  5.                 (cons 8 lw_lay)
  6.                 (cons 10 p1)
  7.                 (cons 11 p2)
  8.           ) ;_ end_list
  9. ) ;_ end_entmakex
  10.    ) ;_ end_defun
  11.    (if        (setq lw_set (ssget '((0 . "LINE"))))
  12. (progn
  13.     (setq counter 0)
  14.     (while (< counter (sslength lw_set))
  15.         (setq lw_ent (ssname lw_set counter))
  16.         (setq lw_lay (cdr (assoc 8 (entget lw_ent))))
  17.         (if
  18.             (< (cadr (setq lw_stpt
  19.                               (vlax-curve-getStartPoint
  20.                                   lw_ent
  21.                               ) ;_ end_vlax-curve-getStartPoint
  22.                      ) ;_ end_setq
  23.                ) ;_ end_cadr
  24.                (cadr (setq lw_endpt
  25.                               (vlax-curve-getendpoint
  26.                                   lw_ent
  27.                               ) ;_ end_vlax-curve-getendpoint
  28.                      ) ;_ end_setq
  29.                ) ;_ end_cadr
  30.             ) ;_ end_<
  31.                (progn
  32.                    (mkline lw_endpt lw_stpt lw_lay)
  33.                    (entdel lw_ent)
  34.                ) ;_ end_progn
  35.         ) ;_ end_if
  36.         (setq counter (1+ counter))
  37.     ) ;_ end_while
  38. ) ;_ end_progn
  39.    ) ;_ end_if
  40.    (princ)
  41. ) ;_ end_defun
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:36:46 | 显示全部楼层
这可能会引起一些兴趣。
WallHatch。lsp
回复

使用道具 举报

9

主题

33

帖子

23

银币

初来乍到

Rank: 1

铜币
47
发表于 2022-7-6 17:47:57 | 显示全部楼层
工作很好,但这并不能解决我的问题。
 
我会解释为什么。。。
 
这是CAB为我做的一个代码
 
  1. ;;  CAB 10.23.08  version 1.4
  2. ;;  added skip of length too short for sizing
  3. ;;  CAB 10.24.08  version 1.5
  4. ;;  Changed test for Metric using MEASUREMENT ILO MEASUREINIT system var
  5. ;;  Zykl0 10.24.08  version 1.5.1
  6. ;;  Changed Some Layers and textstyle to fit new template
  7. (defun c:LabelPipe (/ index ss obj lyr ept spt mpt mpt1 mpt2 txtht len len$ lst dUnits
  8.                    MinLen Metric
  9.                    txtoffset 25Size 32Size 40Size 50Size 65Size maketext kdub:roundNearest GetUnits)
  10. (defun maketext (pt ang str ht just lay sty / dxf72 dxf73)
  11.    ;;(setq dxf72 (cdr (assoc just '(("TC" . 1 )("BC" . 1 )))))
  12.    (setq dxf73 (cdr (assoc just '(("TC" . 3) ("BC" . 1)))))
  13.    (entmakex (list (cons 0 "TEXT")
  14.                    (cons 1 str) ; (the string itself)
  15.                    (cons 6 "BYLAYER") ; Linetype name
  16.                    (cons 7 sty) ;* Text style name, defaults to STANDARD, not current
  17.                    (cons 8 lay) ; layer
  18.                    (cons 10 pt) ;* First alignment point (in OCS)
  19.                    (cons 11 pt) ;* Second alignment point (in OCS)
  20.                    ;;(cons 39 0.0) ; Thickness (optional; default = 0)
  21.                    (cons 40 ht) ;* Text height
  22.                    ;;(cons 41 1.0) ; Relative X scale factor, Width Factor, defaults to 1.0
  23.                    (cons 50 ang) ; Text rotation ange
  24.                    ;;(cons 51 0.0) ; Oblique angle
  25.                    (cons 71 0) ; Text generation flags
  26.                    (cons 72 1) ; Horizontal text justification type
  27.                    (cons 73 dxf73) ; Vertical text justification type
  28.              )
  29.    )
  30. )
  31. ;;* kdub:roundNearest (numVal roundTo displayPrecision)
  32. ;; Round a numeric positive number to the NEAREST 'rounded' number
  33. ;; and format to n digits
  34. ;; kwb@theSwamp 20070814
  35. (DEFUN kdub:roundNearest (numVal roundTo displayPrecision / remNum)
  36.      (SETQ remNum (REM numVal roundTo))
  37.      (RTOS (IF (>= (* 2 remNum) roundTo)
  38.                (+ numVal (- roundTo remNum))
  39.                (- numVal remNum)
  40.            )
  41.            2
  42.            displayPrecision
  43.      )
  44. )
  45. ;;  Returns the type of units
  46. (defun GetUnits (/ Units)
  47.    (setq Units (getvar "InsUnits")) ; DesignCenter Drag Units
  48.    (cond
  49.      ((= Units 0) ;NoUnit
  50.       (if (= (getvar "MEASUREMENT") 1) ; if metric
  51.         "mm"                           ; use Millimeter
  52.         "inch"                         ; else Inch
  53.       )
  54.      )
  55.      (t
  56.       (nth
  57.         (1- Units)
  58.         (list
  59.           "inch"       ;Inch
  60.           "feet"       ;Feet
  61.           "mile"       ;Mile
  62.           "mm"         ;Millimeter
  63.           "cm"         ;Centimeter
  64.           "m"          ;Meter
  65.           "km"         ;Kilometer
  66.           "microinch"  ;Micro inch
  67.           "mil"        ;Milli inch
  68.           "yard"       ;Yard
  69.           "angstrom"   ;Angstrom
  70.           "nm"         ;Nanometer
  71.           "micron"     ;Micron
  72.           "dm"         ;Decimeter
  73.           "dam"        ;Decameter
  74.           "hm"         ;Hectometer
  75.           "gm"         ;Gigameter
  76.           "au"         ;Astronomic unit
  77.           "light_year" ;Light year
  78.           "parsec"     ;Parsec
  79.          )
  80.       )
  81.      )
  82.    )
  83. )
  84. ;;  use Royal Text Style if it exist
  85. (if (setq lst (tblsearch "style" "Royaltech"))
  86.    (setq sty "Royaltech"
  87.          txtht (cdr (assoc 40 lst)) ; calc the text height
  88.          txtht (if (zerop txtht)(* (getvar "dimscale") 0.09375)txtht) ; correct for 0
  89.    )
  90.    ;; else use current text height
  91.    (setq sty "STANDARD"
  92.          ;;txtht (getvar 'textsize) ; calc the text height
  93.          txtht (* (getvar "dimscale") 0.09375) ; calc the text height
  94.    )
  95. )
  96. (setq dUnits (strcat " "(GetUnits)))
  97. (if (or (vl-position (getvar "InsUnits") '(4 5 6 7 12 14 15 16 17))
  98.                (= (getvar "MEASUREMENT") 1) ; if metric
  99.            )
  100.    ;;  Metric Units
  101.    (setq txtoffset (/ txtht 2.0) ; text offset from line
  102.          25Size  (strcat "25")
  103.          32Size  (strcat "32")
  104.          40Size  (strcat "40")
  105.          50Size  (strcat "50")
  106.          65Size  (strcat "65")
  107.          MinLen    305  ; Min Length to add text
  108.          Metric    t
  109.    )
  110.    ;;  English Units
  111.    (setq txtoffset (/ txtht 2.0) ; text offset from line
  112.          25Size  "1""
  113.          32Size  "1¼""
  114.          40Size  "1½""
  115.          50Size  "2""
  116.          65Size  "2½""
  117.          MinLen    12  ; Min Length to add text
  118.    )
  119. )
  120. (setq index -1)
  121. (prompt "\nSelect pipes to label.")
  122. (if (setq ss (ssget '((0 . "LINE") (8 . "M-N-INC-CPVC-25,M-N-INC-CPVC-32,M-N-INC-CPVC-40,M-N-INC-CPVC-50,M-N-INC-CPVC-65"))))
  123.    (progn
  124.      (command "._Undo" "_begin")
  125.      (while (< (setq index (1+ index)) (sslength ss))
  126.        (setq obj (vlax-ename->vla-object (ssname ss index))
  127.              lyr (vla-get-layer obj)
  128.              ept (vlax-get obj 'endpoint)
  129.              spt (vlax-get obj 'startpoint)
  130.              ang (angle spt ept)
  131.              mpt (polar ept (angle ept spt) (/ (distance ept spt) 2.0))
  132.              len (vlax-get obj 'length)
  133.        )
  134.        (if (> len MinLen)
  135.          (progn
  136.        (if (and (> ang (* 0.5 pi)) (<= ang (* 1.5 pi)))
  137.          (setq ang (+ ang pi))
  138.        )
  139.        ;;  text offset from pipe
  140.        (setq mpt1  (polar mpt (+ ang (/ pi 2.0)) txtoffset)
  141.              mpt2 (polar mpt (+ ang (* pi 1.5)) txtoffset)
  142.        )
  143.        ;;  adjust for Metric units rounded to 5 & 0 decimal points
  144.        ;;  or English Units rounded to 1/4
  145.        (if Metric ; if metric
  146.          (setq len$ (strcat (kdub:roundNearest len 5 0))) ; use Millimeter 05
  147.          (setq len$ (rtos len 4 2)) ; else Inch & 0.00
  148.        )
  149.        (cond
  150.          ((= lyr "M-N-INC-CPVC-25")
  151.           (maketext mpt1 ang 25Size txtht "BC" "M-N-INC-CPVC-25-DIA" sty)
  152.           (maketext mpt2 ang len$ txtht "TC" "M-N-INC-CPVC-25-LIN" sty)
  153.          )
  154.          ((= lyr "M-N-INC-CPVC-32")
  155.           (maketext mpt1 ang 32Size txtht "BC" "M-N-INC-CPVC-32-DIA" sty)
  156.           (maketext mpt2 ang len$ txtht "TC" "M-N-INC-CPVC-32-LIN" sty)
  157.          )
  158.          ((= lyr "M-N-INC-CPVC-40")
  159.           (maketext mpt1 ang 40Size txtht "BC" "M-N-INC-CPVC-40-DIA" sty)
  160.           (maketext mpt2 ang len$ txtht "TC" "M-N-INC-CPVC-40-LIN" sty)
  161.          )
  162.          ((= lyr "M-N-INC-CPVC-50")
  163.           (maketext mpt1 ang 50Size txtht "BC" "M-N-INC-CPVC-50-DIA" sty)
  164.           (maketext mpt2 ang len$ txtht "TC" "M-N-INC-CPVC-50-LIN" sty)
  165.          )
  166.          ((= lyr "M-N-INC-CPVC-65")
  167.           (maketext mpt1 ang 65Size txtht "BC" "M-N-INC-CPVC-65-DIA" sty)
  168.           (maketext mpt2 ang len$ txtht "TC" "M-N-INC-CPVC-65-LIN" sty)
  169.          )
  170.        )
  171.       ))
  172.      )
  173.      (command "._Undo" "_end")
  174.    )
  175. )
  176. (princ)
  177. )
  178. (prompt "\nLabel pipe lisp loaded, Enter LabelPipe to run.")
  179. (princ)
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:53:42 | 显示全部楼层
另一种解决方案是使用:
[code](如果(和(>ang(-0.5 pi)0.0001))(
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:59:59 | 显示全部楼层
添加了代码,加上我修改了你调用maketext的方式。
[code];;CAB 10.23.08版本1.4;;增加了长度过短的尺寸跳过;;CAB 10.24.08版本1.5;;使用测量ILO MEASUREINIT system var;更改了度量测试;;Zykl0 10.24.08版本1.5.1;;更改了一些图层和文本样式以适应新模板;;CAB 11.08.08版本1.6;;对线角度测试和修改的maketext调用进行了更正(defun c:LabelPipe(/index ss obj lyr ept spt mpt mpt1 mpt2 txtht len len$lst dUnits MinLen Metric txtoffset 25大小32大小40大小50大小65大小maketext kdub:roundNearest GetUnits)(defun maketext(pt ang str ht just lay sty sty/dxf72 dxf73);;(setq dxf72(cdr(assoc just’((“TC.1”)(“BC.1 kа))(setq dxf73(cdr(assoc just’((“TC.3”)(“BC.1аа”))(entmakex(list(cons 0“TEXT”)(cons 1 str);(字符串本身)(cons 6“BYLAYER”);线型名称(cons 7 sty);*文字样式名称,默认为标准,非当前(cons 8 lay);层(cons 10 pt);*第一个对齐点(OCS中)(cons 11 pt);*第二对齐点(OCS中);;(cons 39 0.0);厚度(可选;默认值=0)(cons 40 ht);*文字高度;;(cons 41 1.0);相对X比例因子、宽度因子默认为1.0(cons 50 ang);文本旋转范围;;(cons 51 0.0);斜角(cons 71 0);文本生成标志(cons 72 1);水平文本对齐类型(cons 73 dxf73);垂直文字对齐类型));;*kdub:roundNearest(numVal roundTo displayPrecision);;将数字正数四舍五入到最近的“四舍五入”数字;;和格式为n位;;kwb@theSwamp20070814(DEFUN kdub:roundNearest(numVal roundTo displayPrecision/remNum)(SETQ remNum(REM numVal roundTo))(RTOS(IF(>=(*2 remNum)roundTo)(+numVal(-roundTo remNum))(-numVal remNum))2 displayPrecision));;返回单位类型(defun GetUnits(/单位)(setq units(getvar“InsUnits”));设计中心阻力单位(cond(=单位0);名词(if(=(getvar“MEASUREMENT”)1);如果公制“mm”;使用毫米“英寸”;else Inch))(t(n(1-单位)(列出“Inch”;Inch“feet”;feet“mile”;mile“mm”;mmm“cm”;Meter“km”;km“microinch”;microinch“mil”;mili Inch“yard”;yard“angstrom”   ;埃“nm”;纳米“微米”;微米“dm”;分米“坝”;十米“hm”;百米“gm”;千兆“au”;天文单位“光年”;光年“parsec”;Parsec)));;如果存在皇家文本样式,请使用该样式(if(setq lst(tblsearch“Style”“Royaltech”))(setq sty“Royaltech”txtht(cdr(assoc 40 lst));计算文本高度txtht(if(zerop txtht)(*(getvar“dimscale”)0.09375)txtht);校正为0);;否则使用当前文本高度(setq sty“标准”;txtht(getvar的文本大小);计算文本高度txtht(*(getvar“dimscale”)0.09375);计算文本高度)(setq dUnits(strcat“”(GetUnits))(if(or(vl position(getvar“InsUnits”)'(4 5 6 7 12 14 15 16 17))(=(getvar“MEASUREMENT”)1);如果是公制);;公制单位(setq txtoffset(/txtht 2.0);第25行文字偏移量大小(strcat“25”)32大小(strcat“32”)40大小(strcat“40”)50大小(strcat“50”)65大小(strcat“65”)最小305;添加文本度量t)的最小长度;;英制单位(setq txtoffset(/txtht 2.0);从第25Size“1”32Size“1¼”40Size“1½”50Size“2”65Size“2½”MinLen 12;添加文本的最小长度)的文本偏移量(setq index-1)(提示“\n选择要标签的管道”)(if(setq ss(ssget’((0)”第“)(8”行M-N-INC-CPVC-25、M-N-INC-CPVC-32、M-N-INC-CPVC-40、M-N-INC-CPVC-50、,M-N-INC-CPVC-65”))(progn(命令“.u Undo”“\u begin”)(while(<(setq index(1+index))(sslength ss))(setq obj(vlax ename->vla object(ssname ss index))lyr(vla get layer obj)ept(vlax get obj’endpoint)spt(vlax get obj’startpoint)ang(angle spt ept)mpt(polar ept(angle ept spt)(/(distance ept spt)2.0)len(vlax get obj’length))(if(>len MinLen)(progn(if(and(>ang(-0.5 pi)0.0001))(
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:01:06 | 显示全部楼层
 
好的解决方案一如既往,艾伦,谢谢分享。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:08:58 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-5-26 11:24 , Processed in 0.810807 second(s), 73 queries .

© 2020-2025 乐筑天下

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