satishrajdev 发表于 2022-7-6 07:47:20

如何链接属性块wi

你好
我需要一个帮助来解决我的问题,我有一个例程,下面给出了它在我的图纸上给出了纬度和经度。
但是我想要一个可以帮助我解决问题的lisp。
e、 g.使用这个lisp我们得到纬度和经度。
现在,从块1开始,我想用经度替换A°B'C“N,用纬度替换E°F'G”E。
这给出了我在block2中给出的结果。
 
谢谢
块2.dwg
块1.dwg

satishrajdev 发表于 2022-7-6 07:53:32

对不起,我忘了提及我在区块2图纸中使用了42区和半球-N

BIGAL 发表于 2022-7-6 08:03:20

只需将块作为lisp的一部分插入到co ord,然后它会自动要求两个属性,只需要一个简单的额外行
 

(command "Insert" "Dwg1" pt 1 1 0 Lat long)

Change
(princ (strcat "\n Latitude to (setq Lat (strcat "Latitude

satishrajdev 发表于 2022-7-6 08:11:05

非常感谢BIGAL
 
我已经根据你的建议更改了我的lisp,我的新修改lisp现在是
(defun C:1 ()

(setq lonzone (getint "\n Enter Zone:"))

(initget "N S")
(setq Hem (getkword "\n Enter the Hemisphere (S/N):"))

(setq Pnt (Getpoint "\n Specify Point:"))

(setq Xval (car Pnt))

(setq Yval (car (cdr Pnt)))

(if (= Hem "S")
   (setq Y (- 10000000 Yval))
   (setq Y Yval)
)

(if (and (or (= Hem "S") (= Hem "N")) (= Yval 0.0))
   (progn
   (setq Y Yval)
   (setq Hem "Equator")
   )
   (progn
   (setq Y Y)
   (Setq Hem Hem)
   )
)


(setq b 6356752.3142)

(setq a 6378137.0)

(setq X (- 500000.0 Xval))

(setq e (sqrt (- 1.0 (expt (/ b a) 2.0))))

(setq k0 0.9996)

(setq meridional-arc (/ Y k0))

(setq        mu (/ meridional-arc
      (* a
       (- 1
          (/ (expt e 2) 4)
          (/ (* 3 (expt e 4)) 64)
          (/ (* 5 (expt e 6)) 256)
       )
      )
   )
)

(setq        e1 (/ (- 1 (expt (- 1 (expt e 2)) 0.5))
      (+ 1 (expt (- 1 (expt e 2)) 0.5))
   )
)

(setq j1 (- (/ (* 3 e1) 2) (/ (* 27 (expt e1 3)) 32)))

(setq j2 (- (/ (* 21 (expt e1 2)) 16) (/ (* 55 (expt e1 4)) 32)))

(setq j3 (/ (* 151 (expt e1 3)) 96))

(setq j4 (/ (* 1097 (expt e1 4)) 512))

(setq        footprint-latitude
(+ mu
    (* j1 (sin (* 2.0 mu)))
    (* j2 (sin (* 4.0 mu)))
    (* j3 (sin (* 6.0 mu)))
    (* j4 (sin (* 8.0 mu)))
)
)

(setq eprime2 (/ (* e e) (- 1.0 (* e e))))

(setq c1 (* eprime2 (expt (cos footprint-latitude) 2)))

(setq        t1 (expt (/ (sin footprint-latitude) (cos footprint-latitude))
       2
   )
)

(setq        r1 (/ (* a (- 1 (expt e 2)))
      (expt (- 1
             (* (expt e 2)
                  (expt (sin footprint-latitude) 2)
             )
          )
          1.5
      )
   )
)

(setq        n1 (/ a
      (expt (- 1
             (* e
                  e
                  (sin footprint-latitude)
                  (sin footprint-latitude)
             )
          )
          0.5
      )
   )
)

(setq d (/ X (* n1 k0)))

(setq
   q1 (/ (* n1 (/ (sin footprint-latitude) (cos footprint-latitude)))
r1
      )
)

(setq q2 (/ (* d d) 2))

(setq        q3 (/ (* (- (+ 5
             (* 3 t1)
             (* 10 c1)
          )
          (* 4 c1 c1)
          (* 9 eprime2)
       )
       (expt d 4)
      )
      24
   )
)

(setq        q4 (/ (* (- (+ 61
             (* 90 t1)
             (* 298 c1)
             (* 45 t1 t1)
          )
          (* 3 c1 c1)
          (* 252 eprime2)
       )
       (expt d 6)
      )
      720
   )
)

(setq q6 (/ (* (+ 1 (* 2 t1) c1) (expt d 3)) 6))

(setq        q7 (/ (*
        (+ (- (+ (- 5 (* 2 c1)) (* 28 t1)) (* 3 c1 c1))
           (* 8 eprime2)
           (* 24 t1 t1)
        )
        (expt d 5)
      )
      120
   )
)

(setq zone-cm (- (* 6.0 lonzone) 183.0))

(setq lat (- footprint-latitude (* q1 (+ (- q2 q3) q4))))

(setq latitude (* (/ 180 pi) lat))
(if (> latitude 90.0)
   (setq latitude 90.0)
   (setq latitude latitude)
)

(setq latdeg (fix latitude))
(setq latmins (* (- latitude (fix latitude)) 60))
(setq latsecs (* (- latmins (fix latmins)) 60))

(setq long (/ (+ (- d q6) q7) (cos footprint-latitude)))

(setq longr (* (/ 180 pi) long))

(setq longitude (- zone-cm longr))

(if (< longitude 0.0)
   (setq lonhem "W")
   (setq lonhem "E")
)

(if (< longitude 0.0)
   (setq longitude (* -1 longitude))
   (setq longitude longitude)
)

(setq londeg (fix longitude))
(setq lonmins (* (- longitude (fix longitude)) 60))
(setq lonsecs (* (- lonmins (fix lonmins)) 60))
(setq Lat (strcat "Latitude" (itoa latdeg)
       "°"
       (itoa (fix latmins))
       "'"
       (rtos latsecs 2 2)
       "''"
       Hem
)
)
(setq long (strcat "Longitude" (itoa londeg)
       "°"
       (itoa (fix lonmins))
       "'"
       (rtos lonsecs 2 2)
       "''"
       lonhem
)
)
(command "Insert" "test" pnt 1 1 0 Lat long)
(princ)
)
 
但当我用我附加的属性块处理它时,它会出错。
 
它显示的错误是
Command: 1
Enter Zone:42
Enter the Hemisphere (S/N):N
Specify Point:Unknown command "LATITUDE20°55'23.23''N".Press F1 for help.
Unknown command "LONGITUDE71°31'26.21''E".Press F1 for help.
 
Lisp程序有什么错误吗
块1.dwg

MSasu 发表于 2022-7-6 08:12:40

似乎您在代码(测试)中使用的块不包含两个预期属性-如果您不知道如何创建它们,请查看本教程。或者将ATTREQ系统变量设置为0而不是1。

satishrajdev 发表于 2022-7-6 08:22:51

谢谢Msasu
 
那个教程帮助我学到了很多新东西。现在,我已经创建了新的属性块,但仍然显示与lisp相同的错误。
块1.dwg

MSasu 发表于 2022-7-6 08:28:22

似乎您没有修复ATTREQ系统变量的状态-在您附加的示例图形中,该值设置为0。因此,当通过AutoLISP插入块时,解释器不期望属性值。将所述变量设置为1,它应按预期工作。

satishrajdev 发表于 2022-7-6 08:34:24

我已经按照你说的去了,现在工作很顺利
 
非常感谢Msasu和BIGAL
 
但我还需要一件事,无论我在哪里放置挡块,它都应该是最近的舍入位置
i、 e.如果我把它放在762474.59432315668.1052,它将给出纬度-77°31'25.01''e和经度-20°55'22.05''N
但我想把它放在北纬77°31'25.00''E和经度20°55'22.00''N的位置
表示我将到达的最近位置。00十进制
 
有什么办法可以做到吗

BIGAL 发表于 2022-7-6 08:39:07

你可以用舍入误差玩一个简单的例子,将一个数字乘以100,取整数,然后再除以100,最后2个数字。对于lats和long,需要一些实验,否则只需要在字符串答案中切掉秒,但你们会凑齐吗?

satishrajdev 发表于 2022-7-6 08:43:32

作为新手,我真的不知道如何编辑这些代码,你能给我演示一下吗
页: [1] 2
查看完整版本: 如何链接属性块wi